Home Blog Page 176

9 dự án mới nhất giúp bạn thành trùm Frontend trong năm 2024

9-du-an-moi-nhat-giup-ban-thanh-trum-front-end-trong-nam-2020

Dù xuất phát điểm bạn ở đâu, là một tay gà mờ hay lão làng trong ngành, việc liên tục cập nhật khái niệm, ngôn ngữ và framework mới là điều bắt buộc để theo kịp xu hướng, đặc biệt là các tip và trick về frontend. Lấy ví dụ, cách đây 4 năm, React, nguồn mở của Facebook trở thành lựa chọn số 1 của các nhà lập trình JavaScript trên toàn cầu.

Tuy nhiên, Vue và Angular có chỗ đứng nhất định trong thị trường, và theo sau đó là sự ra đời hàng loạt của các framework Next.js, Nuxt.js và Gatsby, Gridsome, Quasar. Nếu bạn định hướng bản thân là một nhà lập trình JavaScript chuyên nghiệp, bạn cần có sự phong phú trong kinh nghiệm ở nhiều framework khác nhau.

Và nếu bạn thực sự đã vạch ra kế hoạch để trở thành một master, thì xin chúc mừng bạn, những tổng hợp dưới đây là 9 dự án, bao gồm những topic cụ thể kèm theo thư viện JavaScript để bạn tham khảo. Hãy nhớ rằng bạn chỉ thực sự thành thạo nó khi bắt tay thực hành và tự tạo cho riêng mình.

Xây dựng ứng dụng tìm kiếm phim bằng React (với Hook)

Bạn sẽ học được gì?

Xây dựng ứng dụng này, bạn sẽ cải thiện Kỹ năng React của mình bằng Hooks API. Dự án minh họa dưới đây sử dụng các thành phần của React, tập hợp nhiều hook, API bên ngoài và tất nhiên là một số định dạng thông qua CSS.

9 dự án mới nhất giúp bạn thành trùm Frontend trong năm 2020

Tech Stack & Features

  • React with Hooks
  • create-react-app
  • JSX
  • CSS

Dù không sử dụng bất kì một class nào, những dự án này mang đến cho bạn một điểm khởi đầu hoàn hảo với các chức năng của React trong năm 2022. Bạn có thể tham khảo ví dụ dưới đây: https://www.freecodecamp.org/news/how-to-build-a- phim-search-app-using-Reac-hook-24eb72ddfaf7/

Ứng tuyển ngay các vị trí tuyển dụng Frontend trên TopDev

Xây dựng ứng dụng trò chuyện với Vue

Một dự án tuyệt vời khác dành cho bạn là xây dựng một ứng dụng trò chuyện bằng thư viện JavaScript VueJS.

9 dự án mới nhất giúp bạn thành trùm Frontend trong năm 2020

Bạn sẽ học được gì?

Theo hướng dẫn này, bạn sẽ tìm hiểu cách thiết lập ứng dụng Vue từ đầu, tạo các component, handling state, tạo route, liên kết dịch vụ với bên thứ 3 và thậm chí handling authentication.

Tech Stack & Features

  • Vue
  • Vuex
  • Vue Router
  • Vue CLI
  • Pusher
  • CSS

Đây thực sự là một dự án tuyệt vời để bắt đầu với Vue hoặc cải thiện các kỹ năng hiện có của bạn để khắc phục sự phát triển vào năm 2022. Bạn có thể tìm thấy hướng dẫn ngay tại đây: https://www.sitepoint.com/pizer-vue-real-time-chat-app/

Xây dựng một ứng dụng thời tiết đẹp với Angular 8

Ví dụ này sẽ giúp bạn xây dựng một ứng dụng thời tiết đẹp bằng cách sử dụng Angular 8 của Google:

9 dự án mới nhất giúp bạn thành trùm Frontend trong năm 2020

Bạn sẽ học được gì?

Dự án này sẽ dạy cho bạn các kỹ năng có giá trị như trong khi bắt đầu tạo một ứng dụng, phát triển các thiết kế đi đến triển khai.

  Roadmap Frontend Developer - "Con đường tắt" để trở thành cao thủ Frontend Developer

Tech Stack & Features

  • Angular 8
  • Firebase
  • Server-Side Rendering
  • CSS with Grid Layout and Flexbox
  • Mobile friendly & responsive
  • Dark Mode
  • Beautiful UI

Điểm độc đáo của phần mềm đọc hiểu này là bạn không phải học từng thứ một mà sẽ được học toàn bộ lộ trình từ bản thiết kế sơ khai đến bản hoàn chỉnh cuối cùng để triển khai được.

https://medium.com/@hamedbaatour/build-a-real-world-beautitable-web-app-with-angular-6-a-to-z-ultimate-guide-2018-part-i-e121dd1d55e

Xây dựng ứng dụng việc cần làm với Svelte

Tuy là tân binh so với React, Vue và Angular, Svelte kinda cũng là một trong những dự án hấp dẫn nhất hành tinh trong năm 2022.

9 dự án mới nhất giúp bạn thành trùm Frontend trong năm 2020

Bạn sẽ học được gì?

Hướng dẫn này sẽ chỉ cho bạn cách tạo một ứng dụng bằng Svelte 3 từ đầu đến cuối. Nó sử dụng các component, styling và event handlers.

Tech Stack & Features

  • Svelte 3
  • Components
  • Styling via CSS
  • ES 6 syntax

Tham khảo một trong những dự án Svelte thành công hiếm hoi: https://medium.com/codingthesmartway-com-blog/building-a-svelte-3-todo-app-from-start-to-deployment-1737f72c23a6

Xây dựng giỏ hàng thương mại điện tử với Next.js

NextJs là framework phổ biến nhất để tạo các ứng dụng React hỗ trợ kết xuất phía máy chủ.

9 dự án mới nhất giúp bạn thành trùm Frontend trong năm 2020

Bạn sẽ học được gì?

Trong dự án này, bạn sẽ tìm hiểu cách thiết lập môi trường phát triển Next.js, tạo các trang và component mới, tìm nạp dữ liệu, định dạng và triển khai một ứng dụng tiếp theo.

Tech Stack & Features

  • Next.js
  • Components and Pages
  • Data Fetching
  • Styling
  • Deployment
  • SSR and SPA

Tham khảo một ví dụ đã triển khai thực tế: https://snipcart.com/blog/next-js-ec-Commerce-tutorial

Xây dựng một trang web blog đa ngôn ngữ đầy đủ bằng Nuxt.js

Nuxt.js sẽ phản ứng lại những gì Next.js sẽ phản ứng. Một framework tốt để kết hợp sức mạnh giữa render từ phía máy chủ và ứng dụng một trang. Ứng dụng cuối cùng mà bạn có thể tạo sẽ trông như thế này:

9 dự án mới nhất giúp bạn thành trùm Frontend trong năm 2020

Bạn sẽ học được gì?

Dự án ví dụ này sẽ dạy cho bạn cách xây dựng một trang web đầy đủ bằng cách sử dụng Nuxt.js từ lúc sơ khai đến bước triển khai cuối cùng. Nó sử dụng nhiều tính năng thú vị mà Nuxt cung cấp như các trang và component cũng như kiểu dáng với SCSS.

  Tính năng Frontend Presets của Laravel 5.5

Tech Stack & Features

  • Nuxt.js
  • Components and Pages
  • Storyblok module
  • Mixins
  • Vuex for state management
  • SCSS for styling
  • Nuxt middlewares

Theo cá nhân tôi, làm việc với Nuxt thực sự giúp bạn trở thành một nhà phát triển Vue tốt hơn! Tham khảo về dự án tại đây: https://www.storyblok.com/tp/nuxt-js-multilLanguage-website-tutorial

Xây dựng một blog với Gatsby

Gatsby là một trình tạo trang tĩnh tuyệt vời sử dụng React và GraphQL dưới hood. Đây là kết quả của dự án này:

9 dự án mới nhất giúp bạn thành trùm Frontend trong năm 2020

Bạn sẽ học được gì

Trong hướng dẫn này, bạn sẽ học cách tận dụng Gatsby để xây dựng một blog nổi bật mà bạn có thể sử dụng để viết bài của riêng mình trong khi sử dụng React và GraphQL.

Tech Stack & Features

  • Gatsby
  • React
  • GraphQL
  • Plugins & Themes
  • MDX / Markdown
  • Bootstrap CSS
  • Templates

Nếu bạn từng muốn tạo blog thì đây là một ví dụ hay ho để tận dụng React và GraphQL. Dù không chê giao diện của WordPress, nhưng với Gatsby, bạn có thể tạo các trang web có hiệu suất cao còn khi sử dụng React thì lại tạo một sự kết hợp tuyệt vời! Tham khảo thêm dự án dưới đây:

https://blog.bitsrc.io/how-to-build-a-blog-with-gatsby-and-boostrap-d1270212b3dc

Xây dựng một blog với Gridsome

Tương tự Next / Nuxt, Gridsome và Gatsby đều sử dụng GraphQL làm lớp dữ liệu nhưng Gridsome sử dụng VueJS. Gridsome là một trình tạo trang tĩnh tuyệt vời sẽ giúp bạn tạo các blog.

9 dự án mới nhất giúp bạn thành trùm Frontend trong năm 2020

Bạn sẽ học được gì

Dự án này sẽ dạy bạn cách xây dựng một blog đơn giản để bắt đầu với Gridsome, GraphQL và Markdown. Nó cũng bao gồm cách triển khai ứng dụng thông qua Netlify.

Tech Stack & Features

  • Gridsome
  • Vue
  • GraphQL
  • Markdown
  • Netlify

Dù không phải là hướng dẫn toàn diện nhất, tổng hợp trên đã bao gồm các khái niệm cơ bản về Gridsome và Markdown giúp cho các bạn mới bắt đầu dễ dàng hơn.

https://www.telerik.com/bloss/building-a-blog-with-vue-and-markdown-USE-gridsome

Xây dựng ứng dụng trình phát âm thanh giống SoundCloud với Quasar

Quasar là một framework khác của Vue cũng được sử dụng để xây dựng các ứng dụng di động. Trong dự án này, bạn sẽ tạo một ứng dụng trình phát âm thanh như sau:

9 dự án mới nhất giúp bạn thành trùm Frontend trong năm 2020

Bạn sẽ học được gì

Mặc dù các dự án khác tập trung chủ yếu vào các ứng dụng web, nhưng dự án này sẽ chỉ cho bạn cách tạo một ứng dụng di động bằng Vue thông qua framework Quasar. Bạn nên tự tạo một thiết lập Cordova hoạt động với cấu hình android studio/xcode. Nếu bạn chưa có, hãy tham khảo đường link tới Quasar ở dưới.

Tech Stack & Features

  • Quasar
  • Vue
  • Cordova
  • Wavesurfer
  • UI Components

Một dự án nhỏ cho thấy sức mạnh của Quasar khi xây dựng các ứng dụng di động:

Kết

Hẳn khi các anh em đọc qua bài này sẽ thực sự phân vân, liệu có nên bắt đầu với một framework hoàn toàn mới, hay tham gia vào một dự án mà bạn đã có kiến thức nền tảng. Đừng ngần ngại chia sẻ kinh nghiệm với TopDev nhé!

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

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

Lập trình viên, hãy tự cứu lấy đôi mắt mình trước khi quá muộn

Lập trình viên, hãy tự cứu lấy đôi mắt mình trước khi quá muộn

Nghề lập trình viên làm việc nhiều giờ liên tục, cường độ cao với máy tính là điều không thể tránh khỏi. Đó chính là nguyên nhân của các vấn đề về mắt cảm giác mệt mỏi, mờ nhạt đôi khi đi kèm những cơn nhức đầu vào buổi chiều muộn. Đặc biệt, khi cùng một lúc sử dụng nhiều thiết bị: máy tính, điện thoại, máy tính bảng, tivi,.. thì những dấu hiệu này càng đến sớm hơn. Đó là những dấu hiệu cho thấy mắt bạn bắt đầu có vấn đề, và đã đến lúc cần quan tâm tới nó nhiều hơn.

Với đặc thù công việc của mình, thật khó để yêu cầu lập trình viên hạn chế hay không sử dụng máy tính. Nhưng may mắn thay, có một vài lời khuyên từ chuyên gia có thể giúp bạn có được đôi mắt sáng, khỏe mà vẫn có thể đảm bảo tốt công việc của mình:

Sử dụng style chữ hợp lý

Có thể bạn chưa biết, cỡ chữ và màu sắc của trang văn bản được hiển thị cũng rất quan trọng đối với thị giác. Cỡ chữ lý tưởng là cỡ chữ gấp 3 lần cỡ chữ nhỏ nhất mà bạn có thể đọc được dù đứng xa máy tính một khoảng cách gấp 3 lần khoảng cách thông thường khi sử dụng máy. Bạn nên chọn chữ đen trên nền trắng hoặc chữ đậm trên nền sáng. Cần nhớ không nên chỉnh cho độ tương phản giữa chữ và nền quá kém hoặc đọc chữ trên một nền quá rối rắm sẽ không tốt cho thị giác của bạn chút nào.

Chớp mắt đúng cách

Nhìn chằm chằm vào máy tính liên tục nhiều giờ liền khiến chung ta quên chớp mặt, dẫn tới tình trạng mắt bị khô gây cảm giác khó chịu. Khi tập trung thật khó để nhớ phải chớp mắt. Giải pháp dành cho bạn là sử dụng nước mắt nhân tạo để giúp ngăn ngừa và làm giảm khô mắt. Thuốc nhỏ mắt không có chứa chất bảo quản có thể sử dụng một cách thường xuyên. Còn nếu sử dụng thuốc nhỏ mắt chứa chất bảo quản thì không nên dùng quá 4 lần/ngày.

 Đặc biệt lưu ý là bạn cần tránh nhầm lẫn giữa thuốc nhỏ mắt thông thường với các loại thuốc nhỏ mắt đặc dụng chữa các bệnh về mắt vì chúng có thể làm trầm trọng thêm các triệu crứng khô mắt, không có lợi cho đôi mắt của bạn.

 

Tùy chỉnh độ sáng

Màn hình chói có thể gây mỏi mắt và đau đầu. Điều chỉnh độ sáng của bạn để tránh phản xạ trên màn hình của bạn hoặc xem xét nhận phim chống lóa.

Không chỉ ánh sáng từ màn hình máy tính mới là nguyên nhân khiến đôi mắt bạn gặp vấn đề. Ánh sáng hoàn hảo là phải nên kết hợp hài hoà giữa nguồn sáng tự nhiên và nguồn sáng nhân tạo. Ánh sáng mờ hay quá rõ, ánh sáng trắng hay ánh sáng vàng đều khiến mắt bạn phải điều tiết, sẽ tác động tiêu cực tới thị giác. Ví dụ khi làm việc trong phòng tối sẽ làm cho mắt bạn mệt mỏi vì mắt phải điều tiết theo độ sáng của màn hình và bóng tối xung quanh.

Quy tắc 20-20-20

Sau 20 phút làm việc, mất 20 giây để nhìn vào thứ gì đó cách xa 20 feet (~6m). Đôi mắt của bạn có các cơ giúp chúng di chuyển và tập trung vào các vật thể khác nhau, nhưng nếu chúng ta nhìn chằm chằm vào màn hình cùng khoảng cách trong nhiều giờ tại một thời điểm, những cơ đó sẽ khó điều chỉnh khi chúng ta di chuyển trở lại.

Bố trí  màn hình máy tính hợp lý

Trong quá trình làm việc, ánh sáng chói và ánh sáng phản xạ từ màn hình máy tính chiếu trực tiếp tới mắt sẽ khiến mắt bạn khó chịu và căng thẳng. Bạn nên điều chỉnh độ tương phản và độ sáng trên màn hình đến một mức độ thoải mái, đảm bảo các chữ cái trên màn hình rất dễ đọc hoặc đặt thêm kính lọc cho màn hình.
Đồng thời, bạn cần giữ cho màn hình trong tầm mắt hoặc dưới tầm nhìn một chút, vị trí màn hình máy tính nên được đặt cách mắt 50 đến 60 cm. Lưu ý là bạn phải lau sạch bụi từ màn hình máy tính thường xuyên nếu không lượng bụi sẽ làm giảm độ tương phản, khúc xạ và ánh sáng của màn hình.

Tư thế ngồi làm việc

Tư thế ngồi sử dụng máy tính thường rất hay bị mọi người bỏ qua. Nghển cổ hoặc nghiêng đầu khi nhìn vào máy tính sẽ gây đau đầu và nhìn mờ. Việc duy trì khoảng cách giữa mắt với màn hình không những làm giảm tác động xấu mà còn giúp mắt nhìn được tốt hơn. Hãy chú ý để có tư thế ngồi làm việc hiệu quả mà vẫn thoải mái nhất.

Ăn uống đủ chất

Bổ sung thêm chế độ ăn giàu vitamin, đặc biệt các loại vitamin A, E, C, B2… có nhiều trong các loại rau xanh, quả đỏ và uống nhiều nước nữa bạn nhé. Việc ăn uống đầy đủ chất, giúp cơ thể bổ sung năng lượng và làm mới thực đơn hàng ngày là liều thuốc giúp dân văn phòng phòng ngừa nhiều bệnh về mắt.

Tôi đã lên trình senior thế đấy!

Một bí kíp nho nhỏ được đúc kết từ một senior developer với nhiều năm kinh nghiệm xông pha chiến trường.

Ngã ở đâu – đứng dậy từ chỗ đấy

Có công mài sắt có ngày nên kim! Không phải tự nhiên một lão làng trong giới lập trình lại có thể chễm chệ ngồi ở vị trí đấy. Sau đây tôi sẽ chia sẻ cho anh em một chu trình để tu luyện đến cảnh giới bất khả chiến bại: mắc sai lầm – sửa lỗi sai – học được gì từ những lỗi sai đó – chia sẻ với anh em và quay lại bước 1.

>>> Xem thêm: Senior Developer là gì? Những điều thú vị về Senior Developer

Ma cũ liệu có hơn ma mới?!

Nhiều anh em dev nghĩ rằng chỉ cần trưng cái CV cộp mác +2, +5 năm thì các nhà tuyển dụng sẽ bị mờ mắt bởi những con số. Thực chất, khi thật sự bắt tay vào công việc, một điều sẽ sớm lộ ra rằng thực chiến mới sử dụng được trong cuộc chiến mạng khốc liệt ngày nay. Sẽ thật đáng buồn nếu trong số 5 năm kinh nghiệm bạn trải qua, bạn chưa từng vấp ngã và rút ra bài học cho những sai lầm đó.

Biết người biết ta – trăm trận trăm thắng

Dù không phải là một điều trong list dài dặc JD, nghiên cứu thị trường là công việc một dev chuyên nghiệp dành thời gian để thực hiện. Nếu chỉ dựa vào kinh nghiệm cá nhân, các dev sẽ dễ “chủ quan khinh địch” và dễ bị tấn công bởi những lỗi mới chưa gặp. Khi mang những “đứa con” của bạn ra thử nghiệm thực tế, bạn sẽ biết được ưu nhược một cách khách quan hơn.

>>>Xem thêm: Hãy commit code có tâm như Senior Developer

Tại sao, tại sao và tại sao?

Chuyện một tay mơ trong làng “cốt” bị phang ngay câu chốt “vì nó vốn như thế, anh gặp rồi, không sửa được” là điều thường xuyên như cơm bữa. Cái thằng nó dám lẳng lặng gõ gõ bàn phím để lục tung bằng được lỗi là ở đâu chính là cái thằng sẽ sớm làm nên chuyện! Đó là lý do có những lão làng kinh nghiệm lên đến 6,7 năm nhưng kiến thức chưa hẳn bằng một bé 3 năm vì họ có thói quen skip những lỗi mắc phải. Trong quá trình làm việc, đụng đến bug, không biết fix và chỉ ước rằng giá như được quay lại quá khứ để dũng cảm đối mặt với những sai lầm đó hơn.

Nếu không có lỗi, hãy cố gắng đào cho ra lỗi bởi một chương trình hoàn hảo là một chương trình mong manh và dễ bị tấn công nhất.

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

Chủ động hướng dẫn cho anh em cấp dưới

Người ta nói cách xào lại kiến thức hiệu quả nhất là hướng dẫn cho người khác cách làm việc sao cho hiệu quả hơn. Một dev xuất sắc phải chứng minh được năng lực thông qua cách anh ta làm việc nhóm và hỗ trợ những người khác. Với những kinh nghiệm chia sẻ, những junior dev sẽ “tò mò” tìm tòi được hướng đi riêng cho chính mình, đồng thời những đàn anh dev sẽ rèn luyện các kĩ năng mềm của bản thân. Chưa kể, những câu chuyện trong đoạn hội thoại của người mới biết đâu sẽ giúp các senior dev cập nhật những xu hướng mới mà họ bỏ lỡ khi đang dành thời gian cày cuốc bên bàn phím.

>>> Xem thêm: Sự khác biệt giữa senior developer và developer with seniority

“Tôi không biết và tôi muốn biết tại sao”

Freakonomics – một tiểu thuyết gia bán chạy nhất thời đại có một câu châm ngôn rất nổi tiếng: “Ba từ khó nói nhất đối với con người không phải là “tôi yêu bạn” mà là “tôi không biết””.

Thật khó để một ai đó tự thừa nhận rằng họ không biết, đặc biệt khi họ đã đạt đến level “dev siêu cấp”. Một nghiên cứu chỉ ra rằng chỉ có những dev với kiến thức nửa vời mới cố gắng “giấu dốt”. Một lập trình viên đẳng cấp sẽ chứng minh năng lực của anh ta thông qua những điều chưa biết, và hãy quay lại điều 3: đụng vấn đề, đặt câu hỏi tại sao và tìm hiểu để giải quyết nó.

Kết luận

Chúc anh em sớm nắm trọn bí kíp tu luyện để trở thành những ngôi sao sáng trong làng code nhé.

Xem thêm việc làm developer tại TopDev

Thu hút ứng viên IT bị động – Dễ hay Khó?

Theo thông tin được cập nhật về thị trường IT mới nhất của TopDev, hiện nay có đến 62% ứng viên IT bị động, gấp gần 5 lần số lượng ứng viên chủ động tìm việc chỉ với 14%. Xu hướng này đã gây ra nhiều trở ngại cho các nhà tuyển dụng, đòi hỏi họ phải ngày một chủ động hơn trong việc tìm kiếm nhân tài. Chủ động hơn đồng nghĩa với việc các nhà tuyển dụng phải nỗ lực hơn, đầu tư nhiều thời gian để tìm kiếm và thu hút kiểu ứng viên này.

Nào hãy cùng TopDev tìm hiểu kĩ về ứng viên IT bị động, các ưu khuyết điểm, cũng như các biện pháp thực tiễn và chi tiết để cải thiện các vấn đề phát sinh từ kiểu ứng viên khó nhằn này nhé!

1. Ứng viên IT bị động là gì?

Ứng viên IT bị động – nôm na là những ứng viên IT không chủ động tìm việc nhưng được các nhà tuyển dụng chủ động tìm kiếm để lấp đầy cho các vị trí trống. Nói cách khác, họ không hề chủ động nộp CV ứng tuyển, mà chính những người tuyển dụng mới là người tìm kiếm thông tin liên lạc và trực tiếp mời họ ứng tuyển.

ứng viên IT bị động

Như bạn có thể thấy hiện nay có hơn 2/3 ứng viên IT khảo sát là ứng viên bị động, trong khi ứng viên chủ động chỉ dừng lại ở con số hạn chế 14%. Nói tới đây, bạn có thể thắc mắc kiểu ứng viên này có gì đặc biệt khiến cho mọi đội ngũ tuyển dụng phải “cuống cuồng” lên tìm kiếm? Cùng TopDev tìm hiểu kĩ hơn về điểm mạnh yếu của ứng viên IT bị động nhé!

2. Ưu khuyết điểm của ứng viên IT bị động?

Ưu điểm

Nguồn ứng viên đếm không xuể

Hiển nhiên là số người không quan tâm vị trí công việc của bạn gấp nhiều lần người quan tâm, tỉ lệ này cũng na ná khi bạn đăng một ảnh lên Instagram, số người like chắc chắn sẽ thấp hơn nhiều số người theo dõi bạn! Hãy nhớ rằng bất kì ai trong độ tuổi lao động ngoài kia đều có thể là những nhân tài tiềm năng góp phần không hề nhỏ cho doanh nghiệp.

Quan trọng hơn là để việc vận hành doanh nghiệp lâu dài, tiếp cận những ứng viên IT bị động là không thể tránh được, như số liệu TopDev đề cập ở trên, chỉ với 14% ứng viên trong thị trường là chủ động tìm đến bạn, theo dõi website của bạn thường xuyên, thì liệu nguồn ứng viên này có đủ để lấp đầy vị trí trống mỗi lúc một nhiều trong thời kì mật độ nhảy việc cao như hiện nay?

Giảm bớt căng thẳng về mặt thời gian

Một trong những ưu điểm cực lớn mà các nhà tuyển dụng thường hay bỏ qua khi nhắc tới  tuyển ứng viên IT bị động là họ bớt thấy áp lực hơn trong tình huống phải ra quyết định tức thời.

TopDev sẽ giúp bạn rõ hơn với so sánh nhỏ sau. Với ứng viên chủ động tìm việc, có khả năng rất cao họ đang ứng tuyển cho nhiều công ty khác nhau. Nếu quá trình tuyển dụng của bạn không tinh gọn và mất nhiều thời gian, ứng viên đó đã có thể chấp nhận làm ở một công ty khác. Và cho dù bạn có tăng độ hấp dẫn cho offer ngay từ đầu, họ vẫn chờ xem những công ty khác sẽ offer cho họ những gì. Kết quả là bạn sẽ đứng ngay ranh giới giữa sắp để mất một nhân tài và tăng chi phí cho doanh nghiệp.

thu hút ứng viên IT bị động -căng thẳng về mặt thời gian

Ứng viên IT bị động – ngược lại, thường sẽ không ứng tuyển cho nhiều công ty đơn giản vì họ đâu có chủ động tìm việc! Nếu quá trình tuyển của bạn khá dài và rườm rà, bạn cũng không phải lo lắng ứng viên sẽ được mời gọi offer hấp dẫn hơn.

Thẳng thắn, khách quan và công bằng

Do ứng viên IT bị động không tìm kiếm việc làm, có khi là họ đã có chỗ làm ổn thỏa, nên bạn không phải sợ việc bị ứng viên nói dối, phóng đại khả năng bản thân, làm mọi cách để được chấp nhận vào công ty. Chỉ đơn giản là bạn tiếp cận họ, nêu rõ những gì bạn cần, bạn cho họ, họ cân nhắc và chấp nhận ứng tuyển mà thôi. Vừa tiết kiệm thời gian cho cả hai, mà quyền lợi của 2 bên cũng dễ dàng thống nhất và đảm bảo hơn.

Ứng viên tiềm năng trong tương lai

Điều hiển nhiên là không phải ứng viên nào bạn tiếp cận cũng chấp nhận làm cho bạn ngay lúc đó. Bạn có thể không nhận được phản hồi nào từ cái email đầu tiên, nhưng đừng bỏ cuộc. Bây giờ họ không chấp nhận không có nghĩa là vài tháng sau họ vẫn thế.

Thay vì bỏ cuộc hoặc theo đuổi họ đến cùng (càng khiến họ thấy hoảng sợ hơn với doanh nghiệp của bạn) thì TopDev khuyên là bạn nên giữ liên lạc với họ với mật độ ổn định, 1 lần/tháng chẳng hạn, vừa duy trì được mối liên hệ về lâu dài, vừa có thể thuyết phục họ ứng tuyển trong tương lai.

Khuyết điểm

TopDev cũng tin rằng bạn có thể lường trước rằng khuyết điểm cực kì lớn của ứng viên bị động là “Quá tốn công để thu hút”. Vừa tốn sức tìm kiếm, vừa tốn thời gian làm mọi cách để thu hút, khiến doanh nghiệp mình hấp dẫn hơn trong mắt họ. Có thể nói đây là một bài toán cực kì nan giải cho các doanh nghiệp hiện nay.

  4 bí kíp đẩy mạnh tuyển dụng IT trên Facebook ít người biết

  Cập nhật xu hướng Employer Branding Event cho nhà tuyển dụng IT

3. Làm sao để thu hút ứng viên bị động

Một cách cơ bản cũng như quan trọng nhất mà TopDev thường hay nhấn mạnh trong các bài blog của mình là bạn phải đẩy mạnh “Thương hiệu tuyển dụng”. TopDev sẽ gợi ý cho bạn 2 cách để thu hút ứng viên bị động bằng qua việc thúc đẩy Employer Branding nhé.

Cách 1: Thương hiệu tuyển dụng gián tiếp qua Digital Channels

-Bài đăng trên các trang Blog: Theo báo cáo thị trường IT mới nhất của TopDev, có đến 70% ứng viên cập nhật kiến thức qua Tech blog, điều đó chứng tỏ rằng bạn có thể gia tăng mức độ nhận diện cho doanh nghiệp mình bằng việc đăng tải các bài blog với kiến thức hữu dụng, thông tin cần thiết để ứng viên dễ dàng tiếp cận.

Bạn có thể tận dụng trang Blog của doanh nghiệp bạn với vài nội dung như:

-Kiến thức lập trình hữu dụng

-Case studies thực tế từ công ty

-Chia sẻ kỹ thuật chuyên sâu từ team dev cũng như về môi trường và văn hóa làm việc…

Bên dưới là một số dữ liệu mà TopDev đã tiếp cận các dev để để tìm hiểu sâu hơn về thị hiếu, xu hướng cập nhật thông tin IT và học ngôn ngữ lập trình mới. Bạn có thể tham khảo và cân nhắc áp dụng vào xây dựng thương hiệu tuyển dụng cho doanh nghiệp mình nhé:

Thu hút ứng viên IT bị động

Tuy nhiên, nếu việc đó mất nhiều thời gian hay chưa thành công như mong đợi thì đừng quên là TopDev có cung cấp các bài viết xây dựng thương hiệu qua Techtalk.vn và Blog Topdev.vn nhé. Techtalk là chuyên trang tin tức và thông tin công nghệ hàng đầu Việt Nam với 1.500.000 lượt truy cập mỗi tháng. Bên cạnh đăng bài qua Techtalk, TopDev còn chia sẻ lên các Fanpage công nghệ với cộng đồng IT dày đặc như như TopDev, Hội những Dev vui tính, Tech Talk, Lập Trình Viên Confession, Anh Lập Trình Viên…giúp việc xây dựng thương hiệu đơn giản hơn rất nhiều.

thu hút ứng viên IT bị động - banner

-Banner trên Techtalk: Hiển thị banner trên các website công nghệ lớn (như Techtalk.vn, TopDev.vn). Như đã đề cập ở trên, Techtalk có gần 1.500.000 truy cập/tháng và đến 99% đối tượng là lập trình viên, đây là những người thường xuyên truy cập Techtalk để cập nhật thông tin, dĩ nhiên là khi banner của bạn được đặt ở những web có lượng traffic cao như thế, bạn đang dần cải thiện mức độ nhận diện và khơi gợi sự tò mò từ những ứng viên tiềm năng về doanh nghiệp bạn đó.

-Email Marketing: Một cách vô cùng quen thuộc để tiếp cận ứng viên bị động là trực tiếp gửi email quảng bá về doanh nghiệp, những vị trí còn trống cũng như những điều thú vị về công ty. Tuy nhiên vấn đề là làm sao để có database ứng viên IT dồi dào và sáng tạo được nội dung cực kì thu hút? Cả 2 điều kiện cần trên là cực kì thiết yếu để một chiến dịch Email Marketing hiệu quả. Thiếu yếu tố đầu thì sẽ không ai có động lực mở email bạn cả, nếu không có yếu tố 2 thì bạn đã bỏ lỡ quá nhiều ứng viên bị động bên ngoài kia.

TopDev có thể giúp kế hoạch Email Marketing hiệu quả hơn với kho dữ liệu 300.000 ứng viên IT, tỉ lệ mở trung bình lên đến 20% và tỉ lệ chuyển đổi cực ấn tượng.

Cách 2: Thương hiệu tuyển dụng trực tiếp qua Event

-Tech Event/Workshop: Không gì bàn cãi khi các event chuyên ngành là nơi hội tụ những ứng viên tiềm năng đến tham gia và tìm hiểu thêm về IT, đây là cơ hội cực kì lớn để bạn đẩy mạnh thương hiệu tuyển dụng của mình. Có thể nói đây là cách tốt nhất để branding và tiếp cận trực tiếp với ứng viên ngay tại event.

Bạn có thể tổ chức event với nội dung như: chia sẻ những bài toán kĩ thuật khó nhằn và cách xử lý mà doanh nghiệp bạn đã áp dụng thành công; câu chuyện có thật từ những người đứng đầu công ty hay từ 1 anh dev tiêu biểu chẳng hạn,..bất kì nội dung hấp dẫn nào để thu hút các ứng viên IT tham gia. Tuy nhiên, việc xây dựng nội dung hấp dẫn không quyết định 100% sự thành công trong tuyển dụng của bạn, bạn và doanh nghiệp phải nỗ lực nhằm tạo cho ứng viên cảm giác gần gũi, thân thiện, nắm rõ hơn về công ty bạn cũng như những tiềm năng cơ hội phát triển mà bạn mang lại cho họ.

Nếu như việc tự tổ chức mất nhiều chi phí và thời gian, TopDev có thể là trợ thủ đắc lực cho doanh nghiệp của bạn từ khâu lên nội dung, truyền thông, logistics và vận hành sự kiện. Với năng lực tổ chức nhiều sự kiện lớn trong năm và tần suất hơn 15 sự kiện mỗi tháng, doanh nghiệp cũng có thể tận dụng xuất hiện thương hiệu tuyển dụng của mình tại các kỳ sự kiện này, với nội dung phong phú với các chủ đề từ Mobile, Database tới hot trend như Machine Learning, AI,..Tìm hiểu thêm tại đây nhé!

-Tham gia các sự kiện công nghệ lớn: Bên cạnh các Tech event/Workshop đề cập bên trên, TopDev sẽ gợi ý 1 vài event lớn thường niên để bạn cân nhắc tham gia nhé:

Thu hút ứng viên IT bị động - event

  • Forbes Vietnam’s Tech Summit: hội nghị về công nghệ với diễn giả là các nhà đầu tư mạo hiểm, doanh nhân công nghệ tầm cỡ thế giới cùng chia sẻ tầm nhìn, tư duy về xu hướng công nghệ, thúc đẩy doanh nghiệp khởi nghiệp và mở ra khả năng phát triển mới.
  • Techfest Vietnam:còn gọi “Ngày hội Khởi nghiệp đổi mới sáng tạo”được tổ chức vào ngày 4-6/12 năm nay. Mục tiêu là nhằm quy tụ hệ sinh thái khởi nghiệp sáng tạo, kết nối đầu tư trong nước và quốc tế cũng như đề xuất cơ chế chính sách phục vụ Khởi nghiệp.
  • DevDay Da Nang: sự kiện phi lợi nhuận với những buổi hội thảo đầy tính tương tác theo xu hướng CNTT mới nhất, gian hàng tuyển dụng thu hút các ứng viên tiềm năng và buổi tiệc đêm giao lưu gắn kết cộng đồng lập trình viên tại Đà Nẵng.
  • Vietnam Mobile Day: tập trung vào lĩnh vực ứng dụng di động, hơn 100 chủ đề chuyên sâu cùng đối tượng đa dạng như developer, marketer và designer. Ngoài ra đây cũng là nơi để triển lãm các sản phẩm, tiếp cận ứng viên tiềm năng phục vụ cho việc tuyển dụng hiệu quả.
  • Vietnam Web Summit: sự kiện IT lớn và qui mô nhất Việt Nam tập trung về Công nghệ với diễn giả gồm quản lí cấp cao và chuyên gia hàng đầu. Điều quan trọng hơn đây là cơ hội lớn không được bỏ lỡ khi bạn muốn thu hút ứng viên IT bị động bởi có gần 10.000 người tham gia và hơn 3 triệu online reach. Ngày hội được tổ chức vào ngày 6,13/12 lần lượt tại HCM và Hà Nội với dự kiến hơn 10.000 người tham gia.

Thu hút ứng viên IT bị động - VWS

Nếu còn gì chưa rõ, hãy vào đây và đội ngũ TopDev sẽ giúp bạn giải đáp mọi thắc mắc !

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

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

TopDev tổng hợp

  TOP 20 thách thức tuyển dụng nhân sự IT năm 2024 (Phần 1)

  TOP 20 thách thức tuyển dụng nhân sự IT năm 2024 (Phần 2)

SOLID – Đã đến lúc cần thay đổi bản thân

Người viết: Quách Đại Phúc

Có thể trong quá trình làm việc với người thông minh chú ý quan sát thì chỉ cần vài tháng, nhưng với những người kém thông minh hơn hay lười hơn thì phải mất cả năm để nhận ra code mình có vấn đề và Bốc mùi đến như thế nào, rõ ràng việc code sạch đẹp, dễ maintain nó cũng như cách sống vậy, có người gọn gàng ngăn nắp, người thì bừa bộn, luộm thuộm (Mình không nói những bạn code không sạch là bừa bộn nhé  cái này chỉ là ví dụ).

Mình tự nhận là người khá ngăn nắp nhưng code thì không sạch (chán). Và mình nghĩ cũng đã đến lúc chúng ta cần tự trau chuốt lại cả cách sống và cách code nếu chúng ta còn tiếp tục muốn sống sót được trong cái nghề mà mỗi ngày càng có nhiều người giỏi hơn, thông minh hơn chúng ta xuất hiện. Chúng ta không thể thông minh, nhanh nhẹn hơn họ được nhưng bù lại chúng ta có sự chỉn chu và những kinh nghiệm xương máu. Để tự thanh lọc mình trong việc code mình bắt đầu lang thang đi tìm những design patterns, Principles … thứ mà những anh hùng đi trước để lại cho hậu thế. Mình đã tìm hiểu DDD, DI …tuy nhiên thấy chúng khá khó hiểu và gây lú (vì mình già rồi chăng). Và nguyên lý SOLID xuất hiện trong quá trình tìm kiếm, đọc … ồ mình nên bắt đầu từ đây, nó khá dễ hiểu, có nhiều người đã áp dụng và chia sẻ trước đây rồi. Tại sao mình lại không chứ. Đầu tiên hãy cùng bắt đầu thanh lọc cơ thể bằng những khái niệm cơ bản nào.

1. Single responsibility principle

Nguyên lý đầu tiên có nghĩa là:

Một Class chỉ nên có một chức năng duy nhất, chỉ sửa đổi với một lý do duy nhất. Giúp dễ dàng quản lý code và bảo trì hơn.

Hãy cùng xem ví dụ sau:

class QuanLySinhVien {
    
    public function getListSV() {}

    public function getDSLopHoc() {}
    
    public function getDSMonHoc() {}

    public function saveSV() {}

    Public function editSV() {}

    public function deleteSV() {}
}

Trước giờ khi học ở trường chúng ta thường viết code theo kiểu 3 trong 1, tức là có gì cũng tống chung vào một class, đôi khi chúng ta lại nghĩ class này thật đa năng nhưng nó chỉ đa năng khi chúng ta đi học ở trường, làm mấy cái project nho nhỏ, và đương nhiên cũng chẳng thầy cô nào phàn nàn về vấn đề đó. Kể cả khi đi làm nhiều lúc chúng ta vẫn thường thấy có những function nghe tên thì đã thấy ngay nó thuộc class B nhưng vẫn có người cố nhét nó vào class A. Nguyên nhân là bởi trong class A đó đang có một số biến mà function này muốn sử dụng mà họ lười khai báo lại ở class B. Điều này là hoàn toàn sai lầm cho sự maintain sau này.

Vậy theo nguyên lý 1, chúng ta sẽ tách class trên ra thành những class con, mà mỗi class thể hiện một đối tượng cụ thể, giữ những chức năng của riêng nó.

class LopHoc {
    public function getDSLopHoc() {}
}

class MonHoc {
    public function getDSMonHoc() {}
}

class SinhVien {
    public function getListSV() {}

    public function saveSV() {}

    Public function editSV() {}

    public function deleteSV() {}
}

Khi đã có những class với những chức năng cụ thể của riêng nó, chúng ta sẽ gặp tình huống trong khi làm việc là spec thay đổi vậy nên chúng ta bắt buộc phải sửa lại code. Chúng ta cùng xem nguyên lý thứ 2.

2. Open/closed principle

Nội dung của nguyên lý này là :

Chúng ta có thể mở rộng một class, nhưng hạn chế thay đổi bên trong class đó.

Thoạt nghe thì thấy không đúng cho lắm, nhưng nghe lại thì thấy không đúng thật (haha) . Các bạn để ý mình đã tô đậm từ Hạn chế bởi lẽ với nguyên lý này chũng ta không nên áp dụng một cách máy móc là cứ có tính năng mới là tôi lại tạo ra một class con kế thừa class cha. Điều này làm cho code các bạn không dễ hiểu mà còn loằng ngoằng hơn. Mà theo mình class mới chỉ nên sinh ra khi nó là một thực thể riêng biệt, không có nó thì thực thể khác vẫn không ảnh hưởng gì, còn nếu sau khi phân tích chúng ta thấy rằng thiếu đi chức năng này sẽ làm ảnh hưởng đến tất cả thì đương nhiên là code cũ đang thiếu, ta nên bổ sung thêm vào cho class đó. Nếu là framework hay plugin thì chúng ta nên tạo commit để contribute cho framework/plugin đó. Giả sử như trong ví dụ về quản lý sinh viên trên, chúng ta muốn tạo chức năng thêm môn học thì thay vì máy móc ta viết class con kế thừa class MonHoc chỉ để thêm tính năng addMonHoc thì ta nên thêm luôn nó vào class MonHoc vì việc thêm môn học là tính năng mà bắt buộc môn học nào cũng cần có.

Hoặc cùng xem class SinhVien, nếu muốn thêm tính năng đăng ký nội trú thì chúng ta nên tách riêng class con kế thừa từ class SinhVien, bởi lẽ không phải tất cả sinh viên đều muốn đăng ký ở nội trú, ví dụ thích ra ở trọ chẳng hạn.

class NoiTru extends SinhVien {
    public function DangKyNoiTru(SinhVien $id) {}
}

3. Liskov Substitution Principle

Nguyên lý này có nội dung như sau:

Các đối tượng thuộc loại con có thể thay thế các đối tượng thuộc loại cha mà không làm thay đổi tính đúng đắn của chương trình.

Nguyên lý này rất trừu tượng và khó hiểu, nên các bạn hãy cố gắng tiêu hóa nhé. Đã có rất nhiều tranh cãi đúng sai về nguyên lý này. Chúng ta có thể hình dung ví dụ: Các đối tượng HinhVuong đều có thể xem là các đối tượng HinhChuNhat.

Bởi vì chúng ta đều biết hình vuông là hình chữ nhật có 2 cạnh kề bằng nhau, vì thế hình vuông sẽ kế thừa hết các thuộc tính của hình chữ nhật.

4. Interface Segregation Principle

Nội dung của nguyên lý này là :

Thay vì dùng 1 interface lớn, ta nên tách thành nhiều interface nhỏ, với nhiều mục đích cụ thể

Nguyên lý này khá đơn giản đó là chúng ta không nên có một interface quá lớn vài trăm method, mà chúng ta nên tách chúng ra thành từng loại nhỏ, mỗi loại thể hiện một mục đích cụ thể nào đó.

Ví dụ thay vì viết tất cả các thuộc tính của class DongVat như bên dưới

interface DongVat {
    public function chay();
    
    public function boi();
    
    public function bay();
}

Chúng ta có thể tách ra thành class cha và các interface như sau:

interface DongVatTrenCan {
    public function chay();
}

interface Chim {
    public function bay();
}

interface Ca {
    public function boi();
}

Mỗi loại tách riêng theo từng đặc tính, như vậy sẽ giúp chúng ta dễ dàng quản lý và maintain sau này cũng như dễ dàng đọc hiểu và sửa code.

5. Dependency inversion principle

Nội dung của nguyên lý này là:

  1. Các module cấp cao không nên phụ thuộc vào các module cấp thấp. Cả 2 nên phụ thuộc vào abstraction.
  2. Abstraction không nên phụ thuộc vào detail. Detail nên phụ thuộc vào abstraction. (Các class giao tiếp với nhau thông qua interface, không phải thông qua implementation.)

Trước tiên chúng ta nên hiểu Interface là một chuẩn kết nối giữ class cấp cao hơn và class cấp thấp, để thiết bị A có thể kết nối được với thiết bị B chúng cần giáo tiếp thông qua 1 chuẩn riêng, chỉ cần một thiết bị có chuẩn như vậy là có thể giao tiếp được với thiết bị A. Ví dụ thường thấy đó là chân sạc điện thoại, Iphone và SAMSUNG có một chân cắm riêng và chỉ cần cái sạc nào có rắc cắm phù hợp là có thể cắm vào sạc được.

class Backend {
    public function codeJava() {
        // code here
    }
}

class Frontend {

    public function codeJS() {
        // code
    }

}

class Project {

    public function build() {
        $backend = new Backend();
        $frontend = new Frontend();
        $backend->codeJava();
        $frontend->codeJS();
    }

}

Như chúng ta có thể thấy qua ví dụ trên class Project đang phụ thuộc vào 2 class Backend và Frontend, Nếu sau này công nghệ thay đổi back end không còn là java nữa, hay frontend không còn là js nữa thì chúng ta phải thay đổi cả code của class cấp thấp và cấp cao. Chúng ta sẽ tạo ra một interface Develop để cho các modules trên phụ thuộc vào:

interface Develop {
    public function develop();
}

class Backend implements Develop {
    public function develop()
    {
        $this->codeJava();
    }

    private function codeJava() {
        // code here
    }
}

class Frontend implements Develop {

    public function develop()
    {
        $this->codeJS();
    }

    private function codeJS() {
        // code
    }

}

class Project {

    protected $develop;

    public function __construct(Develop $develop)
    {
        $this->develop = $develop;
    }

    public function build() {
        $this->develop->develop();
    }

}

6. Kết luận

Vậy là mình đã giới thiệu cho các bạn về nguyên lý SOLID, việc vận dùng như thế nào trong quá trình code còn là cả quá trình dài, vì không dễ dàng gì để thay đổi một thói quen đã ăn sâu vào tính cách trong một khoảng thời gian dài. Hy vọng bài viết này sẽ phần nào giúp các bạn có cái nhìn sâu sắc hơn và tự nhìn lại code của chính mình xem đã đủ sạch sẽ chưa. Ngoài có còn có bao nhiêu nguyên lý khác sinh ra với mục đích làm cho code sạch đẹp hơn, các bạn cũng có thể áp dụng để tự nâng cao chất lượng sản phẩm của chính mình tạo ra. Một lần nữa cảm ơn các bạn đã đón đọc, trong quá trình viết bài mình có tham khảo nhiều nguồn, dùng nhiều ví dụ trên mạng, có thể đúng hoặc sai hy vọng các bạn thông cảm (bow).

Đừng bỏ lỡ một số bài viết hay về:

Xem thêm việc làm Software Developers hot nhất trên TopDev

TopDev via Viblo

  Cách tạo một Docker đơn giản cho Node.JS

Mẫu bảng mô tả công việc vị trí Technical Leader

Mô tả công việc lập trình Technical Leader mức lương hấp dẫn

Technical leader đảm nhiệm công việc giám sát một nhóm tập trung vào các vấn đề kỹ thuật, bao gồm phát triển phần mềm, phát hành sản phẩm và các nhiệm vụ kỹ thuật khác. Đôi lúc, technical leader cũng hợp tác với các nhân viên để xác định và sửa chữa các vấn đề kỹ thuật. Họ thường đánh giá các quy trình làm việc của nhóm và thực tiễn tốt nhất và thực hiện các thay đổi để hợp lý hóa các hoạt động. Hy vọng, Mẫu bảng mô tả công việc Technical Leader 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.

Mẫu bảng công việc Technical Leader

YÊU CẦU CÔNG VIỆC

  • Đảm bảo các ứng dụng hiện tại được cập nhật và phù hợp với việc triển khai các ứng dụng mới;
  • Phân tích nhu cầu của end-users và chọn ứng dụng để đáp ứng các nhu cầu đó;
  • Các nhiệm vụ khác có thể bao gồm phát triển các chương trình khắc phục sự cố và giám sát sửa đổi hệ thống;
  • Tạo và thực hiện các quy trình giảm thiểu rủi ro và tiến hành kiểm toán bảo mật để xác định điểm yếu trong các ứng dụng

MÔ TẢ CÔNG VIỆC

  • Có kinh nghiệm trong việc quản lý một nhóm phát triển
  • Có nhiều kinh nghiệm thiết kế cơ sở dữ liệu, thiết kế cơ bản, thiết kế chi tiết, UML
  • Có nhiều kinh nghiệm về ngôn ngữ lập trình: PHP, C#, Ruby on Rails, Java …
  • Có nhiều kinh nghiệm về design patterns and code refactoring…
  • Khả năng nhận yêu cầu trực tiếp từ người quản lý sản phẩm, sau đó phân tích và thảo luận giữa các bên liên quan để làm rõ
  • Có thể đề xuất ý tưởng tốt / giải pháp sáng tạo cải thiện sản phẩm của công ty ngay cả khi không có vấn đề gì cả;
  • Giải quyết vấn đề: đưa ra ý tưởng, thiết kế, coding, code reviewing. “
  Team Leader là gì? Những kỹ năng nào mà một Team Leader cần có?
  "Bắt đầu từ vị trí dev, làm tốt sẽ được trao cơ hội trở thành leader"

Tham khảo thêm những việc làm Technical leader lương cao trên TopDev 

Mẫu bảng mô tả công việc lập trình .NET

Mẫu bảng công việc lập trình .NET

Lập trình .NET làm việc trong nhóm phần mềm, sử dụng các ngôn ngữ lập trình C# để phát triển các ứng dụng, website dựa trên nền tảng .NET. Đồng thời, .NET Developer cũng tham gia vào toàn bộ quá trình phát triển sản phẩm, từ lên concept, phân tích, thiết kế, đến kiểm tra, vận hành vào thực tế dựa trên kế hoạch đã đề ra…Mẫu bảng công việc lập trình .NET 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.

Về lập trình viên .NET: Để trở thành một .NET Developer thực thụ, bạn cần vững nền tảng C# và .NET căn bản cũng như có kiến thức và kỹ năng về SQL server, HTML, CSS và Javascript. Bạn có thể học thêm về .NET Core và ASP.NET Core vì đây chính là tương lai của .NET. Khi đã vững vàng, bạn có thể bắt đầu chọn cho bản thân con đường đi theo ASP.NET hoặc Winform.

Mẫu bảng công việc lập trình .NET

YÊU CẦU CÔNG VIỆC

  • Thành thạo lập trình .NET Webform, Winform hoặc C#, ASP.NET MVC/ MVC5.
  • Nắm vững lập trình OOP, MVC.
  • Có kiến thức tốt về HTML, CSS, Javascript/ JQuery/ Bootstrap.
  • Có kinh nghiệm sử dụng database (SQL, NoSQL).
  • Có kiến thức tốt về RESTful service/ Web API.
  • Kỹ năng tư duy logic và thuật toán tốt, phân tích và giải quyết vấn đề
  • Có khả năng đọc hiểu tiếng Anh chuyên ngành

Ứng tuyển ngay các vị trí tuyển dụng .NET mới nhất trên TopDev

MÔ TẢ CÔNG VIỆC

  • Lập trình các ứng dụng trên nền tảng .Net 
  • Tối ưu hiệu xuất xử lý của các sản phẩm, dịch vụ hiện có
  • Tham gia xuyên suốt các công đoạn thiết kế, xây dựng, phát triển và tối ưu cho các chức năng hệ thống.
  • Nghiên cứu, phát triển công nghệ mới để ứng dụng xây dựng các sản phẩm dịch vụ mới
  • Hỗ trợ các thành viên trong nhóm với các chức năng phức tạp, tham gia nhận xét, đánh giá source code của các thành viên trong nhóm.

Tham khảo thêm những công việc lập trình cho fresher .NET tại đây

Làm sao để không bị “ngộp” khi học cái mới?

lam-sao-de-khong-bi-ngop-khi-hoc-cai-moi

Trong ngành IT chúng mình, học cũng là một phần của công việc

  • Để làm mới những skill của bản thân, để theo kịp thời đại, không bị thụt lùi so với thế giới, chúng ta phải tự học.
  • Đôi khi vì yêu cầu của dự án, vì nhu cầu tìm việc chúng ta phải học và tìm hiểu những ngôn ngữ/công nghệ mới.

Thế nhưng, khi bắt đầu học một thứ gì đó, bạn sẽ dễ dàng thấy ngộp, thấy bối rối, vì có quá nhiều kiến thức cần phải học.

Vậy làm sao để học dễ vào hơn, làm sao để không còn “ngộp” khi học kiến thức mới?

Hãy xem những kinh nghiệm mình chia sẻ qua bài viết này nha. Bài này sẽ rất có ích cho các bạn sinh viên, cho những bạn vừa ra trường hoặc đang đi làm đấy.

Tại sao việc học cái mới lại khó và gây “ngộp” như vậy?

Để tìm cách giải quyết chuyện, trước tiên chúng ta phải tìm hiểu vì sao học cái mới lại khó, tại sao ta lại dễ thấy ngộp và choáng?

Lý do đơn giản là vì: Trong ngành mình, khi học và sử dụng ngôn ngữ/công nghệ, ta không chỉ học nó, mà còn phải tìm hiểu về toàn bộ hệ sinh thái (ecosystem) của nó, những công nghệ liên quan tới nó.

Những kiến thức này vô cùng rộng và … không có giới hạn.

Mỗi ngôn ngữ/công nghệ luôn đi kèm với một hệ sinh thái “to bự” và phức tạp

Khi thử tìm hiểu React, các bạn sẽ thấy có… vô vàn những thứ liên quan đến nó mà các bạn phải học:

  1. React là gì? Các khái niệm trong React như ComponentPropsState
  2. Các tổ chức code React, phân tách component cho hiệu quả
  3. Cú pháp ES6 của Javascrip
  4. Cách setup Babel để transpile code React thành code JS chạy trên trình duyệt
  5. Cách setup Webpack để bundle source code, build source code thành JavaScript
  6. CSS in JS, cách dùng JS để setup style CSS cho các component
  7. Redux hoặc Mobx dùng kèm với React, state management để quản lý state cho ứng dụng

React – Redux – Webpack – Babel và đủ thứ hầm bà lằng khác

Các bạn thấy đấy, học React chỉ cần học 1 và 2. Nhưng để sử dụng React cho hiệu quả, ta phải học và biết cách dùng 3 đến 7. Khi tìm hiểu 6, 7 các bạn sẽ thấy lòi ra những cái 8,9 khác nữa.

Càng học, bạn càng cảm thấy có quá nhiều thứ mình không biết, có quá nhiều thứ cần phải học. Bạn sẽ ngộp, sẽ thấy nản vì … chả biết học bao giờ mới xong, dẫn đến chuyện bỏ cuộc.

Vậy làm sao để giải quyết chuyện này? Hãy đọc phần dưới nhé!

Phương pháp chống “ngộp” hiệu quả

Ngày xưa, mình cũng từng thấy “ngộp” khi học cái mới như bạn vậy, về sau mới quen dần. Đây là một số kinh nghiệm mà mình rút ra được:

1. Đặt ra mục tiêu rõ ràng

Đây là thứ quan trọng nhất. Trước khi học, hãy đặt ra mục tiêu là, mình học xong sẽ làm được gì, chứ đừng học chỉ để học.

  • Học React/VueJS, hãy đặt ra mục tiêu là hiểu architecture của chúng, làm được một web app đơn giản bằng React/VueJS.
  • Học Android/React-Native hãy đặt mục tiêu là biết cách tạo các screen, viết được một app note/to-do list.

Những khi học thấy mệt hay nản, hãy nhìn vào mục tiêu, bạn sẽ biết mình đã đi được bao xa, sắp đạt được hay chưa ngay.

2. Tìm hiểu bức tranh toàn cảnh (overview), chọn học thứ quan trọng nhất

Quay lại chuyện React, sau khi đã có bức tranh toàn cảnh, các bạn sẽ thấy mối tương quan giữa các công nghệ.

Bạn sẽ nhận ra rằng 1 và 2 là thứ quan trọng nhất cần học, những thứ khác chỉ cần biết sơ, về sau tìm hiểu dần là được.

Thấy được toàn cảnh, bạn sẽ biết thứ gì nên tập trung học, thứ gì chỉ cần tìm hiểu qua. Khi học mà gặp những thứ mới, bạn sẽ biết nó có quan trọng hay không, có cần học ngay hay có thể để sau.

3. Học tập trung, học dần dần chứ đừng dàn trải

Để chống ngộp, bạn hãy học tập trung chứ đừng học dàn trải. Tập trung vào những thứ quan trọng, sau đó mới đến những thứ “râu ria”.

  1. Ví dụ như lúc học React, hãy dùng create-react-app để có thể bắt tay ngay vào việc viết code React.
  2. Sau khi đã nắm vững các khái niệm React cơ bản và nâng cao, bạn mới bắt đầu tìm hiểu cách hoạt động của Babel, của Webpack, cách setup một dự án React từ đầu.
  3. Khi dự án đã lớn, code React bắt đầu rối rắm, lúc này bạn có thể tìm hiểu về Redux/MobX để xem quản lý state ra sao, component giao tiếp thế nào cho hiệu quả.

Học tập trung, tìm hiểu dần dần chứ đừng dàn trải

Vì mỗi lần ta chỉ tập trung vào học và thành thục một thứ duy nhất, bạn sẽ không cảm thấy ngộp hay nản nữa.

Kết

Việc học luôn luôn là một hành trình dài. Hành trình ngàn dặm chỉ bắt đầu từ một bước chân. Hãy biết nhìn xa, nhưng hãy đi từng bước nhỏ.

Với việc học, ta cũng phải học dần dần, biết dần dần. Bạn không thể nào học một phát là biết hết, mà cũng không cần phải biết hết tất cả. Chỉ cần biết đủ là bạn đã có thể áp dụng thứ vừa học vào công việc được.

Việc học có thể làm việc cảm thấy ngộp và nản, but that’s okay.

Đừng so sánh việc học của mình với người khác. Nếu người có nhiều kinh nghiệm, có kiến thức liên quan, họ sẽ học nhanh hơn. Nếu bạn không đủ kiến thức nền, bạn sẽ học chậm hơn.

Tuy nhiên, việc học không phải là cuộc đua đi nhanh hay đi chạm thì cuối cùng cũng đến đích cả! Quan trọng là bạn có chịu khó đi tới cuối cùng hay không mà thôi!

Bản thân bạn thì sao, đã bao giờ bạn cảm thấy ngộp, cảm thấy nản khi học chưa? Hãy chia sẻ về cảm xúc của mình, những cách bạn vượt qua trong phần comment nhé!

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

Xem thêm việc làm ngành it mới nhất trên TopDev

Cách sử dụng các plugins jQuery trong VueJS

Cách sử dụng các plugins jQuery trong VueJS

Người viết: Max

Hế lô! Sau 1 thời gian tu luyện trên núi mình đã quyết định xuống núi để quay lại chiến đấu cùng các anh em. Hôm nay mình xin giới thiệu đến các bạn 1 thứ hoàn toàn mới và khá hay ho mang tên “Viu gi ét” :))

Nếu bạn là một dev front-end chân chính thì chắc hẳn ít nhất một lần đã nghe và có thể là đang làm với framework này rồi nhỉ.

Mình cũng vậy, sau khi bị nó thả thính và bắt đầu mê nó nên mình đã quyết định áp dụng dùng thử nó với 1 plugin của WordPress.

Trước đây mình cũng đã từng dev AngularJS, rồi Angular 2+ và cũng suýt tẩu hỏa nhập ma với nó. Vì vậy mình đã xách mông lên tìm một môn võ mới mang tên VueJS. Sau 1 thời gian dev với VueJS thì mình đã phải thốt lên “Sao mày không đến với cuộc đời tao sớm hơn :))” bởi vì nó quá tuyệt vời và phù hợp với những nhu cầu của mình.

Và để bắt đầu với seri lầy lội cùng VueJS mình xin giới thiệu 1 trick khá hay mà VueJS có thể làm được đó là:

Cách sử dụng các plugins của Jquery trong ứng dụng VueJS một cách mượt mà.

Source code:

Các bạn có thể xem qua source code và demo tại đây.

Vấn đề

Hẳn là khi các bạn làm với các project áp dụng mấy framework kiểu như VueJS này thì một số thư viện cũng chưa hỗ trợ mà vẫn phải dùng thêm các plugins của jQuery đúng không nào?

Bình thường thì nếu bạn làm với ứng dụng Web kiểu Server-Side Rendering thì phần html đã được render ra khi người dùng load trang và chỉ cần áp dụng vài dòng code Javascript với Jquery là chạy ngay. Nhưng với các framework như VueJS thì cấu trúc DOM không được load ngay từ đầu nên ta không thể chạy các plugin của jQuery theo cách thông thường.

Ở đây mình xin demo 1 trường hợp sử dụng plugin select2 của Jquery để chạy trong ứng dụng VueJS.

Giải pháp

Ta sẽ tạo ra 1 component và wrap nó lại.

<script type="text/x-template" id="template-select2">
    <select class="vue-select2">
        <option v-for="option in options"
        :value="option.key"
        :selected="option.key=== selected">{{option.value}}</option>
    </select>
</script>
<script>
Vue.component('vue-select2', {
        template: '#template-select2',
        props: ['options', 'selected']
});
</script>

Component này sẽ có 2 props là options là list options để select và selected nếu muốn set 1 option nào đã được select.

Để làm được ta cần phải tìm hiểu 1 chút về life cycle của VueJS nhé.

Như các bạn thấy trong ảnh thì đến đoạn mounted là thời điểm mà Vue render html và replace vào cấu trúc DOM và đây chính là cơ hội để mình có thể chạy plugin select2. Và thời điểm thứ 2 ta cần quan tâm là lúc component chuẩn bị xóa đi khỏi DOM đó là beforeDestroy – đây là thời điểm tốt để các bạn xóa tất cả các sự kiện trên component đó đồng thời hủy select2 chạy trên component đó.

Vue.component('vue-select2', {
        template: '#template-select2',
        props: ['options', 'selected'],
        model: {
            prop: 'selected',
            event: 'change'
        },
        mounted: function() {           
            $(this.$el).select2();
        },
        beforeDestroy: function() {
            $(this.$el).off().select2('destroy');
        }
    });

Xong rồi đó, component đã có thể chạy được ngay. Nhưng vẫn còn một vấn đề nữa đó là bạn cần phải cập nhật sự thay đổi lên parent component chứ nhỉ. Để làm được điều đó ta bắt sự kiện change của select đó rồi dùng $emit để đẩy sự kiện cho thằng cha.

mounted: function() {
       	var vm = this;
          
		$(this.$el).select2();
           $(this.$el).on('change', function(e) {
           	vm.$emit('change', vm.$el.value);
           });
       },

Sau đó ở thằng cha bắt sự kiện @change để cập nhật trạng thái option đã được select (trong demo mình dùng tính kiểu two-way binding để chuyền ngược lại cho thằng cha luôn).

Xong rồi đó, ở demo trên kia thì mình có thêm 1 số tính năng nữa để demo khi thằng cha thêm option hoặc thay đổi option đang được select thì thằng con cũng cập nhật được trạng thái của nó.

Kết luận

Mình xin tổng kết lại nhé. Ở đây chỉ có 2 bước quan trọng là:

  1. Chọn thời điểm component được thêm vào DOM để chạy plugin của Jquery và thời điểm để hủy các sự kiện khi component đó bị hủy đi.
  2. Tìm sự kiện thay đổi trạng thái của component con để cập nhật lên compnent cha để biết sự thay đổi.

Quá đơn giản phải không nào. Mình cũng bắt đầu thích VueJS vì sự tương thích của nó với các plugin của jQuery vì jQuery nó đã quá to rồi và hệ sinh thái của nó quá lớn nên thời gian này mình vẫn còn phụ thuộc vào nó rất nhiều trong khi các thư viện hỗ trợ cho VueJS còn chưa nhiều.

TopDev via BlogK

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

Xem thêm tuyển dụng lập trình VueJS trên TopDev

Khi nào nên dùng Golang? Nó dùng tốt trong trường hợp nào?

khi-nao-nen-dung-golang

Bạn có biết khi nào nên dùng Golang? Dùng Golang đúng cách như thế nào? Sau 8 năm hoạt động, ngôn ngữ Go của Google ra mắt phiên bản 1.8.1 vào tháng 4 năm 2017 được lựa chọn bởi các chuyên gia lập trình để trở thành ngôn ngữ lập trình dành cho những dự án cloud-centric quan trọng nhất thế giới.

Tại sao Go được chọn bởi các nhà phát triển của những dự án như Docker và Kubernetes? Đặc điểm của Go là gì? nó khác gì với các ngôn ngữ lập trình khác và phù hợp cho loại dự án nào nhất? Trong bài này, chúng ta sẽ khám phá những tính neăng của Go, trường hợp tối ưu, điểm thiếu sót và hạn chế của Golang.

Go nhỏ gọn và đơn giản

Go hay Golang là sản phẩm được phát triển bởi các nhân viên của Google, đặc biệt là kỹ sư nổi tiếng của Google, một chuyên gia về Unix, ông Rob Pike, tuy nhưng đó không phải là một dự án của Google. Thay vào đó, Go được phát triển như một dự án open source.

Go đơn giản để học, dễ làm việc và dễ dàng đọc bởi các nhà phát triển khác. Và Go không hề có một bộ tính năng lớn, đặc biệt là khi so sánh với các ngôn ngữ như C ++. Ngoài ra Go còn gợi nhớ đến C bởi cú pháp của nó, điều đó giúp các lập trình viên C lâu năm tương đối dễ dàng học nó. Điều đó nói rằng, nhiều tính năng của Go, đặc biệt là tính năng concurrency.

khi nào nên dùng golang

Tương tự như ngôn ngữ C được dùng để xây dựng và duy trì các ứng dụng cross-platform, thì Go cũng có nhiều điểm chung với Java. Và khi nào nên dùng golang? Nó như một phương tiện cho phép lập trình một cách nhanh chóng mà có thể chạy ở bất cứ nơi nào, thì bạn có thể tưởng tượng Go và Python giống nhau ở điểm này, mặc dù giữa chúng có nhiều điểm khác biệt hơn là tương đồng.

  #2 Lập trình Golang ăn xổi: Clean architecture

Dành cho tất cả mọi người

Tài liệu về Go, mô tả Go là “một ngôn ngữ biên dịch nhanh, static type, compiled language (ngôn ngữ biên dịch), nhưng lại giống như một dynamic, interpreted language (ngôn ngữ thông dịch)”. Ngay cả khi một chương trình Go lớn, cũng sẽ được biên dịch chỉ trong vòng vài giây. Thêm vào đó, Go còn tránh được những điểm hạn chế của C liên quan đến các file và thư viện. Nói tóm lại, Go giúp cuộc sống của lập trình viên trở nên dễ dàng bằng nhiều cách:

Tiện lợi:

Go được so sánh với các scripting language (ngôn ngữ kịch bản) như Python với khả năng đáp ứng nhiều nhu cầu lập trình phổ biến. Một số tính năng này được tích hợp vào trong chính ngôn ngữ, chẳng hạn như “goroutines” là một hàm cho concurrency và kiểu giống như behavior, ngoài ra các tính năng bổ sung được có sẵn trong các package thư viện Go chuẩn, như http package của Go. Giống như Python, Go cung cấp khả năng quản lý bộ nhớ tự động bao gồm việc garbage collection (dọn file rác).

Không giống các ngôn ngữ kịch bản như Python, Go biên dịch (compile) code ra nhị phân một cách nhanh chóng. Và không giống như C hoặc C ++, Go biên dịch cực nhanh, nhanh đến mức khiến bạn cảm thấy khi làm việc với Go giống như là làm việc với một ngôn ngữ kịch bản hơn là một ngôn ngữ biên dịch.

Hơn nữa, hệ thống Go build đơn giản hơn so với các ngôn ngữ biên soạn khác. Phải trải qua một vài bước và lập kế hoạch để xây dựng và vận hành một dự án Go.

Tốc độ:

Run nhị phân chậm hơn so với C, nhưng sự khác biệt về tốc độ này không đáng kể đối với hầu hết các ứng dụng. Hiệu suất của Go tốt ngang với C trong phần lớn công việc và nói chung là nhanh hơn so với các ngôn ngữ khác nổi tiếng về tốc độ (ví dụ: JavaScript, Python và Ruby).

khi nào nên dùng golang

Linh hoạt:

Các file executable được tạo bằng toolchain của Go có thể hoạt động độc lập mà không cần external dependencies mặc định. Toolchain hỗ trợ cho nhiều hệ điều hành, hardware platform (chuẩn phần cứng của máy tính) khác nhau và có thể được sử dụng để biên dịch các chương trình nhị phân qua các nền tảng.

Khả năng tương thích:

Go cung cấp tất cả những điều trên mà không bị mất quyền truy cập vào hệ thống bên dưới (underlying system). Phương mềm Go có thể liên kết với thư viện C bên ngoài hoặc thực hiện các lệnh call hệ thống native. Ví dụ trong Docker, Go interface với các chức năng Linux low-level, cgroups và namespace (tạm dịch: không gian tên), để hoạt động với container.

Hỗ trợ:

Toolchain Go có sẵn dưới dạng binary của Linux, MacOS hoặc Windows hoặc như là một container trong Docker. Go được đặt mặc định trong nhiều bản phát hành phổ biến của Linux, như Red Hat Enterprise Linux và Fedora, giúp cho việc triển khai Go source trở nên dễ dàng hơn đối với các nền tảng trên. Go cũng hỗ trợ mạnh mẽ cho nhiều development environment (môi trường phát triển) của bên thứ ba, từ Microsoft Visual Studio Code đến Komodo IDE của ActiveState.

Khi nào nên dùng Golang?

khi nào nên dùng golang? Và dùng trong trường hợp nào? Không có ngôn ngữ nào phù hợp với mọi loại công việc, nhưng có một số ngôn ngữ phù hợp với nhiều mục đích hơn những ngôn ngữ khác. Mạnh mẽ khi phát triển một số loại ứng dụng chính:

Phân phối các network service (dịch vụ mạng).

Các chương trình ứng dụng mạng (network application) sống hay chết là dựa vào concurrency và các tính năng native concurrency của Go, các goroutines và các channel, rất phù hợp cho các tác vụ đó. Do đó, có nhiều dự án Go dành cho mạng, các chức năng distributed (phân phối) và dịch vụ đám mây: API, web server, minimal frameworks cho các web application và các loại tương tự.

Sự phát triển của cloud-native.

Các tính năng concurrency và network của Go và tính linh hoạt cao của nó làm cho nó phù hợp với việc xây dựng các ứng dụng cloud-native. Trên thực tế, Go đã được sử dụng để xây dựng một trong những nền tảng phát triển ứng dụng dựa trên cloud-native, ứng dụng hệ thống containerization Docker.

Thay thế cho cơ sở hạ tầng hiện có.

Phần lớn các phần mềm của chúng tôi phụ thuộc vào cơ sở hạ tầng Internet đã lạc hậu. Việc viết lại những thứ như vậy bằng Go mang lại nhiều lợi ích, như giữ an toàn bộ nhớ tốt hơn, triển khai trên nhiều nền tảng dễ dàng hơn và một code base “sạch” để hỗ trợ bảo trì trong tương lai. Một server SSH mới được gọi là Teleport và một phiên bản mới của Network Time Protocol được viết bằng Go, được cung cấp như phương pháp thay thế cho các đối tác thông thường của họ.

khi nào nên dùng golang

Go không phù hợp với việc gì?

Go được thiết kế nhỏ gọn và dễ hiểu, vì vậy dẫn đến một số tính năng nhất định bị bỏ qua. Thế nên một số tính năng phổ biến có trong các ngôn ngữ khác thì lại không có trong Go.

Một trong những tính năng Go không có là generics, là kiểu biểu diễn của Types dưới dạng tham số khi định nghĩa lớp, hàm và interfaces. Go không bao gồm generics và steward của ngôn ngữ này ngăn cản việc thêm generics vào vì cho rằng điều đó sẽ làm giảm tính đơn giản. Tuy vẫn có thể làm việc tốt với Go, nhưng rất nhiều lập trình viên vẫn muốn thêm generics vào nó.

Nhược điểm khác của Go là kích thước của các chương trình. Code được biên dịch kiểu static (tĩnh) theo mặc định. Cách này làm đơn giản hóa quá trình xây dựng và triển khai, nhưng dẫn đến việc chỉ một đoạn code đơn giản “Hello, world!” lại nặng đến khoảng 1,5MB trên Windows 64-bit. Nhóm nghiên cứu của Go đang cố gắng để giảm kích thước của những chương trình này trong những bản phát hành kế tiếp. Có những giải pháp cho việc này là nén file hoặc xoá bỏ thông tin về debug của Go.

Tuy nhiên, một tính năng khác của Go, quản lý bộ nhớ tự động (AMM), có thể được xem như là một nhược điểm, vì garbage collection (quá trình thu gom file rác) đòi hỏi một số memory nhất định để xử lý. Theo thiết kế, Go không thể quản lý bộ nhớ bằng tay và việc dọn dẹp file rác ở Go bị chỉ trích là không thể giải quyết tốt các loại memory load (bộ nhớ tải) xuất hiện trong các ứng dụng của doanh nghiệp.

Xét về mặt tích cực, Go 1.8 mang lại nhiều cải tiến trong quản lý bộ nhớ và dọn dẹp file rác để giảm độ trệ (lag). Tất nhiên, các nhà phát triển Go có thể sử dụng phân bố (allocation) bộ nhớ bằng tay trong một extension của C hoặc bằng cách sử dụng thư viện quản lý bộ nhớ thủ công của bên thứ ba.

Tình hình xung quanh việc xây dựng một GUI (giao diện đồ họa người dùng) phong phú cho các ứng dụng của Go, chẳng hạn như trong các ứng dụng dành cho desktop, vẫn còn rải rác.

Hầu hết các sản phẩm từ Go là các command-line tool hoặc các dịch vụ network. Mặc dù vậy, vẫn có rất nhiều dự án đang được thực hiện để mang lại một GUI phong phú cho các ứng dụng của Go. Có các framework như GTKGTK3. Một dự án khác nhằm cung cấp platform-native UI, mặc dù các giao diện này dựa vào các binding của C và không được viết bằng Go. Ngoài ra, bởi vì Go được thiết kế là nền tảng độc lập, nên không có bất kỳ cái gì được nêu ở trên có thể trở thành một phần của package chuẩn.

Mặc dù Go có thể tương tác với các chức năng của native system nhưng nó không được thiết kế để tạo ra các component của low-level system, chẳng hạn như kernel (hạt nhân) hoặc device driver hoặc các embedded system (hệ thống nhúng).

Sau cùng, tốc độ run ứng dụng và trình dọn dẹp file rác cho các ứng dụng Go phụ thuộc vào hệ điều hành nằm bên dưới. (Các lập trình viên quan tâm đến một ngôn ngữ dành cho loại công việc này có thể tìm hiểu Rust của Mozilla.)

  Golang là gì? Top 07 Framework tối ưu “cực căng” cho Golang

Đâu là con đường của Go?

Go có thể đang ở một “ngã ba đường”. Giai đoạn phát triển tiếp theo của Go có thể được thúc đẩy bởi nhu cầu phát triển cơ bản của nó, Go cần chú ý về việc thay đổi ngôn ngữ để có thể đáp ứng tốt hơn, chứ phải cứ cứng đầu mà không thay đổi. Nói cách khác, Go hoàn toàn có thể thêm các tính năng mà ban đầu nó không có, giống như generics.

Các lập trình viên sử dụng Golang rõ ràng muốn những điều này. Một cuộc khảo sát ý kiến người dùng Golang vào năm 2016 đã xác định được khi nào nên dùng golang, và generic là một trong những thay đổi mang tính cải thiện nhất, tiếp theo là dependency và package management. Những thay đổi này có thể giúp Go đạt một vị trí cao trong giới lập trình nơi mà Java, JavaScript và Python hiện đang thống trị .

Ngay cả khi không có bất kỳ sự thay đổi lớn nào đối với Go, thì tôi luôn mong được thấy Go sử dụng cho việc xây dựng lại cơ sở hạ tầng và trở thành một phần của dự án sử dụng multi-language (đa ngôn ngữ). Một dự án có sử dụng Go trong một phần của việc lập trình hệ thống đó là Ethos, một hệ điều hành như một phần mềm bảo mật chất lượng cao. Kernel được viết bằng C, nhưng userspace của ứng dụng được viết bằng Go, đây là một cách thông minh để tận dụng những gì phù hợp với C, trong khi vẫn có thể tận dụng các thế mạnh của Go.

Việc triển khai của bên thứ ba đối với công cụ Go cũng đang lan rộng. ActiveGo của ActiveState cung cấp một phiên bản được hỗ trợ về mặt thương mại của Golang và cả LLVM cùng các dự án gccgo được triển khai open source của Go bằng toolchain.

Một cách khác mà Go có thể phát triển là tồn tại như một nền tảng để phát triển các ngôn ngữ hoàn toàn mới khác. Một ví dụ là ngôn ngữ Have. Sử dụng nhiều ý tưởng từ Go và transpile vào Go để dễ thực hiện, nhưng tinh gọn cú pháp của Go và hiện thực hoá một số các concept tương tự những theo cách riêng. Một dự án khác có tên Oden, tiếc là không còn được phát triển, sử dụng assembler và toolchain của Go để biên dịch một ngôn ngữ mới được thiết kế dựa trên cảm hứng từ các ngôn ngữ khác như Lisp và Haskell.

Tương lai của Golang chỉ mới bắt đầu giờ bạn đã biết khi nào nên dùng golang. Nhưng chắc chắn nó sẽ được sử dụng trong cloud, nơi mà tốc độ và sự đơn giản của nó giúp dễ dàng xây dựng một cơ sở hạ tầng có thể mở rộng, có thể được duy trì trong thời gian dài.

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

Xem thêm việc làm Golang hot nhất trên TopDev

TopDev via Infoworld

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

Mô tả công việc Devops

Mô tả công việc Devops – DevOps Engineers là sự kết hợp giữa Developers (Dev) và System Admins (“Op”-erations) với mục đích giảm chi phía và vòng lập của dự án, là cầu nối giữa Developers và nhóm IT khác.

DevOps Engineers hiểu cặn kẽ vê vòng đời phát triển phần mềm và các công cụ tự động hóa được sử dụng để tạo CI / CD Pipeline (tích hợp liên tục / phân phối liên tục), giúp giảm thiểu lỗi, tạo điều kiện triển khai nhanh chóng các sản phẩm với chất lượng tốt hơn và đồng thời cải thiện khả năng duy trì cơ sở hạ tầng.

Hy vọng, Mẫu bảng mô tả công việc lập trình Devops 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 dụng Devops lương cao trên TopDev

Mẫu bảng công việc Devops

YÊU CẦU CÔNG VIỆC

  • Có kinh nghiệm làm việc như một DevOps Engineer hoặc các vị trí tương tự
  • Có kinh nghiệm về Network, server và giám sát trạng thái ứng dụng
  • Kiến thức tốt về ngôn ngữ lập trình
  • Kinh nghiệm làm việc với cơ sở dữ liệu và SQL
  • Kĩ năng giải quyết vấn đề
  • Có thể làm việc độc lập và là một phần của nhóm.

MÔ TẢ CÔNG VIỆC

  • Có kinh nghiệm với các điện toán đám mây (AWS, Azure, GCP) để triển khai các bản nâng cấp và sửa lỗi.
  • Thực hiện các công cụ và khung tự động hóa (CI/CD pipelines).
  • Thiết kế, phát triển và triển khai tích hợp phần mềm dựa trên phản hồi của người dùng.
  • Khắc phục sự cố sản xuất và phối hợp với nhóm phát triển để hợp lý hóa việc triển khai mã.
  • Phân tích Code và truyền đạt các đánh giá chi tiết cho team developer để đảm bảo sự cải thiện trong các ứng dụng và hoàn thành kịp thời các dự án.
  • Phối hợp với các thành viên trong nhóm để cải thiện công cụ, hệ thống và quy trình kỹ thuật và bảo mật dữ liệu.
  • Tối ưu hóa kiến trúc điện toán.
  • Phát triển và duy trì tài liệu thiết kế và xử lý sự cố.

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

  8 Bước Trong Lộ Trình Trở Thành DevOps Engineer
   Top 10 khóa huấn luyện kỹ sư DevOps cho dân Dev
  Top 5 câu hỏi phỏng vấn Devops Engineer thường gặp và cách trả lời

Tham khảo thêm những việc làm lập trình hot nhất thị trường tại đây

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

Mô tả công việc lập trình iOS mức lương hấp dẫn

iOS Developer chịu trách nhiệm xây dựng và phát triển các ứng dụng cho thiết bị di động được cung cấp bởi hệ điều hành Apple Apple iOS. Một iOS Developer giỏi phải thành thạo một trong hai ngôn ngữ lập trình cho nền tảng này: Objective-C hoặc Swift. Hy vọng, Mẫu bảng mô tả công việc lập trình iOS 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.

Mẫu bảng công việc lập trình iOS

YÊU CẦU CÔNG VIỆC

  • Có kinh nghiệm làm việc với Ruby on Rails
  • Có kiến thức về ngôn ngữ và công nghệ của Front-End (JavaScript, HTML, CSS và JQuery)
  • Thành thạo với Objective-C hoặc Swift
  • Kinh nghiệm làm việc với các thư viện và API của bên thứ ba
  • Làm quen với các nguyên tắc thiết kế OOP
  • Hiểu biết về các nguyên tắc thiết kế và hướng dẫn giao diện của Apple
  • Hiểu biết thành thạo các công cụ phiên bản mã như Git, SVN,…
  • Kỹ năng phân tích tuyệt vời và thái độ giải quyết vấn đề tốt
  • Khả năng thực hiện trong môi trường nhóm

Tuyển dụng ios lương cao up to 3000USD

MÔ TẢ CÔNG VIỆC

  • Thiết kế và xây dựng các ứng dụng cho nền tảng iOS
  • Hỗ trợ toàn bộ vòng đời ứng dụng (khái niệm, thiết kế, thử nghiệm, phát hành và hỗ trợ)
  • Đảm bảo hiệu suất, chất lượng và khả năng đáp ứng của các ứng dụng
  • Phối hợp với một nhóm để xác định, thiết kế và cung cấp các tính năng mới
  • Giúp duy trì chất lượng mã, tổ chức và tự động hóa
  • Phát triển giao diện lập trình ứng dụng (API) để hỗ trợ chức năng di động
  • Cập nhật các thuật ngữ, khái niệm và thực tiễn tốt nhất để mã hóa ứng dụng di động
  • Khắc phục sự cố và gỡ lỗi để tối ưu hóa hiệu suất
  • Thiết kế giao diện để cải thiện trải nghiệm người dùng
  • Nghiên cứu và đề xuất các sản phẩm, ứng dụng và giao thức di động mới
  • Luôn cập nhật các xu hướng công nghệ mới

Tham khảo thêm những công việc lập trình hot nhất thị trường tại đây

Webpack là gì? Hướng dẫn webpack 4: tất cả những gì bạn cần biết từ 0 đến khi ra sản phẩm

Webpack là gì? Hướng dẫn webpack 4: tất cả những gì bạn cần biết từ 0 đến khi ra sản phẩm

Webpack là gì?

Webpack là công cụ giúp gói gọn toàn bộ file js, css(bao gồm cả scss,sass,..). Nó giúp bạn compile các module Javascript theo cấu trúc project. Ngoài ra nó có thể tối ưu tùy chọn theo môi trường khác nhau như development hay production.

Ngày nay các website đang có xu hướng trở thành những web app với các đặc tính như:

  • Càng ngày càng sử dụng JS nhiều hơn
  • Những browser ngày càng hỗ trợ những công nghệ mới
  • Những trang full-page-reload ít đi, single page app lên ngôi

Dẫn đến phần code client-side ngày càng nhiều. Điều đó có nghĩa chúng ta cần phải có một công cụ để quản lí chúng một cách hiệu quả. Và webpack là một công cụ rất mạnh để làm điều đó. Nó là một module bundler rất mới nhưng đã gây sốt gần đây. Nó nhận vào các module cùng với các dependencies và generate ra các static assets tương ứng. Các bạn xem thêm Webpack cho người mới bắt đầu tại đây nhé!

Team webpack đang làm việc tích cực để cho ra thế hệ thứ 4. Mình xin giới thiệu sơ qua các chức năng mới của bản này.

Webpack 4 gần như không cần cấu hình module bundler

Webpack rất mạnh mẽ và có không ít các feature khá độc nhưng bên cạnh đó cũng có không ít các điểm khá hạn chế, một trong số đó là configuration file.

Cung cấp 1 cấu hình cho webpack không phải là một vấn đề lớn trong các dự án vừa và lớn. Tuy nhiên đối với các dự án nhỏ thì nó tỏ ra hơi khó nhằng. Sean và team webpack đang thay đổi điều đó cho thân thiện hơn: webpack 4 sẽ không cần 1 file cấu hình mặc định.

Nào chúng ta thử nó 1 chút, tạo 1 thư mục mới và đi vào trong:

mkdir webpack-4-quickstart && cd $_

Khởi tạo 1 package.json bằng cách chạy lệnh:

npm init -y

Bây giờ kéo về webpack 4. Hiện tại webpack 4 đang trong quá trình beta, điều đó có nghĩa chúng ta nên lấy về từ nhánh Next:

npm i webpack@next --save-dev

Ta cần cài thêm webpack-cli nữa:

npm i webpack-cli --save-dev

Bây giờ mở package.json và thêm khai báo sau:

"scripts": {
    "build": "webpack"
  }

Lưu file và chạy:

npm run build

Và xem điều gì xảy ra:

ERROR in Entry module not found: Error: Can't resolve './src' in '~/webpack-4-quickstart'

webpack 4 đang muốn tìm kiếm entry point trong ./src, nói chung đó là điểm bắt đầu để bạn xây dựng gói javascipt bundle của bạn. Đọc thêm tại đây để hiểu rõ hơn nhé: webpack. Trong phiên bản trước của webpack, entry point được define bên trong file cấu hình với tên là webpack.config.js.

Nhưng bây giờ với webpac 4 thì chúng ta không cần define cái entry point này nữa. Nó sẽ được đặt mặc định trong ./src/index.js . Thử test cái feature mới này thấy thật dễ dàng, tạo ./src/index.js :

console.log('Tui là webpack 4);

và build lại xem:

npm run build

Bạn sẽ lấy được bundle trong ~/webpack-4-quickstart/dist/main.js. Khoan đã? chờ 1 chút, nó đâu cần define ở file output đâu nhỉ??!!

Trong webpack 4 không cần phải define entry point, cũng không cần trong out put file.

Tôi biết rằng đối với rất nhiều người thì điều này không quá thú vị. Sức mạnh chính của webpack là split code. Nhưng tin tui đi, file cấu hình lằng nhằng lắm, nhất là anh em mới tiếp xúc hay cần làm nhanh cái gì đó. Sau khi set up xong thì webpack 4 nó xem ./src/index.js như là entry point mặc định.

Trong phần tiếp theo chúng ta sẽ tìm hiểu thêm một số feature khá ngon: production và development mode.

Webpack 4: production và development mode

Có 2 file cấu hình phổ biến trong webpack:

  • 1 file cấu hình cho development, để mình define webpack dev server và những thứ khác.
  • 1 cho production, để define UglifyJSPlugin, sourcemaps…

Khi mà gặp những project lớn thì có thể cần phải có cả 2 file này, trong webpack 4 bạn có thể sử dụng 2 trạng thái của nó mà không phải làm bất kỳ một dùng cấu hình nào.

Bằng cách nào?

Thì nó giới thiệu chức năng này có sẵn mà dùng thôi :v. Trên thực tế khi bạn chạy dòng lệnh npm run build thì bạn sẽ thấy 1 thông báo:

Webpack là gì? Hướng dẫn webpack 4: tất cả những gì bạn cần biết từ 0 đến khi ra sản phẩm

The 'mode' option has not been set. Set 'mode' option to 'development' or 'production' to enable defaults for this environment.

Thông báo này có nghĩa là gì? Mở file package.json và update thêm script sau:

"scripts": {
    "dev": "webpack --mode development",
    "build": "webpack --mode production"
  }

Bây giờ thử chạy:

npm run dev

rồi nhìn code file ./dist/main.js, nó chưa được minified là ok. Tiếp tục chạy thử :

npm run build

và ta thấy minified bundle trong ./dist/main.js

Production mode enable tất cả các tối ưu trong webpack. Bao gồm minified code, scope hoisting, tree-shaking và nhiều nữa.

Developement mode chủ yếu tối ưu hóa tốc độ và không minified code để bạn dễ dàng làm việc.

Resources

Github repo tại đây : webpack-4-quickstart

TopDev via Valentinog

  Sử dụng Laravel Mix với Webpack cho tất cả các assets



  Xây dựng ứng dụng chat realtime bằng Laravel + Vuejs + Socket + Redis

 

Thời Đại Của Data: Trí Tuệ Nhân Tạo Vận Hành Thế Giới

Trong những năm sắp tới, Việt Nam sẽ chứng kiến sự xuất hiện của những kỳ lân mới. Vừa qua, chính phủ đã ban hành nhiều chính sách với ưu đãi cho các doanh nghiệp khởi nghiệp lĩnh vực khoa học công nghệ, gửi gắm vào trong đó sự kỳ vọng “tăng tốc” và bứt phá của cộng đồng startup đặc biệt là ở những lĩnh vực liên quan đến AIMachine Learning

Theo các chuyên gia cho biết, đến năm 2021, trí tuệ nhân tạo sẽ khai sinh ra một 2100 tỷ USD giá trị cho các doanh nghiệp, góp phần tiết kiệm 6.2 tỷ USD giờ làm việc trên toàn cầu. Cuộc chơi AI không chỉ còn là cuộc chơi của những ông lớn, các doanh nghiệp startup cũng đang dần khẳng định mình bằng những sản phẩm không hề thua kém.

Đón đầu thị trường bằng những công nghệ mới, chính là chiếc chìa khóa thành công cho bất kỳ doanh nghiệp nào “Điểm đến tiếp theo của công nghệ là đâu?”. Hãy lắng nghe câu trả lời và tranh luận từ các CEO của các công ty công nghệ, những anh tài startup, full stack developer, devops, software engineer, users and commercial ventures – Dù là lập trình viên hay marketer, sự kiện năm nay chắc chắn sẽ đem lại cho bạn vô số kiến thức, mở ra cánh cửa của đổi mới sáng tạo.

Vietnam Web Summit xoay quanh những trục chính đang là tâm điểm của công nghệ thế giới:

  • Digital Transformation: Survive and Thrive – Cách mạng số và những bước ngoặt lịch sử.
  • Beyond Digital Marketing: Humanize Customer Experiences – “Người hóa” trải nghiệm khách hàng thời đại số.
  • AI-Powered Future: Data drive product – Trí tuệ nhân tạo vận hành thế giới.
  • Operations in a ‘Serverless’ World – Vận hành doanh nghiệp trong thời đại serverless
  • Cloud-based & Intelligence-driven Cybersecurity  – An ninh mạng và những giải pháp của thời đại mới.
  • The new era of web development – Kỷ nguyên mới của công nghệ phát triển web.

Vietnam Web Summit là chuỗi sự kiện thường niên dành cho cộng đồng phát triển web, quảng cáo web. Được đánh giá là một trong những sự kiện web lớn nhất tại Việt Nam, với sự tham gia của các ông lớn như Amazon, Google, Facebook, Nielsen…, Vietnam Web Summit 2019 hứa hẹn là đại tiệc công nghệ được mong chờ nhất trong giai đoạn cuối năm!

Bên cạnh đó, Vietnam Web Summit sẽ tiếp tục hỗ trợ triển lãm với sự trình diễn của các doanh nghiệp và startup. Đây cũng là nơi demo rất nhiều sản phẩm, công nghệ của các doanh nghiệp. Tuyển dụng cũng là một trong những hoạt động mang lại giá trị hữu ích cho cả doanh nghiệp và người tham dự.. Đây là cơ hội lớn để các doanh nghiệp, developer cập nhật những công nghệ mới nhất, trao đổi trực tiếp cùng các chuyên gia đầu ngành.

Thay vì nóng lòng chờ đợi một mùa Vietnam Web Summit nữa thì hãy giữ ngay cho mình một slot tham dự cùng bạn bè nào, cùng nhau cập nhật những kiến thức mới năm 2019 bạn nhé!

THÔNG TIN LIÊN HỆ

Sponsor & Booth: Ms. Như Trương | 033 8847 836
Event team: event@applancer.net | 028 6681 3236
Ms. Thoa | thoa.nguyen@applancer.net | 038 5098 969

Assemly là gì?  Lập trình viên có nên học ngôn ngữ Assembly không?

lap-trinh-vien-co-nen-hoc-assembly-khong

Assembly Language (ASM), tiếng Việt là hợp ngữ. Mục đích của mình học ASM chỉ cơ bản là muốn hiểu thêm về người bạn thân thiết nhất của mình, cái máy tính mà suốt ngày mình ngồi trước nó. Mình chỉ thật sự muốn biết là đằng sau những dòng lệnh mình code thường ngày thì bên dưới nó làm cái gì?!

Thật tiếc là sau khi đã tìm hiểu được một số khái niệm về kiến trúc CPU, các loại Registers (thanh ghi), Data Segments, Data Moving thì mình buộc phải bỏ cuộc ở Control Flow.

Lý do đầu tiên là … do mình dở. Mình thấy nó thật sự quá khó với mình, vốn là lập trình viên ứng dụng với ngôn ngữ bậc cao (high level language) và chưa biết gì về Computer Scientic. Thứ hai là cách tiếp cận bottom-up (từ lý thuyết lên) này cũng không tốt. Mình nghĩ là trong tương lai nếu có dự án nào cần tới ASM thì mình sẽ có thể vừa học và practice tốt hơn (hướng tiếp cận top-down hay còn gọi là end to end). Cùng tìm hiểu xem Assembly là gì và chúng ta có nên học Assembly không trong bài viết này nhé!

  Chúng ta có nên học lập trình không?
  Để làm lập trình viên sau 1 năm, nên học gì?

Assemly là gì? 

Assembly Language (hay viết tắt là ASM) là ngôn ngữ bậc thấp, chính xác nó là ngôn ngữ thuộc thế hệ thứ 2 (2nd generation). ASM sử dụng các từ gợi nhớ (mnemonics) để viết các chỉ thị (instructions) lập trình cho máy tính thay vì bằng những dãy 0 và 1.

Các ASM sẽ cần một chương trình Assembler phù hợp (NASMASDASM) để dịch chúng thành những file binary và một trình linker để link các thành phần lại và chỉ định nơi bắt đầu của chương trình và đây là việc bắt buộc.

VD: Hàm main trong C mặc định là nơi chương trình khởi chạy. Lệnh dịch source C ra binary trên thực tế nó đã làm 2 bước trên: dịch và link (xác định luôn nơi khởi chạy chương trình là main).

Một trong các đặc tính của chương trình viết trực tiếp bằng ASM là: chúng có tốc độ thực thi cao và tiêu tốn bộ nhớ ít hơn các chường viết bởi các ngôn ngữ lập trình bậc cao.

Việc học assembly code cũng sẽ giúp chúng ta hiểu thêm về kiến trúc phần cứng máy tính, cách chúng hoạt động và tương tác với nhau.

Ví dụ như các thành phần cơ bản trong máy tính, cách chúng truyền thông tin cho nhau.

ASM có thể tương tác rất sâu dưới hệ thống, chúng có thể giao tiếp trực tiếp với các phần cứng và bắt chúng hoạt động theo ý người lập trình. Vì thế mà chúng ta có hẳn một ngành mang tên là “lập trình nhúng”. Xem thêm WebAssembly là gì.

Cái khó của việc học assembly là gì?

Thông thường khi học một ngôn ngữ lập trình chúng ta chỉ đơn giản là cài đặt môi trường lập trình, công cụ biên dịch và sử dụng các editor hoặc IDE nếu có thể học lập trình. Viết một chương trình đơn giản rồi biên dịch và chạy thử trên các ngôn ngữ bậc cao (C, C++, Java) là rất dễ dàng. Nhưng với ASM thì bạn sẽ dễ bị “nản” vì không thể dịch và chạy code ASM đúng như hướng dẫn.

Lý do là ASM lập trình các chỉ thị cho phần cứng tuy nhiên chúng lại lệ thuộc vào kiến trúc CPU (ARMx86-32x86-64), hệ điều hành (Linux, Windows, Mac) và các tập chỉ thị mà nhà sản xuất phần cứng đưa ra. Đa số các hướng dẫn, sách vở được viết cho kiến trúc iA-32. Một số hướng dẫn mới gần đây hơn thì viết cho kiến trúc x86-64 trên Linux, sử dụng Assembler của GNU.

Khác với ngôn ngữ C, về lý thuyết chúng ta có thể dịch lại mà không cần đổi source code ban đầu. Tuy nhiên thực tế thì điều này khó xảy ra vì chúng ta chỉ có thể làm được điều trên nếu không gọi tới các API của hệ điều hành. Nói tới đây lại thấy yêu Java hơn, Java thật sự là cuộc cách mạng viết một lần, chạy mọi nơi và cũng chẳng cần phải dịch lại. Mọi thứ đã có máy ảo Java lo.

Thêm một khó khăn nữa cho những người học ASM trên máy Mac như mình. Apple chỉ định riêng bộ linker (Match-O) cho ASM, chúng sử dụng một số chỉ thị riêng, padding memory riêng (có 4 lớp padding). Việc viết ASM cho máy Mac thật sự có rất ít bài viết hướng dẫn, doc của Apple thì như kinh thánh … Việc nhớ các thanh ghi, các chỉ thị thôi đã đuối lắm rồi, thêm Apple hành nữa thật là khó càng thêm khó !!! Chi tiết Apple OS X Assembler Reference.

VD: Một chương trình in ra “Hello World” viết bằng ASM trên Mac OS như sau:

.section __DATA,__data
str:
  .asciz "Hello world!\n"
 
.section __TEXT,__text
.globl _main
_main:
  movl $0x2000004, %eax           
  movl $1, %edi                    
  movq str@GOTPCREL(%rip), %rsi   
  movq $100, %rdx                 
  syscall
 
  movl $0, %ebx
  movl $0x2000001, %eax         
  syscall

Sử dụng GNU Assembler, linker và chạy thử:

as hello.asm -o hello.old hello.o -o hello -e _main./hello

Như các bạn đã thấy việc in một đoạn text ra màn hình với ngôn ngữ assembly khá phức tạp, đó là chưa kể ta phải viết đúng chỉ thị của OS và CPU hiện tại. Tất cả chỉ là các chỉ thị cho các thanh ghi chứ không có kiểu 1 lệnh in ra tất cả như C.

Xem thêm việc làm Software Developers hot nhất tại TopDev

ASM khó vậy thì có nên học Assembly không?

ASM sẽ chẳng có ý nghĩa gì nếu chúng ta không thuộc tập sau đây:

  • Những người cần lập trình phần cứng, mạch điện tử, các chip vi xử lý.
  • Những người lập trình compiler, hệ điều hành. (Trong đó có anh Chris Lattner, tác giả của LLVM và Swift mà mình rất ngưỡng mộ vì anh rất trẻ – SN 1978)
  • Hacker chuyên nghiệp.
  • Reverse Engineer: nếu dịch là kỹ sư đảo thì không hay và cũng ko đủ ý. RE là những kỹ sư chuyên phân tích, mổ xẻ các chương trình để hiểu rõ chi tiết bên trong nó thế nào, RE thường ứng dụng trong an ninh: phát hiện mã độc, đánh giá thuật toán mã hoá … và các lĩnh vực khác có liên quan.
Một số lợi ích khác của ASM là:
  • Có thể dùng debug chương trình mà không cần source code.
  • Có thể dùng để tối ưu hoá chương trình: một số dân code ASM chuyên nghiệp dùng C để code và dịch ra ASM rồi edit lại cho phù hợp với kiến trúc và các chỉ thị riêng và tối ưu của nhà sản xuất chip. Lý do là các compiler chỉ dịch ra ASM chung nhất cho các dòng chip.

Một số tài liệu liên quan tới ASM

Mình xin chia sẻ lại một số tài liệu mà trong thời gian qua mình có được, để ai đó có đang tìm hiểu ASM có thể tham khảo qua:
Ebook:
  1. Introduction to 64 Bit Assembly Programming for Linux: Quyển này tinh gọn, rất hay. Third edition có cho cả MacOS. Phiên bản này chỉ có cho Linux.
  2. Professional Assembly Language : Quyển này tác giả nói rất sâu về cơ chế, tất cả các thông số register, cơ chế vận hành phần cứng … Tiếc là tác giả viết cho kiến trúc IA-32 và phần code ASM cũng chỉ cho Linux x86-64 thôi.
  3. Hacking: The Art of Exploitation: Dành cho ai thích hack, cuốn này nói rất sâu về kỹ thuật hacking đặc biệt là sử dụng ASM để can thiệp hệ thống.
  4. Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation: Quyển này cho những ai yêu thích RE.
** Sách tiếng Việt mình thấy có vài cuốn nhưng mở vài trang đọc thật sự không hiểu gì !!!
Bài viết:
  1. Assembly “hello, world” for OS X: Bài này viết ASM với assembler NASM. NASM trên MacOS ko có sẵn, phải cài thêm thông qua brew.
  2. x86 Assembly Guide: bài này mình hay dùng để tra cứu nhanh các chỉ thị và thanh ghi (vì não cá vàng chưa thể nhớ nổi @@)
  3. OS X Assembler Reference: Guide về Assembler cho OS X của Apple, mình dùng doc này để convert code bên Linux qua. Cái này thật sự không giúp mình nhiều, chủ yếu coi phần Data Segment và memory padding để sử dụng thanh ghi EAX cho chính xác. Nếu không chương trình sẽ chạy ra lỗi bus error.
Mặc dù dừng lại khá sớm với việc học ASM nhưng mình cũng hài lòng với kết quả đạt được. Mình thu được một mớ kiến thức kha khá về CPU, cơ bản về việc các process cấp phát bộ nhớ. Và quan trọng là bây giờ khi cái màn hình debug trong XCode hiện lên 1 mớ ASM mình có thể hiểu được phần nào chứ không coi nó như thứ ngôn ngữ ngoài hành tinh nữa.

TopDev via Fb VietTran

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

Cách tạo một Docker đơn giản cho Node.JS

docker-cho-node-js

Đây là một hướng dẫn ngắn và đơn giản về docker, khá hữu ích cho các anh em Nodejs.

Tại sao bạn nên sử dụng Docker?

Khi công việc kinh doanh cần tới nhiều ứng dụng web khác nhau, khi mà bây giờ framework hay ngôn ngữ lập trình chỉ là công cụ. Các công ty không bị giới hạn và có thể sử dụng bất kỳ ngôn ngữ nào cần. Vì vậy chúng ta cần có một môi trường mà nhiều ứng dụng khác nhau có thể chạy cùng nhau trên đó.

Virtual Machines (VM) cho phép chúng ta chạy nhiều app trên cùng 1 server. Nhưng cũng có hạn chế. Mỗi VM cần toàn bộ OS để chạy. Mỗi OS lại cần CPU, RAM,… để chạy, rồi nó cần patching và licensing, do đó làm tăng chi phí và khả năng phục hồi.

Google bắt đầu sử dụng mô hình container từ lâu để giải quyết các thiếu sót của mô hình VM. Về cơ bản thì mô hình container có nghĩa là nhiều container trên cùng một máy chủ sử dụng cùng một máy chủ, giải phóng CPU, RAM để có thể được sử dụng ở nơi khác.

Nhưng nó giúp các lập trình viên như thế nào?

Nó đảm bảo môi trường development tương đồng với môi trường production với tất cả lập trình viên và tất cả máy chủ.

Bất kể ai có thể làm project chỉ trong vòng vài giây, không cần phải vật lộn với config, thiết lập thư viện, cài đặt dependency,…

Nói một cách đơn giản, Docker là một nền tảng cho phép chúng ta develop, deploy và run các ứng dụng với các container.

Quay lại một chút, hệ thống container trông như thể nào và nó khác với VM như thế nào?

Cách tạo một Docker đơn giản cho Node.JS

1.1 Khác biệt giữa VM và Docker

Như bạn có thể thấy host và tài nguyên được chia sẻ trong container nhưng không có trong VM.

Cách sử dụng Docker?

Chúng ta cần làm quen với một số thuật ngữ, bạn có thể đọc thêm Docker là gì:

Cách tạo một Docker đơn giản cho Node.JS

1.2. Mô tả docker image và docker container

Docker image: là một file thực thi có chứa những hệ điều hành được cắt giảm và tất cả các thư viện và cấu hình cần thiết để chạy ứng dụng. nó có nhiều lớp xếp chồng lên nhau và được biểu diễn dưới dạng một object đơn. Một docker image được tạo ra để sử dụng file docker, chúng ta sẽ bàn về nó sau.

Docker Container: Nó là một instance đang chạy của docker image. Có thể có nhiều container chạy từ cùng một docker image.

  Deploy web app với Traefik và Docker Swarm
  Sử dụng Docker (và cả Docker Compose) cho dự án Django

Container hóa một ứng dụng Node.js đơn giản

Chúng ta sẽ thử container hóa một ứng dụng node.js rất đơn giản, và tạo 1 image:

Ứng dụng Node.js của bạn

Hãy bắt đầu với việc tạo folder my-node-app

mkdir my-node-app  
cd my-node-app

Hãy tạo một server node đơn giản trong index.js và thêm dòng code bên dưới vào đó:

//Load express module with `require` directive

var express = require('express')

var app = express()

//Define request response in root URL (/)  
app.get('/', function (req, res) {  
 res.send('Hello World!')  
})

//Launch listening server on port 8081  
app.listen(8081, function () {  
  console.log('app listening on port 8081!')  
})

và lưu file này vào trong folder my-node-app

Giờ chúng ta tạo một file package.json và thêm dòng code dưới này vào:

 {

    "name": "helloworld",  
    "version": "1.0.0",  
    "description": "Dockerized node.js app",  
    "main": "index.js",  
    "author": "",  
    "license": "ISC",  
    "dependencies": {  
      "express": "^4.16.4"  
    }

 }

Ở điểm này bạn không cần cài đặt express hay npm trong máy chủ, vì hãy nhớ là dockerfile xử lý tất cả các thiết lập dependency, lib và cấu hình.

DockerFile

Hãy tạo dockerfile và lưu nó trong folder my-node-app. File này không có extension và được đặt tên là Dockerfile. Tiếp tục thêm dòng code bên dưới vào dockerfile

    # Dockerfile  
    FROM node:8  
    WORKDIR /app  
    COPY package.json /app  
    RUN npm install  
    COPY . /app  
    EXPOSE 8081  
    CMD node index.js

Giờ chúng ta đang làm gì ở đây nào

FROM node:8 – pull docker image node.js từ docker hub, bạn có thể tìm ở đây https://hub.docker.com/_/node/

WORKDIR /app – cái này đặt thư mục làm việc cho code của chúng ta trong image, nó được sử dụng bằng tất cả các lệnh tiếp theo như COPY, RUNCMD.

COPY package.json /app cái này copy package.json từ host folder my-node-app đến image trong folder /app

CRUN npm install – chúng ta chạy lệnh này trong image để cài đặt dependency (node_modules) cho app.

COPY . /app  – Chúng ta báo với docker để copy file từ folder my-node-app và dán nó vào /app trong docker image.

EXPOSE 8081 Chúng ta đang mở cổng trên container bằng lệnh này. Tại sao lại có cổng này? Vì trong server, index.js listen cổng 8081. Theo mặc định container được tạo từ image sẽ bỏ qua tất cả các request thực hiện cho nó.

Build Docker Image

Mở terminal, đến folder my-node-app và gõ dòng lệnh sau:

     # Build a image docker build -t <image-name> <relative-path-to-your-dockerfile>

    docker build -t hello-world .

Dòng lệnh này tạo một image có nội dung hello-world vào host của chúng ta.

-t được sử dụng để đặt tên cho image, mà ở đây là hello-word

. là đường dẫn đến tệp docker, vì chúng ta đang trong thư mục my-node-app, nên sử dụng dấu chấm để thể hiện đường dẫn đến file docker.

Bạn sẽ thấy một output trong dòng lệnh giống thế này:

    Sending build context to Docker daemon  4.096kB  
    Step 1/7 : FROM node:8  
     ---> 4f01e5319662  
    Step 2/7 : WORKDIR /app  
     ---> Using cache  
     ---> 5c173b2c7b76  
    Step 3/7 : COPY package.json /app  
     ---> Using cache  
     ---> ceb27a57f18e  
    Step 4/7 : RUN npm install  
     ---> Using cache  
     ---> c1baaf16812a  
    Step 5/7 : COPY . /app  
     ---> 4a770927e8e8  
    Step 6/7 : EXPOSE 8081  
     ---> Running in 2b3f11daff5e  
    Removing intermediate container 2b3f11daff5e  
     ---> 81a7ce14340a  
    Step 7/7 : CMD node index.js  
     ---> Running in 3791dd7f5149  
    Removing intermediate container 3791dd7f5149  
     ---> c80301fa07b2  
    Successfully built c80301fa07b2  
    Successfully tagged hello-world:latest

Như bạn có thể thấy nó chạy các bước vào file docker và output một docker image. Có thể sẽ mất vài phút khi bạn thử lần đầu, nhưng từ lần tiếp theo sẽ bắt đầu sử dụng cache và build nhanh hơn nhiều với output cũng giống như trên. Bây giờ thử dòng lệnh bên dưới trong terminal để xem image của bạn có ở đó không nhé:

    # Get a list of images on your host 
    docker images

Sẽ có một list các image trong host của bạn, giống như thế này:

    REPOSITORY    TAG      IMAGE ID      CREATED         SIZE  
    hello-world   latest   c80301fa07b2  22 minutes ago  896MB

Chạy Docker Container

Với image của chúng đã tạo, có thể tạo một container từ image này

    # Default command for this is docker container run <image-name>  
    docker container run -p 4000:8081  hello-world

Dòng lệnh này được sử dụng để chạy docker container

-p 4000:8081 Đây là lệnh cho phép, nó đánh dấu host 4000 sang cổng container 8081 mà chúng ta đã mở thông qua lệnh expose trong dockerfile. Bây giờ tất cả các request đến cổng host 4000 sẽ được chuyển thành cổng containter 8081

hello-world Đây là tên chúng ta đặt cho image mới nhất khi chúng ta chạy lệnh docker-build

Bạn sẽ nhận một vài output giống thế này:

    app listening on port 8081!

nếu bạn muốn truy cập vào container và gắn terminal bash vào nó, bạn có thể gõ

    # Enter the container
    docker exec -ti <container id> /bin/bash

Để kiểm tra container chạy chưa, mở terminal khác và gõ

    docker ps

Bạn sẽ thấy container chạy như thế này

     CONTAINER ID    IMAGE        COMMAND                  CREATED    
    `<container id>`  hello-world  "/bin/sh -c 'node in…"   11 seconds ago

    STATUS              PORTS                    NAMES  
    Up 11 seconds       0.0.0.0:4000->8081/tcp   some-random-name

Nó nghĩa là container của chúng ta với id <container id> được tạo từ image hello-word, và được up lên và chạy theo cổng 8081.

Ứng dụng Node.js thông minh sẽ hoàn toàn được container hóa. Bạn có thể vào http://localhost:4000/ trên trình duyệt và thấy thế này:

Cách tạo một Docker đơn giản cho Node.JS

1.3 Ứng dụng Node.js đã được containerise

Và thế là bạn đã containerise ứng dụng đầu tiên của mình rồi đấy. Chúc các bạn thành công!

Xem thêm việc làm Node.js developer hấp dẫn nhất tại TopDev

7 bước cấp thiết của chiến lược tuyển dụng IT trên social media hiệu quả

Tuyển dụng IT trên social media luôn là vấn đề gây đau đầu nhà quản lí, chưa nhắc đến việc phải tạo ra một phương hướng phát triển lâu dài. Hơn nữa, social media tiếp tục thống trị Internet như các kênh truyền thông hàng đầu. Đây không chỉ là công cụ để bạn kết nối với mọi người mà là nơi bạn có thể tìm thấy khối nhân tài. Không ngạc nhiên khi có đến 90% nhà tuyển dụng dùng social media để tìm kiếm, chiêu mộ và tuyển chọn ứng viên tài năng. Vì thế việc cạnh tranh nhau của hàng triệu công ty để thu hút nhân tài ngày một khốc liệt.

Hiểu được nỗi trăn trở đó, TopDev sẽ tóm gọn 7 bước chính yếu để xây dựng một chiến lược tuyển dụng IT trên social media hiệu quả. Ngoài ra bạn có thể xác định nền tảng mạng xã hội hợp lí, chọn lựa đúng ứng viên cũng như cách tiếp cận họ qua cách kênh truyền thông!

tuyển dụng IT social media

Bước 1: Chọn đúng nền tảng cho tuyển dụng IT trên social media

Việc lựa chọn nền tảng cho đóng vai trò vô cùng quan trọng trong chiến lược tuyển dụng IT. Theo Harver, có đến 87% nhà tuyển dụng dùng LinkedIn để tìm kiếm ứng viên, 55% dùng Facebook, 47% là Twitter.

Tương tự, nội dung bạn đăng tải cũng thế. So với Twitter và Instagram, LinkedIn được xem là hiệu quả hơn để đăng các bài blog. Vì thế hãy xác định rõ kì vọng và đảm bảo chọn một (hoặc vài) nền tảng cho xu hướng ngành của bạn.

Bước 2: Xác định cụ thể từng ứng viên khi tuyển dụng IT trên social media

Tìm kiếm một ứng viên là không hề dễ dàng. Bạn tự hào vì có một quảng cáo công việc tốt nhưng nếu ở sai thị trường sẽ không ai ứng tuyển cả. Đặc biệt với tuyển dụng IT trên social media, hãy xác định được kiểu ứng viên mà bạn muốn lựa chọn vào công ty. 

Một số câu hỏi giúp bạn rõ hơn về loại ứng viên công ty thực sự cần:

Bạn muốn tuyển sinh viên mới ra trường, chuyên gia hay tầm trung?

Bạn có yêu cầu đặc biệt nào như đạo đức công việc, lý lịch, tình trạng gia đình?

Ngoài ra, bạn có thể tiết kiệm thời gian bằng việc khắc họa chân dung ứng viên và đặt trọng tâm chiến lược vào đó. Nhờ thế, ứng viên không phù hợp sẽ được lọc sớm cũng như khuyến khích ứng viên khác nộp CV. 

Bước 3: Thiết lập lịch nội dung

Thu hút ứng viên tài năng đòi hỏi sự kiên trì và bền bỉ. Hãy đảm bảo bạn chuẩn bị kĩ bằng việc lên kế hoạch nội dung tuyển dụng IT vài tuần trước đó.

Lịch không chỉ giúp tự động hóa nội dung định sẵn còn giúp mọi người dễ thấy quảng cáo công việc của bạn hơn.

lịch nội dung- tuyển dụng IT social media

Khi đăng tải thường xuyên thì cơ hội các ứng viên thấy vị trí ứng tuyển càng cao hơn. Tuy nhiên đừng lạm dụng, vì nếu đăng quá nhiều thì bạn có thể bị liệt trong danh sách đen vì “spam” đấy.

Bước 4: Đẩy mạnh sự tương tác – điều thiết yếu trong tuyển dụng IT trên social media

Thông thường khi tìm việc, họ sẽ phản ứng ngay với các công việc họ thấy thu hút, vì vậy cần đảm bảo điều này xảy ra khi bạn đăng tải vị trí nào đó. Vì vậy bạn cần bổ sung thông điệp mang tính động lực và thúc đẩy vào quảng cáo công việc.

Một số câu truyền động lực như “sign up today- change your tomorrow” nên được lồng ghép vào các bài đăng. Chúng dễ lĩnh hội cũng như khiến cho người dùng social media thích thú hơn. Việc họ sẽ cân nhắc và cuối cùng quyết định nộp CV dễ dàng hơn bao giờ hết.

  5 tố chất để thành công khi làm nghề tuyển dụng
  3 bí quyết thu phục lòng người của nhà quản trị

Bước 5: Đặt ra những luật lệ và yêu cầu

Trong tuyển dụng IT trên social media, khi viết mô tả công việc, bạn cần chú ý, cân nhắc từng chi tiết liên quan. Trước khi đăng tải điều gì, bạn cần xác định và xem xét toàn bộ quá trình tuyển dụng IT.

Chiến lược tuyển dụng IT trên social media không giống tuyển dụng truyền thống khi nhắc tới quy định. Điều cần làm là đặt ra quy định liên quan tới định dạng, quy tắc CV cho ứng viên của bạn.

Tuy nhiên, đừng mong đợi CV nào cũng như mong muốn. Trong trường hợp đó, những ai không theo đúng nguyên tắc vẫn sẽ như thế nếu bạn chấp nhận tuyển họ.

Bước 6: Giao tiếp qua social media

Bản chất của các social media là thúc đẩy giao tiếp trực tiếp. Vì vậy, chúng có thể đóng vai trò hỗ trợ đắc lực cho bất kỳ ứng viên tiềm năng nào.

Khả năng lớn ứng viên sẽ hỏi thêm về vị trí, công ty cũng như quá trình tuyển dụng. Hãy hướng dẫn cho người quản lí kênh social media cách trả lời bất kì câu hỏi nào liên quan. Nhờ thế, việc tuyển dụng IT trên social media của bạn sẽ mang lại trải nghiệm tích cực hơn cho ứng viên đấy.

Đừng bao giờ bỏ lơ bất kì tin nhắn nào vì họ có thể thấy tiêu cực về tổng thể doanh nghiệp. Facebook và Twitter thường hiển thị trang thường xuyên trả lời tin nhắn hơn là trang không có. Vì thế, hãy thể hiện thiện chí của bạn bằng việc trả lời mọi câu hỏi.

giao tiếp trong tuyển dụng IT social media

Bước 7: Đừng để ứng viên phải chờ

Social media về bản chất khuyến khích thời gian phản hồi và quay vòng thông tin nhanh chóng. Hãy theo logic này nếu bạn có kế hoạch sử dụng tuyển dụng phương tiện truyền thông xã hội.

Khi CV đến, đảm bảo bạn liên hệ với ứng viên càng sớm càng tốt. Hoặc bạn có thể tạo tin nhắn tự động để bảo đảm ứng viên có trải nghiệm tích cực!

Công ty đôi khi phải chịu tiếng xấu khi bạn cố tình lờ đi những tin nhắn trực tiếp. Nhớ rằng bất cứ ai gửi CV chứng tỏ họ đang rất cần việc làm. Hãy cho họ thấy sự trân trọng của bạn bằng giải đáp và sắp xếp phỏng vấn sớm nhất có thể. Nhờ thế, những trải nghiệm không tốt với công ty có thể được giảm thiểu.

KẾT LUẬN

Khi dùng social media cho chiến lược tuyển dụng IT thì bạn cần tập trung vào chất lượng từng bài đăng. Không chỉ thế, bạn phải tạo cho ứng viên cảm xúc tích cực bằng việc duy trì và thúc đẩy sự tương tác với họ. Dĩ nhiên việc thực hiện không hề dễ dàng tí nào. Tuy nhiên, nếu bạn nghiêm túc và kiên trì, vị trí ứng tuyển của bạn sẽ hiệu quả hơn mong đợi rất nhiều đấy!

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 !

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

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

TopDev via Talentlyft

  3 nguyên tắc tuyển dụng của Richard Branson
  TopDev ra mắt giải pháp tuyển dụng ứng dụng trí tuệ nhân tạo

Mẫu bảng mô tả công việc cho lập trình Golang

Mô tả công việc lập trình Golang mức lương hấp dẫn

Golang Developer là lập trình viên có kiến thức và kinh nghiệm về ngôn ngữ lập trình Golang. Golang là một trong những ngôn ngữ lập trình mới nhất trong ngôn ngữ lập trình hiện đại. Golang được tự mô tả là một ngôn ngữ lập trình mã nguồn mở giúp dễ dàng xây dựng phần mềm đơn giản, đáng tin cậy và hiệu quả. Hy vọng, Mẫu bảng mô tả công việc lập trình Golang 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

Về lập trình viên Golang : Để thành một Golang Developer, xác lập trình viên cần nắm rõ cấu trúc dữ liệu và giải thuật, kỹ thuật lập trình hướng đối tượng cũng như có kinh nghiệm về ngôn ngữ Golang để cùng tham gia nghiên cứu, thiết kế, phát triển và tích hợp các các giải pháp và hệ thống ứng dụng phục vụ công việc quản trị, vận hành và điều hành cho sản phẩm công ty/ khách hàng.

Mẫu bảng công việc lập trình Golang

YÊU CẦU CÔNG VIỆC

  • Nắm vững chắc về ngôn ngữ lập trình Golang, mô hình, cấu trúc và thành ngữ
  • Hoặc Thành thạo một hoặc nhiều ngôn ngữ lập trình: C / C ++ / Java / Golang
  • Kiến thức về các mẫu Goroutine và kênh phổ biến
  • Có kinh nghiệm làm việc với với các công cụ code versioning (như Git, SVN và Mercurial)
  • Có kinh nghiệm làm việc với các Framework và tools của Go, bao gồm:+ Các công cụ quản lý phụ thuộc như Godep, Sltr, v.v.
    + Go’s code generation tools, như Stringer
    + Go web frameworks, như Revel
    + Gói bộ định tuyến, chẳng hạn như Gorilla Mux

MÔ TẢ CÔNG VIỆC

  • Tham gia thiết kế và phát triển các ứng dụng kinh doanh hiệu suất cao, từ phân tích yêu cầu đến sản xuất
  • Không ngừng nâng cao chất lượng phần mềm
  • Phân tích và cải thiện hiệu suất ứng dụng
  • Phối hợp với thành viên trong team để tối ưu hóa các phương pháp kỹ thuật
  • Đóng vai trò quan trọng trong các quyết định thiết kế và kiến ​​trúc, xây dựng hướng tới một kiến ​​trúc phân tán dịch vụ vi mô hiệu quả.

Tham khảo thêm những công việc lập trình hot nhất thị trường tại đây

Giải pháp cho phần lưu, quản lý log hiệu quả và cực kỳ tiết kiệm chi phí

Sau một thời gian “ngưng log” các request API và SQL query thì đã mạnh dạn tìm kiếm 1 SaaS log management vừa túi tiền để thử, bởi nếu các bạn cũng biết mấy ông này rất đắt tiền, bèo bèo cũng 50$/tháng và cũng lưu được vài GB.

Tìm việc làm it manager lương up to 50M

Syslog-Ng để nhận log local và đẩy lên UDP Server

Vô tình phát hiện ông LogDNA với chi phí khá cool 1.5$/GB/tháng. Thiết nghĩ chắc Teamcrop tầm 3, 4GB tháng là cùng. Cuối cùng đã quyết định đẩy toàn bộ log lên LogDNA, do hệ thống Teamcrop Microservices dùng docker và đang sử dụng Syslog-NG để ghi log local, nên chỉ cần mount 1 file config mới để trỏ tới UDP IP & Port mới là xong.

  Speed up Microservices 3: Export dữ liệu ra Excel
  Speed up Microservices 2: Tận dụng trình duyệt và cache
  Microservices là gì? Speed up Microservices 1: Tác dụng phụ và một số chiến lược cơ bản

Sau khi kết nối và thấy raw log được thì khá là ưng ý và cũng đã apply lên production sau 1 ngày thử nghiệm. Ác mộng mới bắt đầu, sau 2 ngày chạy thiệt, hệ thống log đã ghi nhận gần 16 triệu line, và tổng dung lượng gần 4.5GB. Tính nhẩm nhẩm thì 1 tháng tầm 50GB là ít, tính ra chi phí cũng không ít, chả khác gì mấy ông như Loggly, Papertrail, Sematext…có vẻ không ổn nên lại tính cài lại Graylog hoặc ELK nhưng quá khứ cho thấy làm việc với các hệ thống này mặc dù tự cài nhưng khá chua, lỗi lên lỗi xuống, rườm rà và giao diện cũng phức tạp (performance tệ).

PHP 7 & Swoole Extension để dựng UDP Socket Server

Sau một ngồi suy nghĩ thì tính đến chuyện sao không viết 1 UDP server luôn và lắng nghe log và ghi xuống “một nơi nào đó”, và nơi này phải tối ưu cho truy vấn thống kê (chứ MySQL là nghe đến trăm triệu record là bỏ của chạy lấy người). Viết UDP Socket server khá dễ, chỉ vài phút là dựng được cũng như viết được parser cho log. Nhân đây giới thiệu với các đồng đạo extension Swoole của PHP, tìm hiểu để mở rộng thêm tầm nhìn về PHP nhé.

Kết hợp với Supervisord thì script PHP này chạy ngầm đỡ dở chứng.

Công đoạn thiếp theo là lưu log ở đâu để truy vấn cho lẹ, vô tình tìm ra Clickhouse, được sinh ra để tối ưu cho OLAP và trên nhiều dữ liệu. Lại tương thích với SQL nên hầu như khi sử dụng (truy vấn) sẽ không khác MySQL bao nhiêu. Cài đặt Clickhouse cũng dễ nên sau vài giờ là đã test đọc ghi dữ liệu. Cũng có PHP client để kết nối nên việc tích hợp vào code PHP khá nhẹ nhàng và không có vấn đề gì. Cho chạy thử nghiệm production thì dữ liệu đẩy vào khá smooth. Hiện tại được vài triệu record nhưng query khá nhanh.

Khâu cuối cùng là Select data & UI thì tùy mỗi người nhu cầu gì thì viết chart mà thôi, cái này dễ như làm việc với web bình thường. Bên Teamcrop thì sử dụng cơ chế insight có sẵn và UI trên React nên khâu này khá nhẹ nhàng, tha hồ làm chart mình thích.

Hoặc làm biếng thì có clickhouse-client, có thể vào và viết query để xem kết quả ngay như mysql client.

Toàn bộ giải pháp hiện đang chạy 1 con server 20$/tháng, nếu log nhiều thì có thể xóa record quá cũ hoặc thuê server bự hơn. Dù sao thì hiện tại log khá sướng, chủ động ở khâu parser và query data. Hy vọng những chia sẻ này sẽ giúp anh chị em tiết kiệm kha khá tiền cho log management. Khi nào xịn xịn xíu, có GUI sẽ viết blog hoặc open source phần setup này cho bà con triển khai nhé, đỡ tốn tiền và muốn log bao nhiêu log. Tất cả chỉ tốn 1 ngày R&D và tiết kiệm bộn tiền cho vụ log này.

Một số công nghệ đề cập:
– Syslog-Ng để nhận log local và đẩy lên UDP Server
– PHP 7 & Swoole Extension để dựng UDP Socket Server
– Supervisord để quản lý PHP Background Process
– Clickhouse để làm database và truy vấn dữ liệu

  Giao tiếp hiệu quả giữa các Microservice
  MySQL ngoại truyện

Bài viết được chia sẻ bởi tác giả Võ Duy Tuấn

 

Liệu AI có thể giúp doanh nghiệp đưa ra các quyết định kinh doanh toàn diện nhất?