Home Blog Page 27

Kí sự Freelancer ở Upwork

Freelancer ở Upwork

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

Tại sao nên đọc bài này

  • Một cách để có thêm thu nhập
  • Những thứ mà mình đã trải nghiệm khi làm freelance

Lý do mình bắt đầu

À, do mình hết tiền. Lúc mình nghỉ công ty cũ thì cầm đúng một tháng lương là tiền thưởng tết để đối mặt với cuộc đời này.

Quá lười để viết một chiếc CV mới, quá thiếu ý chí để tìm một công việc văn phòng khác, và quan trọng nhất là…quá đói rồi nên mình mới lân la tìm việc freelancer.

Vậy là search được vài trang và dừng lại ở Upwork. Vậy là hành trình trở thành Freelancer của mình bắt đầu từ đây

Tại sao không phải là làm freelance ở Việt Nam?

Vì mình chả quen ai cả. Kĩ năng thì có nhưng quan hệ thì không. Và lý do thứ hai là mình khá không hợp với cách làm việc của người Việt Nam
  • Pay rate thấp, lại đổi requirement liên tục
  • Timeline lúc thì sát đít, lúc thì vô cùng
  • Cách làm việc thường theo pattern để tôi hơn, bạn thiệt
Freelancer ở Upwork
Mình không đánh đồng tất cả, nhưng đấy là những thứ mà mình nhìn thấy và trải nghiệm nên mình cũng rất không muốn phải làm việc kiểu như vậy. Chắc mọi người không còn lạ gì quịt tiền của dev, hay làm một website 2tr rồi.
Nhưng mà nếu bắt đầu với môi trường quốc tế thì bạn phải làm được 2 điều:
  • Biết tiếng Anh, càng nhiều càng tốt
  • Trả lời được câu hỏi: “Thành, vậy năng lực cạnh tranh của mày là gì? Mày làm sao nói tiếng Anh giỏi bằng tụi EU, làm sao mày chịu được cái rate 6$/hrs của tụi Ấn độ”

Khi gian nan bắt đầu

Dùng hết cả buổi tối để fill hết đống tên, kĩ năng, bla bla cho Upwork vậy là mình start quá trình làm freelance thôi. Lúc bắt đầu mình nghĩ là chắc cũng khó, mà dkm, khó không tưởng

Mọi thứ bắt đầu cực kì khó khăn và suffer khi mình phải viết một thứ gọi là Proposal, một đoạn text ngắn đề nói với người đăng việc là “Bố mày đỉnh lắm, bố mày hợp vkl với cái công việc này nè, mày tuyển tao đi”

Freelancer ở Upwork

Đó, đại loại vậy, vậy mà mình viết hết proposal này tới proposal khác mà chả thấy ma nào hồi âm cả. Sad

Cả tuần sau thì mới có 1-2 người hồi âm mà nội dung thì cũng chả đâu vào đâu, kiểu mày có kinh nghiệm gì làm prj như này chưa? Làm rồi thì đưa tao coi xem thử. Mà mình thì làm méo gì có những thứ như vậy để show ra cho người ta, vậy là lại fail.

Sau 2 tuần cứ viết viết mà chả ai hồi ầm, chả hiểu sao mà mình may mắn lại tìm thấy một job lập trình mà yêu cầu là người Vietnam. Perfect, vậy là mình viết ngay mấy dòng “Hey tao là người Việt Nam nè vào tao cũng biết lập trình bla bla …”. Vậy là được nhận.

Bắt đầu từ công việc đầu tiên đó, mình được đánh giá cao nên sau này càng nhận được nhiều job hơn. Không còn vất vả phải soạn tâm thư mà lại không nhận được gì.

Những gian khổ ngày đầu trở thành lãi suất kép, sau một thời gian đầu tư ban đầu đổi lại mức rate của mình đã được tăng lên khá tích cực, từ $70/prj phải làm trong mấy chục giờ làm việc, thì mình đã được khách hàng đồng ý trả mức hơn $45/hr.

  Chia sẻ bí kíp làm freelancer – Nhân đôi thu nhập hiệu quả

  Học lập trình tới khi nào có thể làm freelancer?

Bí kíp

Mình thấy kì này trên TikTok bắt đầu share làm freelance thế này thế kia rồi bán khóa học đồ. Nên mình share ở đây hy vọng mọi người đỡ phải mua :))))) Vì mình cũng méo có ý định bán hay dạy ai gì cả

1. Hãy tìm một job ở ngách

Bạn sẽ rất khó khi bắt đầu công việc freelancer với những Job khá là chung chung kiểu: Cắt HTML, CSS, làm React,…

Tại vì số người đã có profile trên Upwork làm những thứ như vậy là rất rất nhiều rồi. Chả có ông nào khùng tới mức thuê bạn cho những công việc như trên nếu bạn chưa có profile đâu.

Do đó chiến thuật nên là tìm những công việc kiểu nó dị dị á. Ví dụ lúc đó mình sẽ dùng keywork Vietnam để xem có job nào mà người nước ngoài cần tuyển Việt Nam không, như vậy sẽ dễ nhận được việc hơn. Hoặc là thay vì tìm keyword là react, mình sẽ tìm Vuejs, Svelte, Astrojs,… đó, job tuy ít hơn nhiều nhưng khả năng được làm việc cũng cao hơn.

Freelancer ở Upwork
Tuy nhiên để làm được điều này bạn cũng cần là một version flexible có thể learn mọi thứ một cách nhanh chóng. Và cũng phải tự tin là bản thân sẽ làm được.

2. Mục tiêu của proposal là để người ta phải trả lời mình

Đừng chỉ viết tôi có A, có B và đó là lý do tôi là sự lựa chọn phù hợp với bạn. Hay viết kiểu như vầy

Hey tao có từng làm A, có biết B nên tao thấy tao phù hợp với mày nè. Tao cũng thấy hứng thú với prj của mày cực, có điều có điểm này có vẻ không đúng lắm, hoặc tao chưa hiểu rõ lắm. Mày giải thích cho tao được không?

Đó làm kiểu vậy thì khả năng người ta sẽ trả lời lại bạn sẽ cao hơn rất nhiều, đồng thời cũng không sợ bị cạn kiệt connect nữa.

Hãy để ý những thằng seller hay bán hàng trên mạng hay bắt bạn inbox hoặc xin sdt để tư vấn thêm: Lý do là nếu được nói chuyện, tìm hiểu riêng thì tỉ lệ chốt đơn sẽ cao hơn rất nhiều.

Freelancer ở Upwork

Có một tip khá hay là hãy thử đóng vai là người đi đăng job và tuyển người để xem tụi nó gửi proposal như thế nào. Mình có nhặt thử một requirement và đăng thử lên Upwork xem tụi nó apply ra sao. Vậy là học được một đống câu cú tụi nó viết proposal từ phân khúc thấp cấp tới cao cấp.

Có một cái common pitfall mình phát hiện ở đây là: Hầu hết tụi freelancer ngoài kia đều có một pattern và tụi nó chỉ copy & paste cho tất cả các Job. Cùi vãi :)))

Hãy viết proposal một cách personalize nhất cho Job đó, đảm bảo tỉ lệ nhận job của bạn sẽ cao hơn bình thường. Tuy mỗi lần viết đều có một số chỗ mình sẽ lặp lại, nhưng mình luôn luôn gõ lại từng thứ khi bắt đầu viết proposal vì mình nghĩ đó là cách tốt nhất để thể hiện mình là người chuyên nghiệp và mình thật sự quan tâm tới Job đó.

Việc làm IT Fresher dành cho bạn

3. Aggressive

Freelancer ở Upwork

Hỏi xem client muốn gì, khi nào thì start được, timeline khi nào muốn deliver. Còn thiếu gì mà bạn có thể làm ngay lập tức.

Nói chung là làm tất cả mọi thứ để công việc start càng sớm càng tốt. Lúc này bạn sẽ setup được vibe khi làm việc của hai bên một cách chuyên nghiệp và đúng giờ hơn.

4. Clear scope

Hãy clarify xem những thứ gì KHÔNG làm và những thứ gì sẽ làm. Việc bạn clear với người ta những gì KHÔNG làm là cực kì quan trọng. Nó giúp hai bên thống nhất rõ ràng hơn công việc sẽ làm, đồng thời cũng tránh case rất tệ đó là “À em ơi còn chút này sửa giúp chị với”

Freelancer ở Upwork

In the end, bạn cần là một người làm việc có tâm. Và khách hàng thành công nghĩa là bạn thành công. That’s it. Nãy giờ mình chỉ nói những thứ bề nổi, tip khi làm việc, tuy nhiên mình tin là đó không phải là thứ khiến bạn có thể trở thành một người freelancer tốt được.

Nếu bạn đặt suy nghĩ nếu khách hàng thành công nghĩa là mình thành công, thì kiểu gì bạn cũng sẽ có cách để deliver mọi thứ tốt hơn.

Thứ mình học được

Khách hàng thành công nghĩa là bạn thành công

Nghĩa là gì pa?

Nghĩa là lâu lâu bạn sẽ chịu thiệt một tí, miễn là khách hàng được việc. “Em ơi, sửa chỗ này giúp anh một xíu”. “Dạ chỗ này không có trong scope ban đầu nhưng nhỏ nên em sửa luôn cho .”

Đôi khi có contract đã đóng rồi, nhưng client liên hệ nhờ check lại chỗ này, mình cũng check và fix luôn, và thấy quá nhỏ nên khi người ta hỏi bao nhiều tiền thì mình tl là cái này nhỏ quá free luôn. Tới nỗi giờ mỗi lần mình hết tiền mình đều inbox ổng, “Hey Luis, tao hết tiền rồi, kì này mày có công việc gì không cho tao làm với. Vậy là ổng lại lật đật chuẩn bị việc cho mình làm.” Mà kiểu ổng cũng thật sự méo cần thằng nào giúp nhưng thằng này hết tiền rồi thôi đẩy cho nó ít việc.

Khách hàng thành công nghĩa là bạn quan tâm nhiều hơn tới thứ mà người ta mong muốn. Họ muốn deadline là khi nào, họ muốn standard ra sao, có chỗ nào mình thấy chưa ok ảnh hưởng tới product mà họ chưa nhìn thấy.

Đó, cách thể hiện thì muôn hình vạn trạng nên mình nghĩ hãy luôn nhớ trong đầu cách suy nghĩ như vậy sẽ giúp bản thân làm tốt công việc hơn.

Có một điểm rất thú vị khi mình bắt đầu ý thức được suy nghĩ như vậy là mình không còn stress khi làm việc nữa, người ta cũng vậy. Ít nhất là không còn stress phải fighting để bảo về quyền lợi cho bản thân và đẩy phần thiệt cho người đối diện. Vì khi nghĩ tới sự thành công của người khác, nghĩa là hai bạn đang ở trên một chiếc thuyền, cùng nhau để đi được xa hơn. Thay vì cứ phải suy nghĩ làm sao để mình không chịu thiệt thòi, và client kiều gì cũng sẽ suy nghĩ như vậy nếu bạn làm như vậy.

Freelancer ở Upwork

Mọi người có tưởng tượng là mình trễ deadline, và mình rất xin lỗi người ta và muốn commit làm thêm, và client trả lời là “không sao, mày mà làm nhiều hơn thì mày không còn enjoy nữa”. Và sau đó mình còn được gửi Bonus cho việc đó nữa. Chưa hết, client này còn muốn gửi bonus mình vào dịp dáng sinh nữa, kiểu như ổng coi mình là một nhân viên chính thức trong công ty của ổng và ông đối xử như một người sẽ đi long-term cũng nhau, thay vì chỉ xung quanh công việc như những freelancer bình thường khác

Một giờ của bạn đáng giá bao nhiêu

Mình biết là với rate hiện tại, mình được trả 45$/hr và điều đó giúp mình rất nhiều. Nếu một công việc gì đó quá tốn thời gian mà mình có thể thuê với giá bé hơn 20$/hrs mình sẽ thuê.
Freelancer ở Upwork

Nếu một bữa ăn quá nửa giờ làm việc của mình thì mình sẽ không ăn. Còn dưới nửa giờ làm việc thì không phải là vấn đề.

Nó cho mình một framework để biết nên dành thời gian cho việc gì á? Đồng thời mình cũng giúp mình quý trọng thời gian hơn.

Cách làm việc với khách hàng

Nó luyện cho mình nói tiếng Anh, viết tiếng Anh. Giải thích một cách dễ hiểu cho người ta, đồng thời cũng phải tập làm sao để clarify lại problem cần giải quyết.

Cách nói chuyện khi code bị bug nè, cách nói khi bị trễ deadline nè, hay cách nói chuyện khi người ta muốn đưa việc thêm scope vào.

Key là: Đừng bao giờ trả lời có hay không, bạn lỗi hay tôi lỗi. Hãy tìm cách giải quyết vấn đề cho cả hai, hay nhớ lại điều gì khiến cho client thành công. Mình tin là họ thành công rồi thì họ sẽ trả cho bạn xứng đáng

Show off with the world

Bạn sẽ rất rất khó xin việc nếu bạn không có một profile online tốt. Hãy đặt thử góc nhìn từ client nhé: “Làm sao tao tin những gì mày nói ở proposal là thật nhỉ? Làm sao tao biết được mày có thể làm tốt công việc đúng như expect của tao?”

Freelancer ở Upwork
Đó và bạn phải trả lời câu hỏi đó bằng cách:
  • GitHub của bạn nói gì về bạn? Những ngôn ngữ nào, framework nào bạn đã làm qua
  • Twitter/LinkedIn thể hiện suy nghĩ và kinh nghiệm làm việc của bạn thế nào
  • Blog bạn chia sẻ về những trải nghiệm, kinh nghiệm khi làm nghề

Tự làm chủ

Freelancer, trong đó có chữ free, nghĩa là bạn tự do. Bạn tự do chọn công việc mà bạn sẽ làm, bạn tự do chọn cách làm công việc, bạn tự do sắp xếp thời gian làm công việc, bạn tự do lựa chọn chất lượng output, bạn cũng tự do từ bỏ công việc đang làm.

notion image

Mọi thứ đều tự do, vậy tới lúc đó bạn còn có tránh nhiệm với những thứ mình đang làm? Có một cú sock khá lớn mà mình bắt đầu làm freelancer, đó là tôi tưởng tôi muốn tự do nhưng thực sự là …éo .

Nào là bất mãn khi đi làm văn phòng sếp cứ bắt thế này thế kia, tao sẽ tự ra làm riêng rồi tự làm sếp cho mày biết mặt, bạn hãy thử trải nghiệm là sếp của chính bản thân mình xem. Khá là thú vị đó!

Dù gì nó cũng không phải là một thứ long-term

Tại sao người ta lại thuê một freelancer chứ không phải là một agency?
  • Vì công việc đó đủ nhỏ để người ta có thể manage risk
  • Vì giá rẻ hơn

Đó, và vì công việc khi làm freelancer khá nhỏ, nên việc bạn phát triển ở đây nghĩa là bạn làm mọi việc một cách quen tay hơn chứ không phải khó hơn. Nên đối với mình đây không phải là một thứ long term giúp mình phát triển được, kiếm tiền thì ok :))

Dĩ nhiên thì người giỏi thì nằm đâu chả phát triển được, đầy công việc freelance cũng giúp bản thân tìm tòi được nhiều thứ hay ho hơn. Tuy nhiên mấy cái như vậy không nhiều và đôi khi bạn cần phải có một đẳng cấp nhất định thì mới có cơ hội được làm.

À tương lai nếu được thì mình sẽ muốn chuyển qua Toptal thay vì Upwork vì nghe nói bên đó có vẻ nhìu tiền hơn, mà cũng khó hơn

Đây là câu chuyện đi làm freelancer của mình, nếu bạn còn tò mò chỗ nào thì comment bên dưới nhé!

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

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

Xem thêm Tìm việc Developer hấp dẫn trên TopDev

Top 5 CSS Frameworks tốt nhất cho anh em Developer 2024

Top 5 CSS Frameworks tốt nhất cho anh em Developer

CSS là một trong 3 ngôn ngữ trụ cột của anh em lập trình Frontend bên cạnh HTML và JavaScript. Để xây dựng được giao diện của một Website hoàn chỉnh, chúng ta sẽ cần phải viết khá nhiều CSS; trong đó sẽ có nhiều style được sử dụng lại với nhiều Website khác nhau. Vì vậy có nhiều các CSS Frameworks được tạo ra giúp anh em Dev thuận tiện hơn, tối ưu hóa thời gian viết code và hoàn thiện dự án. Bài viết hôm nay chúng ta cùng nhau tìm hiểu top 5 CSS Frameworks tốt nhất hiện nay và xem bạn đã biết và sử dụng bao nhiêu trong số đó nhé.

CSS Framework là gì?

CSS – Cascading Style Sheets là một ngôn ngữ được sử dụng để tìm và định dạng lại các phần tử được tạo ra bởi HTML, giúp tạo phong cách (styles) cho các phần tử trên trang Web như bố cục, màu sắc, màu chữ, font chữ, …

CSS Framework là gì?

CSS Framework là tập hợp các đoạn code CSS có cấu trúc, mang lại giải pháp thống nhất giúp lập trình viên giải quyết các vấn đề lặp đi lặp lại trong quá trình xây dựng giao diện Website. Lợi ích khi sử dụng CSS Framework:

  • Nâng cao quy trình phát triển bằng cách sử dụng các class và id được xác định trước
  • Hỗ trợ việc tương thích cho nhiều trình duyệt, phiên bản khác nhau
  • Tăng năng suất, tối ưu hóa giai đoạn phát triển dự án
  • Tạo bố cục, phong cách đồng nhất, rõ ràng trên cùng một Website hay giữa các sản phẩm trong cùng một tổ chức

Cùng điểm qua danh sách 5 CSS Framework được đánh giá tốt nhất hiện nay nhé:

1. Tailwind CSS

Tailwind CSS

Tailwind CSS là một framework tương đối mới (phát hành từ 2017) và được thiết kế cùng sự khác biệt so với các CSS framework trước đây. Nếu như các framework CSS trước đây đi theo hướng sử dụng các thành phần được thiết kế từ trước làm cơ sở để phát triển thêm thì Tailwind cung cấp các lớp tiện ích cấp thấp cho phép bạn xây dựng các thiết kế của riêng mình.

Ưu điểm của Tailwind CSS:

  • Mang lại sự linh hoạt cho người dùng có thể tạo ra các thiết kế độc đáo
  • Cú pháp của Tailwind cơ bản giúp mang lại tốc độ phát triển nhanh hơn cho dự án, không cần phải chuyển đổi giữa HTML và CSS khi viết code.
  • Tối ưu hóa CSS bằng việc sử dụng PurgeCSS giúp giảm và loại bỏ các class dư thừa cũng như tối giản kích thước file CSS tạo ra
  • Khả năng tùy chỉnh cao: dễ dàng ghi đè cấu hình mặc định với file tailwind.config.js

2. Bootstrap

Bootstrap

Tiếp theo trong danh sách CSS Frameworks tốt nhất 2024 chính là Bootstrap. Bootstrap là cái tên phổ biến và được sử dụng rộng rãi nhất trong các CSS Framework. Được phát triển từ năm 2011, hiện nay nó được sử dụng trên hàng triệu Website và là kỹ năng được xem như mặc định phải có của một Frontend Developers trước đây. Bootstrap framework chứa cả HTML, SASS và JavaScript khiến nó có thể xem như là một Frontend framework hoàn chỉnh; mặc dù vậy việc sử dụng nó cũng khiến kích thước của project tăng lên đáng kể.

Ưu điểm của Bootstrap:

  • Hệ sinh thái khổng lồ: Bootstrap cung cấp một thư viện rộng lớn về bố cục, chủ đề, các components, … dành cho lập trình viên có thể thoải mái sử dụng. Cộng đồng làm việc, sử dụng và đóng góp cho Bootstrap cũng đông đảo và lâu đời hỗ trợ bạn một cách nhanh chóng
  • Tạo bản mẫu nhanh: Nhờ việc sử dụng kết hợp cả HTML và JavaScript nên Bootstrap cung cấp cho bạn các bản mẫu hoàn chỉnh, không mất nhiều thời gian để tạo ra hình dạng đầu tiên của Website một cách trực quan nhất
  • Bootstrap hỗ trợ cả SASS và LESS, điều mà không nhiều CSS framework cung cấp

  Bí kíp code CSS hiệu quả hơn mà các bạn nên biết

  CSS Preprocessor là gì? Cách sử dụng có khó không?

3. Foundation

Foundation

Foundation là một CSS framework được xây dựng dựa trên hai ngôn ngữ là SASS và SCSS giúp cung cấp các khả năng tiếp cận khác nhau nhằm tối ưu hóa mọi hoạt động thiết kế Web nhanh chóng và hiệu quả. Foundation hướng đến kiến trúc mobile-first, có những nét tương đồng với Bootstrap khi cung cấp một bộ UI Framework khá hoàn chỉnh chứa cả HTML và JavaScript.

Ưu điểm của Foundation:

  • Cung cấp bộ công cụ phong phú giải quyết hầu hết các vấn đề mà anh em lập trình cần để dựng Website.
  • Tính linh hoạt cao: Foundation không bắt buộc các nhà phát triển phải sử dụng một phong cách hay ngôn ngữ cụ thể mà hoàn toàn có thể tùy chỉnh, kiểm soát giao diện người dùng
  • Hỗ trợ GPU acceleration cho phép thực thi các animation một cách mượt mà và nhanh chóng

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

4. Bulma

Bulma

Bulma được xem là một trong những top CSS Frameworks tốt nhất mà bạn nên dùng. Bulma có mã nguồn mở dựa trên Flexbox. Nó triển khai các ô xếp để tạo lưới kiểu Metro giúp mang lại bố cục trang mượt mà. Source code của Bulma hoàn toàn mở và bạn có thể thoải mái chỉnh sửa hay mở rộng chức năng. Ngoài ra Bulma được viết chỉ dùng CSS, không có thành phần JavaScript cũng giúp việc xử lý trở nên mượt mà, mang lại hiệu năng cao hơn.

Ưu điểm của Bulma:

  • Dễ học và sử dụng: Bulma được thiết kế dạng module với khả năng tùy biến cao nên dễ dàng sử dụng dành cho lập trình viên
  • Khả năng tương thích cao: với ưu điểm viết hoàn toàn bằng CSS thì các trang Web sử dụng Bulma có khả năng chạy trên nhiều trình duyệt khác nhau mà không bị hạn chế
  • Tính năng được cập nhật bổ sung liên tục

5. Skeleton

Skeleton

Skeleton thậm chí không tự gọi mình là một CSS framework nhưng sự tối giản của nó luôn được cộng đồng lập trình viên đánh giá cao. Chỉ với 400 dòng code, công cụ vô cùng nhẹ nhàng này được tạo ra để giúp xây dựng các phần tử CSS tương thích với cả thiết bị màn hình lớn và thiết bị di động. Skeleton chứa tất cả các thành phần tiêu chuẩn đáp ứng thiết kế responsive; chia một trang thành nhiều lưới (grid) 12 cột. Cú pháp triển khai của Skeleton vô cùng nhanh và đơn giản giúp tiết kiệm thời gian.

Ưu điểm của Skeleton:

  • Nhẹ và dễ dàng lưu trữ, xử lý
  • Ưu tiên các thiết bị di động, phù hợp cho các anh em Dev mới bắt đầu thiết kế
  • Dễ học, dễ triển khai ngay cả với những người mới bắt đầu

Kết bài

Như vậy chúng ta đã cùng nhau điểm qua top 5 CSS Framework phổ biến và tốt nhất hiện nay. Còn nhiều framework khác cũng được cộng đồng anh em thiết kế Web đánh giá cao tùy thuộc vào đặc thù của dự án, sản phẩm mà khách hàng, tổ chức đang phát triển. Việc sử dụng CSS Framework sẽ giúp cho công việc thiết kế Website của bạn trở nên đơn giản, tiện lợi, nhanh chóng và tạo được các sản phẩm tốt hơn. Hy vọng bài viết hữu ích dành cho bạn và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Những bài viết liên quan:

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

Nhảy việc sau Tết: Tìm CƠ HỘI mới hay lại tiếp tục CƠ CỰC?

Nhảy việc sau Tết: Tìm CƠ HỘI mới hay lại tiếp tục CƠ CỰC?

Sau Tết nguyên đán là thời điểm nhộn nhịp nhất của thị trường việc làm khi chứng kiến làn sóng “nhảy việc” ồ ạt. Có rất nhiều lý do khiến người lao động chọn năm mới làm thời điểm “vàng” để tìm cơ hội mới. Tuy nhiên, quyết định nhảy việc dù trong thời điểm nào cũng tồn tại những cơ hội và thách thức. Vậy những cơ hội thách thức đó là gì? Liệu có nên nhảy việc sau Tết? Câu trả lời sẽ có trong bài viết này!

Vì sao nhảy việc sau Tết trở thành “xu hướng”?

Nhảy việc sau Tết

Tết âm lịch là thời điểm kết thúc các công việc của năm cũ, thưởng Tết cũng đã đâu đó thanh toán xong, làm cho việc quyết định nhảy việc trở nên dễ dàng hơn. Bên cạnh đó, cuối năm là thời điểm để mọi người nhìn nhận lại một năm vừa qua, nếu họ cảm thấy mệt mỏi với công việc hiện tại hoặc không tìm thấy cơ hội phát triển trong tương lai thì họ sẽ rời đi.

Thêm nữa, với số lượng lớn người lao động nghỉ việc sau Tết đã làm gia tăng áp lực tuyển dụng cho các doanh nghiệp. Số lượng vị trí trống gia tăng đột biến, thị trường bước vào “mùa tuyển dụng” tạo ra cơ hội xin việc cho hàng nghìn người.

Cơ hội và rủi ro khi nhảy việc sau Tết

Nhảy việc sau Tết mang theo cả cơ hội và rủi ro, và quyết định này nên được đưa ra sau khi cân nhắc kỹ lưỡng với các yếu tố cá nhân và chuyên môn. Dưới đây là một số cơ hội và rủi ro bạn cần biết:

Cơ hội

  • Môi trường mới: Nhảy việc mang lại cơ hội để trải nghiệm môi trường làm việc mới, nơi bạn có thể học hỏi và phát triển mối quan hệ mới.
  • Phát triển sự nghiệp: Có thể bạn sẽ có cơ hội thăng tiến nhanh chóng hoặc học được nhiều kỹ năng mới trong môi trường làm việc mới.
  • Thu nhập cao hơn: Một công ty mới có thể đưa ra mức lương và gói phúc lợi tốt hơn, giúp cải thiện tình hình tài chính cá nhân.
  • Mạng lưới mới: Khi chuyển đến công ty mới, bạn có cơ hội mở rộng mạng lưới quan hệ của mình, tạo ra các kết nối mới có thể hữu ích trong sự nghiệp.

Nhảy việc sau Tết

Rủi ro

  • Rủi ro tài chính: Một số người chọn cách nghỉ việc rồi mới tìm việc mới, điều này dẫn đến vấn đề thiếu hụt tiền bạc. Nếu xác định nghỉ việc bạn nên để dành khoản ngân sách để đi tìm việc hoặc có việc mới trước khi nghỉ.
  • Không thích ứng được với môi trường mới: Có thể môi trường làm việc mới không phù hợp với tính cách hoặc giới hạn kỹ năng của bạn, tạo ra cảm giác không thoải mái.
  • Thời gian thích ứng: Việc thích ứng với môi trường, quy trình làm việc mới có thể mất thời gian, và trong thời gian này, bạn có thể gặp khó khăn.
  • Rủi ro về ổn định công việc: Chuyển đến một công ty mới có thể đặt ra rủi ro về ổn định công việc, đặc biệt nếu thị trường lao động không ổn định như hiện nay.

  Bạn đang có một công việc (Job) hay một sự nghiệp (Career)?

  5 bí quyết tìm việc IT cho đợt tuyển dụng đầu năm mới

Những điều cần làm trước khi tìm “bến đỗ” mới sau Tết

Nhảy việc sau Tết là một quyết định quan trọng, đòi hỏi người lao động cần chuẩn bị kỹ lưỡng. Dưới đây là một số bước cần làm nếu bạn muốn nhảy việc sau Tết:

1. Xác định rõ lý do muốn nhảy việc

Trước khi quyết định nhảy việc, bạn cần xác định rõ lý do muốn nhảy việc là gì. Điều này sẽ giúp bạn đưa ra quyết định đúng đắn và tránh được những rủi ro không đáng có.

Có nhiều lý do khiến bạn muốn nhảy việc, chẳng hạn như:

  • Bạn không hài lòng với công việc hiện tại, chẳng hạn như mức lương, cơ hội thăng tiến, môi trường làm việc,…
  • Bạn muốn thử thách bản thân với một công việc mới.
  • Bạn muốn tìm kiếm một cơ hội tốt hơn với mức lương cao hơn.

2. Tìm hiểu thị trường việc làm và lựa chọn ngành nghề, vị trí phù hợp

Sau khi xác định rõ lý do muốn nhảy việc, bạn cần tìm hiểu thị trường việc làm để nắm bắt nhu cầu tuyển dụng, từ đó lựa chọn ngành nghề, vị trí phù hợp với sở thích, năng lực và mục tiêu của bản thân.

Bạn có thể tìm hiểu thị trường việc làm thông qua các kênh sau:

3. Lập kế hoạch tìm việc và chuẩn bị hồ sơ xin việc

convert CV chuẩn IT

Sau khi lựa chọn ngành nghề, vị trí phù hợp, bạn cần lập kế hoạch tìm việc cụ thể, bao gồm thời gian tìm việc, cách thức tìm việc, kỹ năng cần thiết cho công việc mới. Bên cạnh đó, bạn cũng cần chuẩn bị hồ sơ xin việc thật kỹ lưỡng để gây ấn tượng với nhà tuyển dụng. Tham khảo công cụ tạo CV chuyên nghiệp chuẩn developer tại đây.

4. Chuẩn bị tâm lý cho những khó khăn có thể gặp phải khi nhảy việc

Nhảy việc sau Tết có thể mang lại nhiều cơ hội cho bạn, tuy nhiên cũng tiềm ẩn nhiều rủi ro. Do đó, bạn cần chuẩn bị tâm lý cho những khó khăn có thể gặp phải khi nhảy việc, chẳng hạn như:

  • Khó tìm được công việc mới phù hợp.
  • Mất thu nhập trong thời gian tìm việc.
  • Mất mối quan hệ với đồng nghiệp, cấp trên cũ.

Tóm lại

Nếu bạn quyết định nhảy việc sau Tết, hãy đảm bảo rằng bạn đã chuẩn bị kỹ lưỡng. Hãy xác định rõ lý do muốn nhảy việc, tìm hiểu thị trường việc làm, lựa chọn ngành nghề, vị trí phù hợp, lập kế hoạch tìm việc và chuẩn bị hồ sơ xin việc. Bên cạnh đó, bạn cũng cần chuẩn bị tâm lý cho những khó khăn có thể gặp phải khi nhảy việc. Đừng quên truy cập TopDev để tìm kiếm việc làm IT sau Tết hấp dẫn bạn nhé. Chúc bạn tìm việc thành công!

Xem thêm:

Xem thêm Top tìm việc IT lương cao HOT nhất trên TopDev

Những extension không thể bỏ qua cho dev web

Những extension không thể bỏ qua cho dev web

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

Tại sao nên đọc bài này?

  • Tối ưu productive khi đi code, debug nhanh hơn

Extension

VisBug

VisBug

Bạn không biết element nãy đã align với element kia chưa?

Bạn không biết khoảng cách padding này đã giống với design chưa?

Thêm thắt nhanh thử một ít magin/padding xem UI có tốt hơn không?

Xin giới thiệu với các vị và quý bạn ‍♂️, VisBug, tool chính chủ từ Google có thể trả lời cho bạn tất cả các câu hỏi trên.

Nói chung là ai hay làm lệch align đó, hay bị design bắt bẻ thì nên dùng tool này để check lại nha. Thấy sai thì lặng lẽ sửa, còn thấy đúng thì bật lại designer ngay

VisBug

Dark Reader

Dark Reader

Mình nghĩ phải 96.69% dev sẽ code về đêm, hoặc có code ban ngày thì cũng dùng theme đen. Cái extension này sẽ mang Dark Mode tới bất cứ trang web nào mà chưa support cú đêm như tụi mình

Có nhiều tool/extension làm vụ này nhưng mình chỉ thấy duy nhất thằng này là đỉnh nhất và mình dùng daily hàng ngày luôn.

Dark Reader

Daily.dev

Cứ mở new tab là có tin tức về công nghệ/coding cho các bạn. Còn personalize theo cách đọc của mỗi người nữa.

Passive learning là đây chứ đâu. Bình thường sáng nào mình cũng dành 15 phút mò mẫm trên đây. Còn lâu lâu mở tab mới thấy bài hay cũng múc luôn cho nóng

À nói thêm mình có viết một bài về Passive learning ở đây: Passive learning cho Dev

Mình thấy kĩ năng học tập là cực kì cực kì quan trọng khi là dev nên Passive learning là kiểu mình apply chắc cũng phải 4-5 năm rồi. Phải công nhận nó là thứ giúp mình còn sống vui và khỏe trong ngành này… còn sau này già thì không biết

Daily.dev

  5 VS Code Extensions hữu ích cho React developers

  Hướng dẫn tạo extension chrome và đưa lên store chỉ trong 5 phút

LocatorJS

Cái này mình mới luanch gần đây nhưng công nhận rất tiện. Mỗi lần mở source mới là lại phải mò mẫm tìm xem cái component mình cần sửa nằm ở file nào.

Thậm chí thằng đệ của mình còn mở từng file cho tới khi tìm được chỗ đó . Hy vọng nó đọc được bài này :)))

LocatorJS

Grammarly

Cái này là dành cho những đứa vừa yếu vừa lười tiếng Anh như mình. Grammarly sẽ giúp spot ra các lỗi grammar hay dùng từ trong tiếng Anh. Giúp mình làm việc chuyên cmnr nghiệp hơn với các bạn bè thế giới

Tuy nhiên sau khoảng thời gian 2-3 năm sử dụng thì có vẻ càng dùng nhiều mình càng tự sai grammar nhiều hơn, nên bạn đọc cân nhắc nhé. Fix root cause vẫn hơn

Grammarly

React Dev Tool/Vue Dev Tool

Cái này thì khỏi nói rồi, mặc định. Có điều có bao giờ bạn thử sử dụng tab Profiler để kiểm tra performance với detech khi nào component rerender chưa?

Có hàng xịn mà không biết dùng thì cũng uổng lắm nhé!

JSON viewer

JSON viewer

Đôi khi muốn xem nhanh cái API mà nó trả về JSON trối quá thì cài cái này vô, mọi thứ đơn giản ngay

JSON Viewer

Insomnia

Insomnia

Cái này không phải extension nhưng thôi mình bỏ vào đây luôn.

Chắc là ai cũng phải work với API và hầu hết mọi người đều dùng Postman, nhưng đối với mình, người đang sử dụng con Macbook Pro M1 16GB/512GB Space Gray thì nó quá nặng. Ỳ ạnh vkl, nên mình đã chuyển hẳn sang dùng cái này.

Khá là nhẹ và clean, đủ dùng. Ngoài ra mình còn thấy mọi người dùng Http Client ở VS Code cũng khá ổn.

Insomnia

Mọi người có thường dùng tool nào nữa không? Comment để mình trải nghiệm thử!

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

Xem thêm:

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

Phương pháp ra quyết định có nên đổi việc hay không?

Những điều cần cân nhắc trước khi

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

Có nhiều bạn tìm đến mình tư vấn hướng nghiệp với ý định và mong muốn đổi sang một lĩnh vực, ngành nghề mới. Có rất nhiều lý do cho việc thay đổi này như: cảm thấy không còn động lực trong công việc cũ, thấy lĩnh vực mới đang ‘hot’ trên thị trường, muốn thử sức bản thân và ra khỏi vùng an toàn, vân vân.

Để hỗ trợ các bạn ra quyết định có nên đổi nghề đổi việc hay không, mình sử dụng nhiều phương pháp khác nhau tuỳ theo từng trường hợp. Có bạn cần thực hiện các bài trắc nghiệm tính cách để hiểu bản thân. Có bạn cần đào sâu vào các trải nghiệm công việc quá khứ để tìm ra điểm chung. Có bạn cần đầu tư và làm CV và cải thiện kĩ năng tìm việc. Một trong những kĩ thuật được mình sử dụng nhiều là phương pháp tưởng tượng. Bạn dành thời gian tưởng tượng về các khía cạnh khác nhau ở công việc bạn đang quan tâm và so sánh độc thích thú của bản thân so với công việc hiện tại.

Phương pháp tưởng tượng có ích trong việc giúp bạn mở rộng góc nhìn về một công việc, có bức tranh thực tế hơn về công việc đó. Nhiều khi mình chỉ thích một công việc vì thấy bức tranh được ‘vẽ’ một cách hào nhoáng về những kết quả như lương cao, ổn định, được đi du lịch nhiều. Mình chưa biết hết được các khía cạnh ‘tối’ của công việc đó. Phương pháp tưởng tượng kết hợp phỏng vấn người làm trong nghề giúp bạn có được góc nhìn sâu hơn này.

Bây giờ lấy ví dụ bạn đang là một người làm công việc Nhân sự hoặc Marketing ở một công ty lớn và đang băn khoăn có nên đi ra ngoài làm tự do (freelance) hay không. Bạn sử dụng phương pháp tưởng tượng để nhìn sâu về các khía cạnh sau của công việc freelance.

  Hướng nghiệp CNTT - Định hướng nghề nghiệp cho các bạn trẻ

  Nhảy việc thất bại, có nên quay lại công ty cũ làm việc?

 có nên đổi việc hay không?

1/ Kiến thức

Bạn tưởng tượng mình sẽ sử dụng kiến thức gì khi làm công việc freelance? Hiện nay để làm được công việc freelance bạn cần một số kiến thức tốt như kiến thức công nghệ, kiến thức viết lách, kiến thức Marketing, kiến thức thiết kế. Bạn có kiến thức nào ở trên, so với 5 người bạn xung quanh bạn có khá hơn những người đó hay không?

2/ Kĩ năng

Bạn tiếp tục tưởng tượng xem một người làm freelance cần có những kĩ năng gì để làm tốt? Ví dụ người làm tự do cần có kĩ năng tự quản lý và sắp xếp thời gian, xây dựng mạng lưới quan hệ, tự Marketing bản thân, quản lý tài chính cá nhân và nhiều kĩ năng khác. Bạn suy nghĩ xem nếu được sử dụng các kĩ năng trên mỗi ngày bạn sẽ cảm thấy vui vẻ hay mệt mỏi?

3/ Con người

Trong công việc mới bạn sẽ thường xuyên tiếp xúc với những kiểu người như thế nào? Cố gắng mô tả cụ thể về kiểu người đó bao gồm giới tính, tính cách, độ tuổi, suy nghĩ, quan điểm sống. Con người ở đây có thể bao gồm sếp, đồng nghiệp, khách hàng là những người tương tác với bạn mỗi ngày.

Lấy ví dụ khi mình tưởng tượng về công việc Sale mình biết rằng mình cần tiếp xúc với những người chịu khó nói, thích thuyết phục người khác, hào sảng, hay quan tâm đến chủ đề làm giàu. Đây là những điều mình không thích nên mình thường né công việc Sale ra.

4/ Vị trí địa lý

Đây là một điều nhỏ những bạn cũng nên suy nghĩ và tưởng tượng về công việc mới. Công việc đó bạn sẽ làm ở đâu, gần nhà hay xa nhà? Nếu gần thì thời gian tiết kiệm được bạn dành làm gì, nếu xa thì thời gian di chuyển đến chỗ làm có đáng để bạn bỏ ra hay không?

5/ Môi trường làm việc

Bạn tưởng tượng về không gian làm việc của mình ở trong công việc mới. Ví dụ một người làm tự do thường ngồi quán cafe làm việc một mình, ít có cơ hội tương tác trò chuyện tán gẫu với đồng nghiệp như trong văn phòng, sẽ tốn tiền mua nước, có thể có sự ồn ào trong không gian quán cafe. Những điều trên có làm bạn phiền lòng hay không?

6/ Giá trị công việc

Đây là một điều quan trọng và khó tưởng tượng nhất. Mỗi công việc đều hướng đến những giá trị khác nhau. Bạn nên phân biệt giữa giá trị cốt lõi sâu xa mà công ty thường rao giảng và giá trị thực tế. Ví dụ có nhiều công ty rao giảng về giá trị đóng góp phục vụ cộng đồng, nhưng thực tế giá trị thật là làm sao bán được càng nhiều doanh thu càng tốt. Không có gì sai nếu công ty muốn tăng doanh thu, tuy nhiên việc nhìn rõ vào giá trị công việc sẽ giúp bạn có động lực làm việc hơn. Một doanh nghiệp cung cấp những sản phẩm và có những giá trị phù hợp với giá trị sống của bạn là doanh nghiệp khiến bạn hạnh phúc hơn. Bạn có thể tìm hiểu về giá trị sống của bản thân tại đây.

7/ Thu nhập

Cuối cùng hãy tưởng tượng về thu nhập của bạn trong công việc mới. Mức lương cố định mỗi tháng là như thế nào? Ngoài cố định có thêm những khoản đãi ngộ nào, thưởng nào phát sinh hay không?

Sau khi bạn tưởng tượng đủ sâu về cả 7 yếu tố trên, bạn có thể sử dụng để đặt lên bàn cân giữa 2 công việc khác nhau và so sánh xem đâu là những lựa chọn mình thích hơn. Sẽ có những mục hợp với công việc này, có mục lại hợp với công việc khác. Lúc này việc bạn cần làm là sắp xếp xem mục nào là quan trọng nhất với bạn ở thời điểm hiện tại.

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

Xem thêm:

Xem thêm việc làm Developers hàng đầu tại TopDev

Những sự thật không ai dạy bạn về Ngành Phần mềm (Phần 2)

Những sự thật không ai dạy bạn về Ngành Phần mềm

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

Tại sao nên đọc bài này?

  • Để bạn có một cái nhìn đa chiều hơn về ngành phần mềm, không phải hoàn toàn là việc nhẹ lương cao như thằng em sn 96…
  • Một số sự thật khó tiêu hóa trong ngành phần mềm. Có khi nó giúp bạn nhận ra và unlock được một level mới
Nối tiếp phần 1 được rất nhiều người đón nhận, thì đây là phần 2222222 ✌️

Disclaim lại lần nữa: Đây là bản dịch từ bài gốc https://vadimkravcenko.com/shorts/things-they-didnt-teach-you/ dưới lời văn đã thay đổi nhiều cho phù hợp với cảm nhận của bản thân mình . Khuyến khích mọi người đọc cả bài gốc lẫn bài của mình để có nhiều góc nhìn hơn.

Gét gô

Bạn lúc nào cùng sống trong trạng thái mập mờ (Uncertain time)

Đối phó với con người đã khó, đối phó với trạng thái mập mờ còn khó hơn. Và đỉnh cao của khó khăn là đối phó với những con người mập mờ :)) Và đó đích thị là những gì bạn phải làm khi trở thành một software developer.

Con người thì thường chả biết họ muốn gì, và đôi khi họ không nhận ra là thay đổi cái feature này một tí thôi là phải code ở dưới tới sấp mặt. – “Ê em đổi tích hợp thanh toán Momo thành Zalo giúp anh với, tích hợp ví thôi mà phải không? ”

Câu lừa vĩ đại nhất khi ở trường đại học dạy bạn là sẽ có một anh Prj Management đưa cho bạn một task chi tiết, cẩn thận, chỉn chu những gì cần làm, và việc của bạn chỉ là biết nó thành code thôi – một bản mô tả chi tiết công việc…mập rõ. Rồi cuối ngày bạn làm xong task được giao, đúng yêu cầu, đúng thời gian, vỗ vai nhẹ anh PM nói rằng “tối nay đi uống rượu không, em baoo. ez job, ez life”

Nhưng thực tế là PM sẽ luôn xuất hiện lúc bạn sml nhất và nói rằng “Chúng ta cần làm thứ gì đó để làm được A, tuy nhiên chưa có design, tụi 3rd party hay backend cũng chưa ready đâu, nhưng cứ thử làm trước đi”… Rồi sau đó sửa sml. Và nó đích thị là công việc thật sự mà một Software Engineer phải làm, đi gom lại hết requirement mọi nơi, rồi tìm xem là mình thật sự cần làm gì.

Okey thì chuyện đi gom góp requirement thì chả phải dễ dàng gì. Nó cũng không vui vẻ như việc viết code, vì rõ ràng mà, nói chuyện với máy tính thì vui vẻ hơn là nói chuyện với PM, với sếp, với client, với design hay là một ông backend nào đó. Nhưng nó lại là thứ tốn rất nhiều thời gian để hoàn thành công việc, vì nó phải làm việc với con người, không phải là máy móc. Bạn phải nói chuyện với bên 3rd party xem cái gì làm được cái gì không, hỏi designer xem làm kiểu này được không, và quan trong nhất là hỏi sếp/client xem người ta muốn cái feature đó trông như thế nào.

Để có thể yên vị code những dòng đầu tiên thì phải mất chắc cả tuần để làm những việc trên. Tìm hiểu requirement là gì, chỗ nào có thể hỏi được, rồi xem coi cái gì build được cái gì không, à còn cả phải tìm hiểu thêm chỗ nào có thể toang (vì thiếu data, vì design đẹp quá không code được,…) rồi mới có thể code được.

  “Luyện” gì để trở thành Software Engineer xịn?

  19 tips cho các kỹ sư phần mềm hữu ích trong 2024

Đoạn chữ in nghiêng sẽ là ý thêm của mình nha

Sau khi đọc comment của bài trước thì nhiều bạn/anh/chị nói lại tại mỗi trường nhỏ lẻ nó mới vậy, thử làm những công ty lớn như FPT, KMS,… đồ thì quy trình rất rõ ràng, PM viết task detail đầy đủ.

Thực tế là mình chưa từng được trải nghiệm môi trường như vậy nên mình cũng không rõ nó như thế nào. Mình đã từng làm ở một cty out-source dạng vừa, với hơn 20 prj lớn nhỏ, từ intern tới vị trí lead, đã từng làm ở công ty product với sản phẩm là top 1 market, từ vị trí bình thường tới senior. Và mình công nhận điều ở trên là đúng – ít nhất đối với mình. Sẽ luôn luôn có task mà mọi thứ chưa sẵn sàng, và mình phải tự đi mày mò xem cần những gì, và có thể làm gì. Mình cũng đã từng phải nhờ các bạn trong team làm điều tương tự.

Do đó, dưới góc nhìn của mình, chuyện này khá là đương nhiên và thậm chí mình còn thích điều đó. Bởi vì, nếu không tiếp xúc với nhiều bên thì làm sao mình biết thứ mình làm có đúng không, có value không. Và nó cũng giúp mình thấu hiểu được các bên khác quan tâm điều gì, kiểu như Backend thì quan tâm data input, scaling,… Design thì quan tâm usability, spacing,…

Và cảm ơn những khoảng khắc như vậy mà nó khiến cho mình phát triển trong sự nghiệp tốt hơn, vì nếu mình hình dung chỉ code y chang như những gì được mô tả, thì mãi mãi mình cũng chỉ như cái máy dịch – chuyển ngôn ngữ con người qua ngôn ngữ máy mà thôi. Cái đó hiện tại có khi còn làm không tốt hơn ChatGPT nữa rồi kìa

Tham khảo thêm các vị trí tuyển dụng Software Engineer tại Topdev

Cho rằng mọi thứ đều có thể tồn tại bug

Một số quan niệm sai lầm mà rất nhiều các bạn dev gặp phải
  1. Bạn hiếm khi tin vào code trong prj của mình, bởi vì bạn cũng chỉ là con người thôi, và con người thì make mistake
  1. Thư viện, 3rd party cũng có thể có bug, nhưng có thể hiếm hơn vì chắc là tụi nó trình cao hơn mình
  1. Mấy thư viện của OS hay siêu nổi tiếng rồi thì chắc KHÔNG THỂ NÀO có bug đâu nhỉ? Mấy người viết code đó toàn siêu nhân.
  1. CPU/Hardware chắc không bao giờ toang đâu. Tụi nó tốn cả chục năm nghiên cứu ra mà, tiến trình 7nm đồ
  1. Điện thì méo thể nào biến mất được :)) (Okey cái này thì ở VN mà nói ra thì người ta nói thằng này bị điên)

Nhưng sự thật là – chúng ta – lập trình viên KHÔNG BAO GIỜ được chắc chắn là code của mình, library, hay thậm chí là phần cứng sẽ không bao giờ có bug. Ngay cả mấy người não to làm ra những thứ đó thì cũng là người mà thôi.

software developer

Không tin hả, nhìn vào thử Github Issue mấy thư viện mà bạn sài đi, ngay cả repo của OS thì bạn sẽ thấy cả tỷ issue trong đó, và library càng nổi tiếng thì càng nhiều.

Bằng cách suy nghĩ là “cho rằng mọi thứ đều có thể tồn tại bug” thì sẽ giúp cho dev dễ dàng có cách phòng chống, hoặc là “sống chung với lũ” hơn. Và nó là một thứ cực kì cần thiết để build một hệ thống ổn định và đáng tin cậy.

À cách đối phó của mình với chuyện này cũng khá đơn giản. Mình hay thấy các bạn newbie khi code luôn có suy nghĩ là bug chỉ ở trong khoảng từ line 2 tới 4, và bạn dành cả ngày để thử sai, chỉ ở trong phạm vi code 2 tới 4 đó. Nhưng nếu suy nghĩ bug ở có thể ở khắp mọi nơi, thì mình sẽ luôn phải test xem bug có ở từ line 1-2 không, có thể từ line 4-100 không, hay nằm ẩn trong thư viện nào không. Dĩ nhiên, bạn phải có cách verify bug nằm ở đâu và không nằm ở đâu – Và mình tin đây là một kĩ năng CỰC KÌ quan trọng và cần thiết khi làm software.

Đây méo phải là công việc mơ ước

Không quan tâm bao nhiêu video YouTube, Tiktok, bài viết, báo chí, thầy cô, bạn bè, voz, toingoicodedao tung hô về ngành lập trình. Nào là thằng em sinh năm 96, nào là nhân viên của Google, Facebook,… nào là lương lập trình viên tận trời xanh. Tất cả chỉ là bề nổi của tảng băng ‍♂️
software developer
  • Nó là một công việc cũng khá nặng nhọc đó. Bạn phải ngồi với máy tính cả ngày
  • Hiếm khi có work-life balance. Thử hỏi bug production lúc giữa trưa hay đêm khuya xem?
  • Hiếm khi bạn build một thứ mà bạn thật sư thích nó. Bạn làm theo những gì client, PM yêu cầu
  • Cơ hội nghề nghiệp không tốt lắm. Ngay cả khi bạn là thằng perform tốt nhất.
  • Công việc stress vl. Deadline, bugs, QA, kì vọng từ khách hàng
  • Làm việc remote thì cũng cool đó, nhưng sẽ tới lúc bạn bị tách rời khỏi thế giới. Vậy là kĩ năng tương tác với xã hội sẽ ngày càng mờ nhạt đi
  • Không an toàn lắm. Công nghệ thì thay đổi xoành xoạch, lứa trẻ thì xuất hiện như quân Nguyên – vừa đông vừa hung hãn. Hôm nay còn được trọng vọng nhưng hôm sau bị layoff lúc nào không hay
Mấy cái gạch chữ thì mình thấy không đúng lắm. Work-life balance thì là do lựa chọn thôi, còn bản chất nghề nghiệp này không cho work-life balance thì mình thấy chưa đúng. Thích hay không thì còn tùy trình độ và cái tôi của bản thân nữa, nếu thứ bạn thích và nó có value thì nó ok, còn thứ bạn thích mà nó không có value thì nên làm một mình thôi. Cơ hội nghề nghiệp thì mình thấy tràn ngập, thực tế mình rất thích những người làm tech xong chuyển hướng, họ có suy nghĩ cực kì là logic. Còn lại hầu hết mình thấy mọi người khá yên phận khi làm dev, kiểu làm dev thì sau này làm dev vẫn ok á, không có kiểu tao lm z thôi, sau này tao làm nghề khác.

Code đẹp đỉnh cao không thể dạy được

Okey, bạn có thể học code đẹp, đọc clean code, nhưng code dạng đẹp đỉnh cao thì không thể dạy ở trường học được.

Code đẹp đỉnh cao được định nghĩa là nhìn qua overall là có thể cảm nhận được là người viết ra code này đỉnh vkl. Nó sẽ kiểu dễ đọc, để hiểu, dễ sửa, nhìn chỉn chu ngay hàng thẳng lối lắm. Sẽ có những code mà bạn thấy đẹp nhưng sửa thì không dễ, và ngược lại,… nhưng code mà cover được hết những thứ đó thì người viết ra nó phải có kĩ năng thượng thừa lằm.

Xui cái là, code được như vậy thì không thể học ở trường được. Nó là thành quả của rất nhiều, rất nhiều kinh nghiệm, rất nhiều trăn trở, rất nhiều lần đọc code thì mới có thể tu luyện được.

Kiểu gì cũng có người hỏi khi nào làm xong em? Làm bao lâu em? trong khi bạn cũng méo biết, hay méo muốn phải trả lời

Mấy sếp, thì thích số, thích estimates, và thích hỏi luôn khi nào thì em làm xong. Và thế giới thì vận hành như vậy đó – một cái biz luôn muốn đạt được điều gì đó, nhưng trước khi bắt đầu start, họ luôn muốn/phải biết cái giá phải trả là bao nhiêu. Và estimation là một đại lượng để biết cái giá đó là bao nhiêu.

Okey, cái này thì chả thể nào dạy được ở trường đại học, và nó cũng là thứ mình thấy rất nhiều bạn bất ngờ khi đi làm bị hỏi estimation. Và các bạn phải rèn luyện nhiều thì mới trả lời được câu hỏi đó, phải biết năng lực bản thân mình, phải biết hệ thống đang chạy, phải biết code đang như nào, phải biết yêu cầu ra sao, thì mới có được câu trả lời. Và bạn càng đối mặt với nhiều vấn đề khác nhau thì kĩ năng này của bạn sẽ càng được cải thiện.

software developer

Mình sẽ không thảo luận cách tốt nhất để estimates ở đây, bạn tự search Google hay hỏi chatGPT đi, nhiều lắm. Điều mà mình muốn nói ở đây là estimates là thứ duy nhất mà người làm biz hiểu và sử dụng được. Nếu bạn nói rằng “Chúng ta có một plan lâu dài cho cái này, nhưng tao cũng không biết khi nào hoàn thành nó”, thì thử hỏi, ông biz phải làm sao phải làm sao.

Không phải tất cả cuộc họp đều tệ

Làm Dev mà hiếm khi được code, vậy thời gian đi đâu? Đi họp!

Họp hành để đảm bảo mọi thứ mượt mà và đúng deadline. Nó giúp cho mọi người hướng tới cùng một mục tiêu. Team marketing biết rằng mấy ông dev đang làm gì đó, và họ thì chuẩn bị content, hình ảnh để lên bài khi release. PM thì muốn biết được dev đang làm gì, có đúng hướng không đặng biết đường còn chỉnh lại. Customer support thì đưa ra những feedback/bug mà khách hàng gặp phải,… vân vây mây mây…

software developer

Mọi thứ, mọi thứ đều kết nối với nhau, và đi họp là cách để kết nối mấy thử đó. Với vai trò là một dev thì trách nhiệm của bạn cũng là một điểm để kết nối với team, công ty, khách hàng,… Bạn có thể không thích đi họp nhưng đó là trách nhiệm của bạn trở thành một mắt xích trong bộ máy công ty để nó vận hành trơn tru hơn.

Kết luận

Nếu bạn cân nhắc bắt đầu dấn thân vào con đường làm một Lập Trình Viên, thì hãy chuẩn bị để đối mặt với những vấn đề như trên, cố gắng, nắm bắt cơ hội và phát triển. Tới cuối thì có khi bạn cũng chẳng thể thay đổi thế giới gì đâu, nhưng tới cuối thì, nó cũng chỉ là công việc thôi mà, bạn không đóng góp cách này thì bằng cách khác, không thay đổi cả thế giới thì thay đổi… thằng đồng nghiệp cũng được.

Và điều quan trọng nhất, hãy tìm niềm vui trong đó.

Còn điều gì khiến bạn vỡ mộng khi mới bắt đầu đi làm, comment bên dưới nhé!

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

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

Tìm việc làm IT lương cao tại TopDev

Cách sử dụng hàm isset trong PHP

Cách sử dụng hàm isset trong PHP

Isset là một hàm cơ bản nhưng cực kỳ quan trọng trong PHP giúp chúng ta kiểm tra giá trị của một biến. Mặc dù vậy thì thực tế sử dụng các bạn mới code PHP thường nhầm lẫn nó với một số hàm khác có chức năng kiểm tra biến tương tự như empty hay is_null. Bài viết hôm nay chúng ta cùng nhau tìm hiểu cách sử dụng hàm isset trong PHP áp dụng bài toán thực tế nhé.

Hàm isset() trong PHP

Hàm isset() trong PHP thực hiện việc kiểm tra một biến đã được thiết lập hay chưa. Nếu một biến đã được unset với hàm unset() trong PHP thì nó sẽ được xem là không còn được thiết lập nữa. Hàm isset() sẽ trả về false nếu như biến đang kiểm tra chứa giá trị là NULL.

isset trong PHP

Cú pháp hàm: isset(variable1, variable2……)

Tham số:

  • variable1 (bắt buộc): biến cần check 
  • variable2…… (không bắt buộc): các biến cần check khác

Giá trị trả về:

  • TRUE: nếu như các biến (variable1,variable2..) truyền vào tồn tại và có giá trị khác NULL
  • FALSE: trong các trường hợp còn lại

Ví dụ: Để kiểm tra xem người dùng đã nhấn vào nút submit trên form login hay chưa, chúng ta thường xử lý như đoạn dưới đây trong PHP bằng cách sử dụng hàm isset để check.

<?php
if(isset($_POST['login'])){
    // Code xử lý khi người dùng  nhấn vào nút login form
}
?>

Sử dụng hàm isset giúp chúng ta tránh được các lỗi liên quan đến việc khởi tạo biến hoặc khởi tạo các phần tử trong mảng, ví dụ như lỗi Notice: Undefined variable hay Notice: Undefined index. Việc kiểm tra trước điều kiện giúp bạn đỡ phải thực hiện các câu lệnh không cần thiết, ngoài ra còn tăng tính chính xác và bảo mật của mã nguồn.

  Các hàm xử lý chuỗi thường dùng trong PHP

  Top 6 mẹo của PHP giúp anh em code tốt hơn

Một số lưu ý khi sử dụng hàm isset()

Isset là một hàm cơ bản và thông dụng trong PHP, tuy nhiên bạn cần lưu ý giá trị biến truyền vào cũng như điều kiện trả về của hàm để tránh bị nhầm lẫn trong một số trường hợp, cụ thể:

    • Giá trị trả về chỉ bằng TRUE khi biến truyền vào đã tồn tại và khác NULL
    • Hàm chỉ kiểm tra giá trị cho biến chứ sẽ không kiểm tra giá trị của từng phần tử trong mảng hay giá trị của các thuộc tính trong một object. Để làm được 2 việc trên thì PHP cung cấp cho chúng ta các hàm khác như array_key_exists() hay property_exists()
    • Hàm isset sẽ trả về FALSE trong cả 2 trường hợp biến chưa được thiết lập hoặc giá trị bằng NULL. Vì vậy chúng ta không thể sử dụng hàm này để phân biệt 2 trường hợp trên. Để giải quyết vấn đề này chúng ta sử dụng một hàm khác là empty() mà mình sẽ nói ở phần sau của bài
  • Trường hợp truyền nhiều biến vào hàm (variable1, variable2……) thì chỉ cần 1 trong các giá trị biến không tồn tại thì hàm sẽ trả về FALSE. Hay nói cách khác isset(variable1, variable2) = isset(variable1) && isset(variable2)

Xem thêm tuyển dụng PHP lương cao trên TopDev

Phân biệt isset, emptyis_null trong PHP

Isset, empty is_null là 3 hàm dùng để kiểm tra giá trị của một biến trong PHP, tất cả đều sẽ trả về một giá trị boolean. Nếu như isset sử dụng để kiểm tra biến đã được thiết lập hay chưa thì empty là hàm giúp kiểm tra xem một biến có rỗng hay không.

Vì thế 2 hàm này thường được xem là ngược nhau; tuy nhiên điều này không phải lúc nào cũng đúng. Với hàm is_null thì dễ hiểu hơn một chút khi nó sẽ chỉ trả về TRUE khi biến là NULL, tuy nhiên nó sẽ chỉ gọi được với điều kiện là biến truyền vào đã được khai báo.

Cụ thể về từng trường hợp trả về chúng ta có thể tham khảo ở bảng dưới đây (ô trống là trường hợp giá trị trả về bằng FALSE):

isset trong PHP

Một ví dụ xử lý form login sử dụng cả isset empty một cách hiệu quả như dưới đây:

<?php
if(isset($_POST['login'])){
   
    if(empty($_POST['username'])) {
        echo "Bạn không được bỏ trống trường tên đăng nhập";
    }else{
        $username = $_POST['username'];
    }
     
    if(empty($_POST['password'])) {
        echo "Bạn không được bỏ trống trường mật khẩu";
    }else{
        $password = $_POST['password'];
    }
     
}
?>

Đoạn code trên sẽ giúp chúng ta kiểm tra dữ liệu form đảm bảo chỉ thực hiện xử lý login khi người dùng đã nhập đủ vào cả tên đăng nhập và mật khẩu.

Kết bài

Isset là một hàm quan trọng trong PHP và được sử dụng rất nhiều trong thực tế khi viết code; nó giúp chúng ta kiểm tra xem một biến có tồn tại hay không. Sử dụng isset giúp bạn tránh được các lỗi liên quan đến việc truy cập biến và tối ưu hóa mã nguồn của bạn hơn. Bạn cũng nên nắm vững được các trường hợp trả về của cả 3 hàm isset, empty và is_null để có thể lựa chọn sử dụng một cách thích hợp. Hy vọng bài viết hữu ích dành cho bạn và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

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

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

Những điều không ai dạy bạn về ngành Phần mềm (Phần 1)

Những sự thật không ai dạy bạn về Ngành Phần mềm

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

Tại sao nên đọc bài này?

  • Để bạn có một cái nhìn đa chiều hơn về ngành phần mềm, không phải hoàn toàn là việc nhẹ lương cao như thằng em sn 96…
  • Một số sự thật khó tiêu hóa trong ngành phần mềm. Có khi nó giúp bạn nhận ra và unlock được một level mới.

Nội dung của bài viết này sẽ được dịch từ bài gốc ở trên, dĩ nhiên là dưới góc nhìn của mình, có thêm bớt khá nhiều. Tác giả cũng disclaim là đây cũng chỉ là góc nhìn chủ quan của tác giả. Tuy nhiên mình thấy đây là bài viết cực kì hay về ngành mà mình đang làm.

Bác nào giỏi tiếng anh thì nên đọc bài gốc và skip qua bài của mình cũng được nhé. Đọc xong back lại đây comment cũng được .

Gét gô!

Bạn hiếm khi được code thứ gì đó từ đầu

Khác với trường học, nơi mà mọi bài tập của bạn đều chỉ có đề bài mà một màn hình trắng xóa, bạn fill code vào, chạy thử, fix bug, nộp bài. Dù đó có là học giải thuật hay là học một số môn lập trình thực tiễn hơn, hầu hết đều như vậy. Mục đích là thể hiện trình độ cá nhân của bạn.

Nhưng thực tế thì sao? *éo . Dù bạn mới ra trường, đi thực tập, đã đi làm được đôi ba năm hay thậm chí cả chục năm. Thứ ném vào mặt bạn là một project với vài ngàn dòng code (hoặc vài triệu) với vô vàn dấu chân của những dev trước để lại, có những người là thực tập, những người là junior, những người là senior… và bạn. Hiếm khi bạn được start một thứ gì đó từ zero.

Bạn coi tới coi lui đống code, check qua từng file, check lại document. Và bạn tốn cả 1 tuần để hiểu xem mấy ông dev trước làm gì (tất nhiên là vừa làm vừa chửi ) để rồi thêm 10 lines code vào để fix một bug bé tí nào đó.

Cuộc sống hằng ngày của Dev
Cuộc sống hằng ngày của Dev

Đó làm coder là vậy đó, hầu hết thời gian của bạn sẽ là sửa những gì đang chạy, thêm feature vào dựa trên một cục code base có sẵn.

  Những mẹo hay ho cho các Software Developers

  Những tựa sách nổi tiếng dành cho Software Developer - Phần 1

Kiến thức “ngành” (Domain knowledge) quan trọng hơn kĩ năng múa code

Mình thấy rất bất ngờ nếu mình hiều về một thứ gì đó thì việc coding của mình trở nên rất đơn giản. Mọi thứ chạy như thế nào, và tại sao nó lại cần chạy như vậy.

Ví dụ khi code app ngân hàng/fintech thì bạn tốt nhất nên hiểu transaction chạy như thế nào, sổ cái hoạt động ra sao

Khi build một hệ thống PoS (Poin of sale – mấy phần mềm để tính tiền, gọi món ở quán Trà sữa, nhà háng á) thì bạn nên tìm hiểu xem tụi nhà hàng nó hoạt động thế nào, chia ca, tồn kho, rồi còn các bước để quẹt thẻ,…

Và nó đúng với hầu hết các ngành khác như Y tế, Logistic, Xây dựng,..

Cuộc sống hằng ngày của Dev

Nếu mà không có mớ kiến thức ngành đó, bạn sẽ rất dễ bị lạc. Kiểu như bạn sẽ bị struggle vì mình chỉ code theo task thôi mà không hiểu ý nghĩa công việc của mình ở đâu á, chả biết mình code có đúng không, chả biết nó chạy ở đâu, chả biết nó đóng góp gì cho biz đang chạy ngoài kia, và bạn sẽ chả biết… thứ bạn làm có value ở đâu cả.

Mình đã nhận ra điều này là thực sự quan trọng đối với mình trên con đường làm phần mềm, nó khiến mình buồn khi user dùng app mà bug, nó khiến mình vui khi có ai đó dùng phần mềm mình làm và khiến cuộc sống của họ dễ dàng hơn, nó khiến mình tự hào khi có ai đó nhắc tới phần mềm mà mình đã làm. Việc vui buồn đó, phần nào, khiến cho mình kết nối với những dòng code và công việc nhiều hơn!

Ngoài ra kiến thức ngành cũng là một vũ khí cực kì tốt giúp bạn dễ dàng sống sót hơn ở ngành phần mềm. Kiểu như nếu bạn đã biết kiến thức ngành về banking thì rất dễ cho bạn kiếm một công việc khác tương tự và dĩ nhiên, có lương cao hơn.

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

Viết document không được đề cao lắm

Okey, back lại trường đại học thì họ nhấn mạnh vào việc coding, giải thuật nhiều hơn là việc viết ra những dòng code, bạn và đồng nghiệp đều hiểu, và viết cả document cho nó.

Viết document không được đề cao lắm
Có 2 lý do khiến việc document nên được coi trong hơn khi đi làm
  • Như đầu bài đã chia sẻ, bạn hiếm khi được code một thứ mới, do đó nếu bạn viết clean code hay có một document ngon lành sẽ giúp ích cho bạn, và những người sau bạn tiếp tục với cục code base hiện tại.
  • Đi làm là làm việc theo nhóm, và bạn sẽ không được làm solo nữa. Nên bạn phải từ bỏ suy nghĩ tất cả đều đã được lưu lại trong đầu mình, mà phải share chung cho cả team.
Cá nhân mình thì thấy viết code clean là khá ổn rồi, dành thời gian để document lại những thứ liên quan tới kiến thức ngành (Domain knowledge) hay Overview của hệ thống

Code là thứ Hai, kiếm được tiền mới là Chủ Nhật

Sẽ méo có ai tới và vỗ vào vai bạn nói rằng “VKL, làm được được việc đó trong 1 dòng code hả” (okey, thực ra ngoài đời thì vẫn có thôi, chỉ là mấy ông làm chung ngành nâng bi nhau ), mà thay vào đó họ sẽ nói kiểu “Hey ku, user thích cái feature may mới làm lắm” hay tệ hơn là “Thằng , m deploy cái gì mà sập cả website kìa”

Đôi khi nó nghe khá là WTF, nhưng

Công việc chính của Software Developer không phải là viết code mà là tạo ra value thông qua qua software, thứ mà họ đã viết

Code chỉ là công cụ để bạn tạo được value. Code → Software → Value

Thứ bạn viết ra, phải phục vụ một mục đích nào đó cho thế giới – một công cụ gì đó, hay là một đoạn automation giúp giảm chi phí, bất cứ thứ gì, mà có người chịu trả tiền cho nó (có thể bằng thời gian, tiền bạc hay sự chú ý).

Nếu bạn build ra một thứ gì đó với đống công nghệ như  nhưng mang lại value cho users – bạn phục vụ một nhu cầu tất yếu của một software engineer. Nếu bạn build ra một thứ gì đó với mớ công nghệ cool ngầu nhưng éo ai thấy nó có value – xin lỗi tôi và bạn không cùng ngành.

Software Developer

Code clean, follow best practice, design pattern – mớ đó để giúp cho cuộc sống của những ông dev sau bạn đỡ vất vả hơn chứ mục đích tối thượng của nó không phải là tạo ra value. À dì nhiễn cũng giúp cho cuộc sống của bạn sau này dễ thở hơn, và cũng không phải bị những người sau vừa fix bug mà vừa đọc thầm tên bạn và … chửi.

Xem thêm Làm thế nào tôi trở thành một Software Developer tại Twitter?

Bạn sẽ phải làm việc với những thứ/người gà vkl

Trong môi trường làm việc, bạn sẽ phải làm chung với những người mà theo bạn nghĩ là “gà vkl”, nào thì code toàn bug, nào thì API không lúc chạy được lúc không, nào là design mỗi chỗ một màu khác nhau, hay lâu lâu con bé QA dở người,… Có khi đó là output của một người cùng công ty, có khi nó là ouput của khách hàng – một bên thuê bạn.

Nói chung thì bạn sẽ thấy khó chịu vkl thì phải đối mặt với những tình huống như vậy. Nó tạo ra một môi trường toxic, unproductive, poor decisions.

Tao (tác giả gốc, không phải mình) đã dành rất nhiều thời gian để tìm cách đổi phó với những loại người như vậy mà không phải trở thành một thằng , đáng ra trường đại học phải dạy cho mình mấy cái này chứ nhỉ?!

Software Developer

À có một cách tao (tác giả) ngộ ra là hãy tự tập trung vào công việc của bản thân và kệ người khác đi. Tìm một giải pháp thay thế nào đó hợp lý hơn và đừng có dây vào những người kém productive. Viết document thì cũng khá hữu ích, nó có thể trở thành “Bằng chứng thép” để cáo với sếp về mấy người unproductive đó .

Cuối cùng, cách tốt nhất để “đối phó” với mấy người đó là

  • Tìm một giải pháp hay người nào đó có thể giúp mình
  • Nhờ vả những người chuyên môn cao hơn làm task đó hộ mình
  • Implement một số giải pháp kiểu code của tụi nó có hư thì bên mình cũng không bung bét ra (failsafe, fallback)
  • 1-1 meeting với người đó và nói với họ là họ làm chậm process ntn
  • Okey, không cần phải trở thành một thằng  để chiến tranh với họ

Phần này mình dịch hoàn toàn như bên bài viết gốc. Còn đối với mình, thực tế mình đã từng rất nhiều rơi vào tình cảnh như vậy. Phần dưới là input thêm từ mình

Có lúc mình làm với Backend code api lúc up lúc down, mình khó chịu mình chửi thầm, có lúc mình làm với Design mà lệch alignment, mình khinh thường mình chửi họ, rồi cũng có lúc mình làm việc với QA và PM và mình code bug, họ là chê output của mình. Ồ mình nhận ra nếu bạn trong team nào thì bạn sẽ luôn luôn chê input của mình, và bị chê bởi output của mình.

PM → BE → FE → QA → PM

Và mình nhận ra mình khó chịu vì nó tổn hại tới cái tôi của mình. Nếu mà BE làm trễ deadline và mình sẽ cũng bị trễ theo, và mình đổ lỗi cho BE, để nuôi dưỡng cái tôi, để feel good vì do mày nên tao không làm được, chứ tao tốt đẹp vl . Đó đã có lúc mình suy nghĩ như vậy, nhưng được làm việc với nhiều team hơn, thử thực sự làm BE hay làm QA mình nhận ra một điều:

Mọi thứ luôn luôn broken ở software.

Mình không rành ngành khác như thế nào, nhưng đối với software, nó là soft, nên nó có thể tháo rất nhanh phần hư ra, hoặc fix phần hư rất nhanh. Nên ngành này vận hành theo cơ chế là ship một thứ gì đó chạy được cơ bản rất nhanh, rồi vừa chạy vừa fix. Do đó, sẽ luôn luôn có thứ broken. Và việc của mình không phải là đổ lỗi cho BE, Design hay PM làm broken, mà là khiến mọi thứ tiến về phía trước. Mình đồng ý với việc sẽ có lỗi từ BE, sẽ có lỗi từ Design, và cũng đồng ý với việc mình sẽ code bug, đôi khi sẽ bị QA dí như  vì mình cũng tệ vậy. Và mình hướng tới việc làm sao để mọi người trong team phối hợp tốt hơn, và nếu là một lỗi sảy ra, thay vì đi tìm người gây ra cái bug đó, thì mình tìm cách để nó không xuất hiện lần thứ 2 hay thứ 3 như vậy nữa.

Mục tiêu chính của mình là deliver cái software đó, không phải là nuôi dưỡng cái tôi “thanh cao” của bản thân tôi thì tốt đẹp còn những người xung quanh thì tệ vkl.

Vậy đó, software luôn luôn broken, mà broken thì mới có việc để làm chứ không thì AI code hết mọe rồi.

À một point thứ 2 là đôi khi do một người trong team broken, hay thậm chí là khách hàng broken thì mình nghĩ là đơn giản thôi: CẮT. Nếu trong team thấy một người như vậy thì mình sẽ nói với họ và để họ thử và nếu họ không survive được thì chắc là “chúng ta không thuộc về nhau”. Ngay cả khách hàng cũng vậy, mình đã từng stoploss với 2-3 client vì làm việc không chuyện nghiệp

Wait, lỡ mình không có power cao bằng người ta nên mình không “chia tay” người ta được thì sao? Thì mình tự nói với bản thân rằng, thôi nếu vậy hạn chế chơi với ông này, đợi khi nào power mình cao hơn rồi tính vậy. Dù gì thì phải có lý do gì đó mà khiến ông đó có power cao hơn mình chứ, lỡ ông đó giỏi tiếng anh hơn mình thì sao, lỡ ông đó kì này có chuyện buồn gì sao,… chả ai muốn mình là broken person trong team cả, hẳn họ có một nỗi niễm gì đó,… Hoặc họ gà thật :)))

Thôi thì không thể thay đổi được thế giới, thử thay đổi bản thân vậy

Kết

Đầu năm nói những thứ phũ phàng khi đi làm chắc không đúng vibe lắm, nhưng dù muốn dù không thì bạn cũng sẽ phải đối mặt với nó, nếu bạn đi làm phần mềm. Thường bạn sẽ nghe tới ngành IT là lương chăm triệu, tháng làm 2-3 jobs, gái theo xếp hàng,… nhưng hiếm ai nói cho bạn những phần bên dưới của tảng băng – những sự thật khi đi làm.

Nghề gì cũng vậy, phải khó khăn thì mới có việc để làm, phải có khó khăn thì bản thân mới thể hiện được giá trị của mình chứ hả?

Còn tiếp…

>>> Xem thêm: Things they didn’t teach you about Software Engineering

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

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

Tìm việc làm IT mọi cấp độ tại TopDev

Sử dụng map, filter và reduce trong Javascript như nào cho đúng?

map filter và reduce trong Javascript

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

Vấn đề

Dữ liệu được lưu trữ trong cơ sở dữ liệu thường phải được chuẩn hóa để giảm dung lượng và tăng tốc độ truy vấn, Vì thế sau khi lấy ra thường phải qua nhiều phép biến đổi dữ liệu thì mới có thể dùng để xử lý logic tiếp được.

Lập trình FE, đặc biệt là lập trình dựa trên những Framework hiện đại như Angular, React, Vue… việc tạo ra những đối tượng để lưu trạng thái (state) của ứng dụng đòi hỏi khả năng xử lý dữ liệu nhiều hơn nữa. Bởi vì những trạng thái này là thay đổi liên tục phụ thuộc vào logic hiển thị và thao tác người dùng.

Những dữ liệu trên thông thường được lưu trữ trong Object hay Array, chính vì thế kể từ ES5 tung ra bộ ba mapfilter và reduce để giúp chúng ta xử lý dữ liệu mảng một cách hữu ích hơn rất nhiều.

  15 ví dụ sử dụng map, reduce và filter

  Một vài ứng dụng hay ho của reduce

map, filter và reduce

Hàm map duyệt qua mảng, và trả về một mảng có số lượng phần tử bằng đúng với số lượng phần tử mảng ban đầu. Các phần tử được trả về thông qua return.

Ví dụ:

const arr = [1, 2, 3];
const arr2 = arr.map(function (item) {
  return item + 1;
});
// [2, 3, 4]

Hàm filter cũng duyệt qua mảng, trả về một mảng mới với các phần tử thỏa mãn một điều kiện true/false.

Ví dụ:

const arr = [1, 2, 3];
const arr2 = arr.map(function (item) {
  return item > 1;
});
// [2, 3]

Reduce duyệt qua mảng, thực hiện tính toán trong hàm callback.

Ví dụ:

const arr = [1, 2, 3];
const sum = arr.reduce(function(accumulator, currentValue) {
  return accumulator + currentValue;
}, 0);

reduce là hàm nâng cao nên độ khó cao hơn khi bắt đầu. Tuy nhiên bạn có thể nhanh chóng sử dụng thành thạo chúng thông qua một vài ví dụ tại Reduce Syntax.

Cú pháp đầy đủ của reduce là:

reduce((accumulator, currentValue, currentIndex, array) => {
    /* … */
}, initialValue)

Với accumulator là giá trị tích lũy, giá trị tích lũy ban đầu sẽ bằng initialValuecurrentValue là phần tử trong mảng ở lần lặp hiện tại, tương tự currentIndex là vị trí phần tử và array là mảng ban đầu. initialValue là giá trị khởi tạo.

Đầu ra của map và filter luôn luôn là một mảng, chính vì thế nếu thấy chúng xuất hiện thì chắc chắn đầu ra phải là một thứ “có thể lặp”. Điều này rất quan trọng, vì nó giúp tạo nên tính cam kết và khả năng liền mạch trong khi kết hợp nhiều hàm với nhau khi xử lý.

const arr = [];
arr.map().filter().map()...

Bạn có thể dùng ngay filter ngay sau map mà không lo lắng rằng kết quả của map trả về nullundefined… bất kì thứ gì đó mà “không thể lặp” qua.

Việc làm Javascript lương cao trên TopDev

Một vài trường hợp sử dụng

Có rất nhiều trường hợp bạn cần dùng đến bộ 3 này, khi nào cần biến thêm/thắt hay thay đổi thuộc tính trong mảng thì dùng map, khi nào cần lọc dữ liệu trong mảng thì dùng filter còn khi nào muốn trả về một kết quả cần tổng hợp từ mảng thì dùng reduce.

Tóm lại là khi làm việc với dữ liệu là mảng thì hãy nghĩ đến bộ ba này đầu tiên, dần dần bạn sẽ biết cách dùng thành thạo. Điều này giúp bạn viết ra đoạn mã ngắn gọn hơn.

Một số trường hợp tiêu biểu mình sử dụng là trong xử lý dữ liệu nhận từ API.

Dữ liệu nhận từ API về là dữ liệu “thô”, gọi như thế bởi vì cần qua một vài bước xử lý nữa thì mới thành dữ liệu “chuẩn” để hiển thị lên trang web được, lúc đó chúng ta có thể sử dụng mapfilter hoặc reduce để thêm, bớt, sửa đổi hay lọc dữ liệu trong mảng.

Thứ hai là dữ liệu được lấy ra trong cơ sở dữ liệu (database). Đây là dữ liệu được tối ưu hóa để lưu trữ vì thế trong lúc xử lý những logic bạn vẫn cần phải thêm thắt nhiều nữa mới ra dữ liệu chuẩn. Một ví dụ tiêu biểu cho trường hợp này là định dạng lại dữ liệu trả về cho client thông qua API.

Thứ ba là dữ liệu tạo ra để phục vụ cho mục đích xử lý logic. Loại dữ liệu này được tạo ra trong quá trình xử lý logic của bài toán nào đó. Trong quá trình tính toán thì việc biến đổi dữ liệu có thể xảy ra thường xuyên. Việc vận dụng mapfilter và reduce thành thạo có thể giúp bạn xử lý vấn đề với số lượng mã ít hơn.

Ngoài ra, có rất nhiều hàm mà Javascript cung cấp khi thao tác với mảng như findfindIndexindexOf… Những hàm này hoàn toàn có thể thay thế bởi bộ ba mapfilter và reduce. Tuy nhiên nếu có thể hãy sử dụng chúng để tăng tính minh bạch cho mã.

Tổng kết

Bộ ba mapfilter và reduce là trợ thủ đắc lực khi làm việc với dữ liệu mảng. Biết cách vận dụng chúng phù hợp giúp bạn giảm được thời gian viết mã đồng thời giúp mã ngắn gọn hơn.

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

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

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

Có nên xin việc vào cuối năm? Cơ hội hay rủi ro?

co-nen-xin-viec-vao-cuoi-nam

Có nên xin việc vào cuối năm? Cuối năm thường được coi là thời điểm khó khăn để đi tìm việc làm, vì đa số các công ty thường đang rất bận rộn để hoàn thành những việc cũ và lên kế hoạch cho năm mới. Thế nhưng, quan điểm này không hoàn toàn đúng, vẫn có những doanh nghiệp sẵn sàng tiếp nhận hồ sơ xin việc mới nếu bạn phù hợp với vị trí họ đang tuyển.

Vậy, việc tìm kiếm việc làm vào cuối năm sẽ mang lại cơ hội hay chỉ là một rủi ro khó lường? Bài viết sẽ cung cấp cái nhìn chi tiết về vấn đề này, đồng thời chia sẻ chiến lược để xin việc cuối năm một cách hiệu quả.

Cơ hội tuyệt vời khi tìm việc làm cuối năm

Có nên xin việc vào cuối năm

Cuối năm là thời điểm nhiều công ty tuyển dụng để bổ sung nhân lực cho năm mới. Đây là thời điểm “vàng” cho người lao động tìm việc làm vì những lý do sau:

  • Kế hoạch cho năm mới: Cuối năm, các công ty thường bắt đầu lên kế hoạch cho năm tiếp theo. Điều này tạo ra một cơ hội tuyệt vời cho ứng viên mới, vì họ là những nhân tài mà các công ty đang tìm kiếm để cùng nhau đạt được mục tiêu trong năm sắp tới.
  • Số ứng viên apply siêu ít: Đây là một trong những cơ hội lớn nhất khi tìm việc làm cuối năm. Theo một khảo sát, chỉ có khoảng 20% người lao động tìm việc làm vào cuối năm. Điều này có nghĩa là số ứng viên cho mỗi vị trí sẽ ít hơn so với các thời điểm khác trong năm, giúp người lao động tăng cơ hội được tuyển dụng.
  • Khoản ngân sách dành riêng: Các doanh nghiệp hiểu rõ tâm lý của những người đang làm việc là không muốn chuyển việc vào cuối năm để không mất lương thưởng. Do đó, nhiều công ty đã dành ngân sách riêng để bù đắp cho những khoản thưởng mà bạn sẽ không nhận được từ công ty cũ.
  • Được chờ đợi đến khi bàn giao công việc: Nếu bạn thật sự rất thích hợp với công ty mới, thì nhà tuyển dụng cũng sẽ sẵn sàng chờ bạn đến khi bạn bàn giao xong, đủ thời gian an toàn cho bạn nhận các khoản thưởng từ công ty cũ. Điều này sẽ giúp bạn có thể chuyển việc mà không phải lo lắng về vấn đề tiền bạc.

  5 bí quyết tìm việc IT cho đợt tuyển dụng đầu năm mới

  Cảnh báo 6 'red flags' khi tìm việc mà bạn nên tránh ngay

Những rủi ro tìm ẩn khi xin việc cuối năm

Bên cạnh những cơ hội trên thì việc xin việc cuối năm cũng tiềm tàng nhiều rủi ro, dưới đây là một số rủi ro bạn cần lưu ý:

Chất lượng công việc không đảm bảo

Một số công ty tăng cường tuyển dụng vào thời điểm này để đáp ứng nhu cầu tạm thời và áp lực sản xuất trong mùa lễ tết. Điều này có thể dẫn đến việc công việc không phù hợp với mục tiêu nghề nghiệp của ứng viên.

Ví dụ, một công ty bán lẻ có thể cần tuyển thêm nhân viên bán hàng thời vụ để phục vụ nhu cầu mua sắm tăng cao trong dịp Tết. Tuy nhiên, công việc này có thể chỉ kéo dài trong vài tháng và mức lương, chế độ đãi ngộ cũng có thể không hấp dẫn như công việc chính thức.

Cơ hội được gọi phỏng vấn thấp

Cơ hội được gọi phỏng vấn thấp

Vào cuối năm, do nhu cầu không quá nhiều, nhà tuyển dụng có thể sẽ khó tính hơn trong việc lựa chọn ứng viên phỏng vấn. Điều này có thể làm cho cơ hội bạn được gọi phỏng vấn trở nên thấp hơn.

Nhà tuyển dụng dành ít thời gian hơn cho ứng viên

Ở thời điểm cuối năm, công việc thường đang trong giai đoạn bận rộn, với nhiều nhiệm vụ như tổng kết kết quả, lập kế hoạch cho năm sau,… Điều này có thể làm cho thời gian của các nhà tuyển dụng bị ít đi và họ thường không có thời gian để xem xét quá nhiều hồ sơ ứng viên.

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

Bí quyết tìm việc cuối năm bao đậu

Để tìm kiếm việc làm vào cuối năm một cách hiệu quả, có những bí quyết quan trọng mà bạn nên áp dụng:

Luôn chủ động tìm việc làm mới

Dù là bất kỳ thời điểm nào trong năm, sự chủ động và quyết tâm là chìa khóa quan trọng trong việc tìm kiếm việc làm. Cuối năm, cơ hội có thể giảm do mức đãi ngộ hấp dẫn không nhiều, bạn càng cần phải nhanh chóng nắm bắt cơ hội trước sự cạnh tranh cao từ các ứng viên khác. Tìm kiếm trên các trang mạng xã hội như Facebook, Linkedin cũng là lựa chọn đáng xem xét.

Luôn chủ động tìm việc làm mới

Hãy chủ động tìm kiếm thông tin tuyển dụng trên các trang web tuyển dụng, mạng xã hội hoặc thông qua các mối quan hệ của mình. Khi tìm thấy một vị trí phù hợp, hãy nhanh chóng nộp hồ sơ để tăng cơ hội được tuyển dụng.

Có định hướng rõ ràng vị trí bạn muốn ứng tuyển

Để tăng cơ hội thành công, hãy xác định rõ mục tiêu nghề nghiệp và định hình cụ thể về vị trí mà bạn muốn ứng tuyển. Hiểu rõ về công việc, kỹ năng yêu cầu, và xác định mục tiêu sẽ giúp bạn tự tin và chuẩn bị tốt hơn cho quá trình ứng tuyển.

Chuẩn bị thật tốt CV và các kỹ năng công việc liên quan

Việc chuẩn bị CV là một yếu tố quan trọng trong quá trình xin việc. Đảm bảo rằng CV của bạn chứa đủ thông tin cần thiết như thông tin cá nhân, trình độ học vấn, kinh nghiệm làm việc, và kỹ năng là một bước quan trọng để gia tăng cơ hội được phỏng vấn thành công. Thiết kế CV cũng đóng vai trò quan trọng, cần phải bắt mắt, dễ đọc và phản ánh cá tính của bạn. Bạn có thể sử dụng công cụ hỗ trợ làm CV online của TopDev giúp bạn nhanh chóng có một CV chuẩn developer, chuyên nghiệp và tiện lợi.

Chuẩn bị thật tốt CV

Ngoài ra, đối với kỹ năng chuyên môn, chúng là không thể thiếu khi bạn muốn ứng tuyển vào các vị trí công việc. Không chỉ cần quan tâm đến kỹ năng trực tiếp liên quan đến công việc mà bạn đang nắm giữ, mà còn cần chú ý đến kỹ năng mềm như giao tiếp, làm việc nhóm, và tin học văn phòng. Đây là những yếu tố quan trọng mà nhiều nhà tuyển dụng đánh giá cao ở ứng viên.

Qua bài viết này, TopDev đã giúp bạn trả lời cho câu hỏi có nên xin việc vào cuối năm. Chúc bạn sớm tìm được công việc ưng ý trong dịp cuối năm này. Đừng quên truy cập TopDev để tìm kiếm các cơ hội việc làm IT hấp dẫn bạn nhé!

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

Xem thêm Top tìm việc IT lương cao HOT nhất trên TopDev

Tự học Node.js thì bắt đầu từ đâu? Học Node.js có khó không?

Tự học Node.JS bắt đầu từ đâu? Lộ trình học như thế nào?

Vấn đề

Node.js hiện nay đang là một nền tảng thực sự hấp dẫn chính vì thế ngày càng có nhiều người theo học nó. Thống kê của Stackoverflow cho thấy năm 2021 Javascript (JS) dẫn đầu trong bảng xếp hạng công nghệ phổ biến trên nền tảng của họ và Node.js đứng ở vị trí thứ 6 xếp sau Java. Điều này cho thấy sức nóng của Javascript cũng như Node.js chưa hề dừng lại.

 Tự học Node.js thì bắt đầu từ đâu?

Nhiều công ty tuyển dụng Node, nhiều sản phẩm hay công cụ bằng Node ra đời cũng cho thấy mức độ quan tâm rất lớn của các nhà tuyển dụng đối với nó. Một công nghệ khi càng phổ biến, cộng đồng càng lớn thì độ phủ sóng cũng như mức độ tin cậy sẽ càng cao.

Nếu là một lập trình viên FE và làm việc với JS là một lợi thế rất lớn để chuyển qua vị trí lập trình Node. Bởi suy cho cùng Node là môi trường chạy mã Javascript, chỉ khác ở chỗ thay vì tương tác với DOM trên trình duyệt thì ta dùng JS để tương tác với file, cơ sở dữ liệu… nhiều hơn mà thôi.

Nhưng với những người mới bắt đầu lập trình chưa có nhiều kinh nghiệm lẫn kiến thức, hay lập trình viên FE muốn thử sức với BE thì nên tiếp cận như thế nào? Bài viết ngày hôm nay tôi xin phép chia sẻ kinh nghiệm của tôi cho những ai đang trên đường chinh phục Node, tuy chỉ là quan điểm cá nhân nhưng hy vọng sẽ giúp ích cho mọi người.

Cần hiểu rõ bản chất của Node.js

Node.js không phải là một ngôn ngữ, nó là một môi trường cho phép chạy mã Javascript “bên ngoài trình duyệt” và hơn thế nữa. Thử tưởng tượng nếu trình duyệt cho phép bạn chạy mã JS thì Node.js cho phép bạn chạy mã JS trên máy chủ. Có thể nói Node.js ở đây có vai trò tương đương như trình duyệt. Vì thế để học Node.js tối thiểu bạn cần có kiến thức về JS.

Một điều thuận lợi là tài liệu về JS rất nhiều, cộng đồng phát triển JS cũng rất đông nên bạn không cần phải lo lắng quá nhiều về việc tìm kiếm sự trợ giúp. Đơn giản với một từ khoá “tự học javascript/node.js” đã có rất nhiều những video, bài viết, khoá học… rồi.

Lập trình BE sẽ có phần khác với lập trình FE. Lập trình BE bạn sẽ phải tương tác với file nhiều hơn (đọc/ghi dữ liệu), tương tác với cơ sở dữ liệu (database) và nhiều logic xử lý dữ liệu rất khác với FE. Bạn chỉ có thể biết nhiều hơn bằng cách học và làm. Học đến đâu thì làm đến đó, có thể ngay từ đầu code không được tốt nhưng qua thời gian rèn luyện sẽ dần được cải thiện.

  Child process trong Node.js là gì? - Khi nào cần sử dụng fork và spawn?

  Kỹ thuật debug ứng dụng viết bằng Node.js hiệu quả

Các cách tiếp cận với Node.js hiện nay

Một người làm Back-end (BE) lâu năm bất kể là ngôn ngữ nào thì đối với họ đó là một điểm cộng rất lớn vì họ đã có sẵn tư duy lập trình, họ tự biết cách để chuyển những điều đó sang làm việc với Node.js. Có chăng khó khăn ban đầu là sự khác biệt giữ cú pháp, vấn đề này hoàn toàn có thể khắc phục được theo thời gian. Ngoài ra mỗi ngôn ngữ luôn có những tính năng đặc trưng nên cần bỏ thêm thời gian để nhuần nhuyễn những điều đó.

Một người làm Front-end (FE) cũng có thể chuyển sang BE bằng cách tiếp xúc với một dự án BE sẵn có. Chỉ cần trình bày cấu trúc dự án rồi giải thích cách hoạt động của dự án thì đã có thể làm theo để tạo những chức năng đơn giản đến phức tạp. Đây là một cách tiếp cận nhanh chóng thế nhưng vẫn cần phải bỏ ra thời gian để nghiên cứu thêm kiến thức về BE, nếu không rất có thể bạn sẽ bị hổng những kiến thức nền tảng quan trọng.

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

Còn đối với những người chưa hề có kinh nghiệp lập trình thì sao? Có thể họ sẽ tìm kiếm các khoá học về Node.js. Thời đại bùng nổ công nghệ thông tin việc tìm kiếm các nguồn tài nguyên học tập không mấy khó khăn, các chủ đề nói về node rất là nhiều, miễn phí và trả phí đều có. Nếu tìm được một người “thầy” hỗ trợ thì rất tốt, họ sẽ cho bạn những hướng đi để đến đích nhanh hơn. Khi gặp vấn đề họ cũng là người gỡ rối. Nhưng họ không thể mãi chỉ cho bạn từng li từng tí mà bạn cần phải tự thân vận động thì mới tiến bộ được.

Bằng cách nào đi nữa thì nổ lực học hỏi của bạn vẫn là quan trọng nhất. Nhiều bài viết, bài giảng đi theo một cấu trúc nhất định, nếu chỉ học ở trong đó chưa chắc đã là đủ. Kiến thức của lập trình rất nhiều và chúng móc nối với nhau. Liên tục vượt ra vùng an toàn để học những kiến thức mới, đừng để bị thụ động vấp mới bắt đầu học. Nên nhớ bản thân các công nghệ nói chung hay Node.js nói riêng đều được cập nhật hàng ngày, kiến thức bạn học hôm nay có thể ngày mai đã bị lỗi thời.

Lời khuyên cho lộ trình học tập

Trước tiên hãy đầu tư thời gian để học kiến thức cơ bản về Javascript, đó là cơ sở để học tiếp các kiến thức nâng cao sau này.

Có một trang tài liệu về Javascript khá đầy đủ và chi tiết mà không cần phải tìm kiếm đâu xa là Mozila. Có thể nói Mozila là một trong những ông lớn trong làng trình duyệt đời đầu của giới web thế nên việc Mozila cung cấp tài liệu về Javascript là hết sức uy tín.

Các bạn có thể đọc thêm bài viết Giải ngố: Mozilla/5.0 là gì? Tại sao trình duyệt nào cũng có chuỗi này trong User-Agent? để thấy tầm ảnh hưởng của Mozila.

Mozila cung cấp đầy đủ và chi tiết các bài viết về Javascript từ cơ bản đến nâng cao. Bạn sẽ được học từ các câu lệnh cơ bản của JS, về Object, bất đồng bộ (asynchronous) đến đi sâu vào các thành phần cấu tạo của Javascript như kiểu dữ liệu, ClosureEvent loop… Các tài liệu sẽ có tính tham chiếu (reference) đến nhau nên hãy thận trọng trong khi tìm kiểu cẩn thận bị quá tải. Lời khuyên của tôi là hãy đọc tài liệu tham chiếu nhiều nhất nếu có thể để hiểu rõ hơn về các miền kiến thức liên quan đến nhau.

Có một số người sẽ thắc mắc đọc nhiều làm gì vì chưa chắc đã dùng hết. Đúng vậy, kiến thức về JS rất nhiều chưa chắc chúng ta cần phải áp dụng hết. Tuy nhiên bạn vẫn nên đọc để có góc nhìn bao quát, xem nó có gì để sau này tiện nghiên cứu hoặc gặp một bài viết hay vấn đề nào đó mà có liên quan thì sẽ biết cách tìm kiếm tài liệu.

Sau khi học xong JS, bước tiếp theo là học Node.js. Node.js là môi trường chạy mã JS nên nếu nắm vững JS thì không còn là vấn đề. Nodejs.dev là một trang dạy cách sử dụng Node.js theo phong cách Step-By-Step mà đơn giản để bắt đầu.

Nếu cảm thấy quá khó hãy thử tìm một “starter project”. Đó là những khung project được tạo ra cho bạn bắt đầu viết mã. Xây dựng dự án theo khung và dành thời gian tìm hiểu cách hoạt động của nó. Làm đến khi tự dựng được một khung mà không cần dựa vào ai cả.

Học không thể không đi đôi với hành. Trong quá trình học nên tự tạo cho mình một dự án để vừa học vừa làm. Làm nhiều thì sẽ hình thành kinh nghiệm, mà kinh nghiệm càng dày dặn thì chắc chắn bạn sẽ chinh phục Node.js vào một ngày không xa.

Một ngày nào đó bạn sẽ nhận ra học mỗi Node.js là chưa đủ để trở thành một BE Developer. Còn rất nhiều thứ mà bạn cần khám phá và bạn cần có một lộ trình chi tiết. Roadmap.sh Backend là một lộ trình đầy đủ để giúp bạn trở thành một lập trình viên BE chuyên nghiệp.

 Tự học Node.js thì bắt đầu từ đâu?

Tại đây bạn sẽ được cung cấp một lộ trình kiến thức cần phải học để đạt được mục đích cuối cùng là trở thành một BE Developer. Có rất nhiều thứ được nêu ra trong ảnh có thể khiến bạn bị choáng ngợp. Nhưng hãy bình tĩnh, không ai có thể trở thành chuyên gia trong ngày một ngày hai. Hãy từ từ tìm hiểu từng thứ một, như tôi đã nói không chắc là bạn phải biết cách áp dụng hết kiến thức đã học mà cần phải biết đến với thế giới BE thì có những gì. Để sau này gặp phải vấn đề còn biết cách tìm kiếm để giải quyết.

Cuối cùng, sự quyết tâm của bạn là tất cả, thành hay bại là do bạn tự quyết. Con đường học hành không bao giờ là dễ nhưng quyết tâm đủ lớn thì sớm muộn gì bạn cũng gặt hái được thành công.

Kết luận

Nhìn chung Javascript nói chung hay Node.js nói riêng không quá khó để bắt đầu. Những kiến thức cơ bản của chúng rất nhẹ nhàng và bạn có thể làm quen rất nhanh. Đó cũng là nền tảng để bạn tiếp cận với các kiến thức nâng cao sau này. Hãy nhớ muốn nhanh thì học cơ bản còn muốn giỏi thì phải học nâng cao.

Tự học là một quá trình dài và đòi hỏi sự kiên nhẫn. Tìm được một người “thầy” tốt là rất đáng trân trọng, còn không thì đường đi cũng chỉ hơi chông gai một tí. Nhưng bù lại bạn sẽ học cách làm chủ bản thân. Bạn có thể bỏ cuộc bất kì lúc nào nhưng sau những lần đó chỉ làm bạn quyết tâm hơn. Nếu vấp ngã hãy tự biết cách đứng dậy.

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

Xem thêm:

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

Phân tích xu hướng Nhân sự 2024, chiến lược nào là phù hợp?

Phân tích xu hướng Nhân sự 2024, chiến lược nào là phù hợp?

Bài viết được sự cho phép bởi tác giả Bùi Đoàn Chung

Cuối năm là thời điểm các công ty đưa ra các dự báo về các xu hướng hay những việc cần ưu tiên, tập trung trong nhân sự nói chung và các ngành khác nói riêng. Đáng chú ý, một số công ty đưa ra những báo cáo giá trị trên cơ sở khảo sát và nghiên cứu kỹ lưỡng từ khách hàng trong nhiều năm.

Với lịch sử gần 100 năm của ngành Nhân sự toàn cầu thì đó là những việc có thể xảy ra, thậm chí xảy ra thường xuyên. Ngày 26/9/2023, SHRM (hiệp hội Nhân sự Hoa Kỳ) kỉ niệm 75 năm thành lập. Hay thuật ngữ HRBP (Human Resources Business Partner) cũng đã được xuất hiện từ những năm 1997 (tương đương với 26 năm). Từ đó cho thấy rằng, so với thế giới, lịch sử ngành Nhân sự Việt Nam vẫn còn rất non trẻ và cần phải có thời gian để tiếp nhận, chuyển hoá và phát triển sao cho phù hợp với đặc điểm tình hình văn hoá, lịch sử, kinh tế và bối cảnh Việt Nam.

Bước sang năm 2024, tình hình kinh tế vẫn đang có nhiều nguy cơ tiềm ẩn và những vấn đề chưa được tháo gỡ. Các vấn đề về Nhân sự cũng đã và đang được bàn luận với các HR Trend, TA Trend, L&D Trend… với rất nhiều báo cáo và rất nhiều nguồn tham khảo. Nhưng điều cơ bản nhất mà mọi người có thể thấy là những việc này thường sẽ có vòng lặp lại (hình bên dưới là tổng hợp các HR ưu tiên 2021 từ nhiều nguồn khác nhau).

xu hướng nhân sự 2024
2021 HR PRIORITIES: A SUMMARIZED VIEW OF NINE SOURCES | BRIAN HEGER

Ở mục 5, Chung sẽ phân tích các báo cáo của Gartner từ 2021-2024 để mọi người có thể thấy rõ hơn những ưu tiên mà HR cần tập trung đối với tổ chức.

Do vậy, khi “đu trend” về Nhân sự có thể cần:

1. Am hiểu bản chất của các hoạt động Nhân sự tại Công ty để áp dụng cho đủ, đúng và quan trọng nhất là phù hợp (nguồn lực, thời gian, chi phí…).

Đôi khi, không phải cứ chạy theo cái mới, cái tiên tiến là tốt nhất bởi nó chỉ là hiện tượng, là sự nhất thời… không phải là các hoạt động để có thể tịnh tiến và thay đổi hoàn toàn bản chất công việc, lịch sử của ngành. Nhiều nơi đưa ra gần 20 xu hướng nhưng không rõ cái nào là quan trọng, là ưu tiên và buộc người đọc phải thật sự am hiểu mới có thể tận dụng được. Và cũng chỉ nên theo dõi các báo cáo từ các tổ chức lớn, uy tín.

2. Biết được đâu là các ưu tiên thật sự, các vấn đề cần cải thiện và cần bắt buộc phải thay đổi.

Ví dụ là công nghệ AI, là công nghệ giúp giải phóng thời gian làm việc hành chính của con người, là số liệu, là tư duy phân tích và sự sáng tạo… Như Bill Gates đã nói, trong khoảng 5 năm nữa, mỗi người đều sẽ có trợ lý AI hoặc theo như báo cáo của Diễn đàn kinh tế thế giới, đến năm 2027, 43% công việc của con người sẽ do máy móc đảm nhận. Hoặc tỷ lệ robot trên 10,000 công nhân của Trung Quốc hiện là 322, trong khi con số này ở Mỹ là 274. Và Hàn Quốc hiện đứng đứng đầu với 1.000 robot.

Hoặc các ưu tiên về Nhân sự không còn là tuyển người ồ ạt nữa mà là giữ chân, nâng cao hiệu quả nguồn lực, phát triển bền vững năng lực tổ chức… trên nền tảng văn hoá doanh nghiệp, thiết lập và duy trì mối quan hệ hiệu quả với các stakeholder (bên liên quan) trong và ngoài doanh nghiệp.

  6 Xu hướng quản trị nhân sự năm 2024

  [Update] Bắt nhịp 8 xu hướng tuyển dụng IT nổi bật trong năm 2023 – 2025

3. Các báo cáo thường là xu hướng quốc tế, xảy ra ngoài lãnh thổ Việt Nam.

Như đã phân tích ở trên, bối cảnh kinh tế Việt Nam, điều kiện sản xuất, phương thức sản xuất và cơ sở hạ tầng kỹ thuật, kể cả là kiến trúc thượng tầng (tư duy kinh tế thị trường…) còn nhiều hạn chế. Chưa kể đứng với các góc độ văn hoá còn nhiều vấn đề cần nghiên cứu kỹ lưỡng để áp dụng. Không phải cứ thẳng như “Tây” là được mà văn hoá Á Đông đề cao tình cảm giữa người với người. Không phải cứ áp dụng là được ngay mà cần rất nhiều thời gian. Cho nên, không phải cái gì mới là đưa vào, là đu trend rồi bảo là tốt thì không đúng. Cần phải hết sức thực tế, am hiểu doanh nghiệp, các nguồn lực và hoạt động Nhân sự trọng yếu. Giống như slogan (khẩu hiệu) của HSBC: Ngân hàng toàn cầu, am hiểu địa phương.

4. Cần theo dõi và đánh giá kỹ các báo cáo qua nhiều năm thì mới chính xác.

Nên tập trung nghiên cứu kỹ các báo cáo của một vài công ty lớn hoặc các tổ chức lớn rồi sau đó đối chiếu với tổ chức của mình để xem nó có thật sự đang xảy ra, hay chỉ là một hiện tượng nhất thời. Các ảnh hưởng về kinh tế thế giới đối với Việt Nam thường phải mất 3-6 tháng mới có các tác động rõ rệt, mạnh mẽ.

Còn trong Nhân sự, phần lớn được thừa hưởng từ các công ty toàn cầu, có vốn đầu tư nước ngoài tại Việt Nam để áp dụng vào Local (địa phương) sao cho phù hợp. Nhờ đó họ luôn đi trước, đón đầu và là người có thể tạo ra xu hướng về phúc lợi, công nghệ… như trong các cuộc khảo sát lương hàng năm của Mercer và Talentnet có nêu. Còn các công ty thuần Việt Nam thì những điều này cần nên tính toán cụ thể cũng như áp dụng sao cho phù hợp chứ không phải máy móc.

Xem lại Báo cáo thị trường IT Việt Nam năm 2023 do TopDev phát hành

5. Để hiểu rõ hơn điều này, chúng ta hãy cùng phân tích các ưu tiên về Nhân sự qua các năm của Gartner.

Nguyên tắc của sự phân tích này đều dựa trên bối cảnh và tình hình thực tế cũng như kiểm nghiệm lại những thay đổi trong suốt 4 năm vừa qua để có thể hiểu được kỹ hơn, sâu sắc hơn về những dự báo đó. Các báo cáo này đều chỉ ra được số lượng người tham gia khảo sát (mẫu = n) để đảm bảo độ tin cậy cũng như uy tín về kết quả phản hồi.

xu hướng nhân sự 2024
Top 5 Priorities for HR Leader 2021 – Gartner

Năm 2021 là tâm điểm của đại dịch Covid nên cần các ưu tiên liên quan đến sự thay đổi về năng lực, kỹ năng quan trọng nhất (68%) nhằm thích ứng với những sự thay đổi trong thời đại VUCA thời điểm đó. Các tổ chức cũng cần có sự thay đổi và thích ứng nhanh với những biến động từ bên ngoài nên cần ưu tiên (46%) về thiết kế lại tổ chức và quản lý sự thay đổi. Bên cạnh đó, đội ngũ quản trị và năng lực điều hành vẫn cần được ưu tiên (chiếm tới 44%).

Song song với nó là một hình thức chuyển đổi mô hình làm việc từ On-site (tại chỗ) qua hình thức làm việc Remote (từ xa) hoặc kết hợp (Hybrid) nhằm ứng phó và thích nghi với đại dịch (phần lớn là do không thể đi lại được…). Lúc này, trải nghiệm nhân viên cũng là điều cần ưu tiên vì cách thức làm việc thay đổi, tương tác trong công việc thay đổi, onboarding cũng được thực hiện từ xa… Ưu tiên này năm 2022 không còn trong top 5, nhưng đến 2023 thì nó quay trở lại trong Top 3.

xu hướng nhân sự 2024
Top 5 Priorities for HR Leader 2022 – Gartner

Bước sang 2022, các ưu tiên không có nhiều biến động với Top 3 vẫn là những điều đã được dự báo trước từ 2021. Chỉ có đa dạng, công bằng và hội nhập (DEI) được đưa vào ưu tiên thứ 5 vì lúc này các tổ chức bắt đầu nhận thức rõ ràng hơn về sự cần thiết phải cải thiện DEI và xem đó là một phần quan trọng của chiến lược tổng thể trước các yêu cầu về nguồn lực làm việc và sự thâm nhập sâu và rộng của lực lượng lao động mới – Gen Z.

xu hướng nhân sự 2024
Top 5 Priorities for HR Leader 2023 – Gartner

Vào năm ngoái, (2023), hiệu quả quản lý và lãnh đạo được coi trọng hơn cả (60%) trong khi thiết kế tổ chức và quản trị sự thay đổi vẫn hiện diện và vẫn là các ưu tiên quan trọng. Từ đó cho thấy, xác ưu tiên không thể dễ thay đổi trong một thời gian ngắn mà chẳng qua là đưa lên hoặc đặt lên trên trong từng thời điểm là nhiều hay ít.

Trước làn sóng Great Resignation (từ chức hàng loạt) năm 2021 và 2022 thì doanh nghiệp buộc phải tuyển dụng thay thế hoặc một phần là khó khăn chung của kinh tế toàn cầu nên sẽ dẫn đến các nhu cầu thay thế nguồn lao động hiện tại. Từ đó, ưu tiên tuyển dụng (Recruiting) đã trở thành ưu tiên thứ 4 với 46%. Và thực tế, năm 2023 cũng là năm tuyển nhiều nhưng không mấy hiệu quả vì có sự chênh lệnh về các yêu cầu, khả năng đáp ứng của cả hai bên.

Như đã dự đoán, 2024 là thời điểm còn nhiều khó khăn về kinh tế vĩ mô, các điều kiện khác còn chưa rõ tín hiệu. Các chỉ số kinh tế Mỹ, toàn cầu chưa có nhiều dấu hiệu tích cực và lạc quan. Do vậy, các dự báo cũng cần thận trọng và cân nhắc kỹ trong bối cảnh tiềm ẩn nhiều rủi ro, khó đoán và bất ngờ.

xu hướng nhân sự 2024
Top 5 Priorities for HR Leader 2024 – Gartner

Vì thế, Gartner họ tiếp tục đưa đội ngũ quản lý, lãnh đạo vào ưu tiên số một (75%), liên quan đến vai trò, trách nhiệm mới. Cũng trong năm này, Văn hoá tổ chức, công nghệ HR và việc quản trị sự nghiệp nhân viên cùng với sự linh hoạt nội bộ là những ưu tiên bên cạnh việc quản trị sự thay đổi mà năm nào cũng có.

xu hướng nhân sự 2024
Top 5 Priorities for HR Leader 2024 – Gartner

Từ đó chúng ta có thể thấy và kết luận rằng, bản chất HR không thay đổi nhiều mà chỉ là sự ưu tiên nhất thời trong từng thời điểm. Những việc thuộc về bản chất sẽ không thay đổi quá nhiều và nó vẫn luôn hiện diện đều đặn. Vì thế, việc đu trend cần có nền tảng và sự tìm hiểu kỹ lưỡng để áp dụng.

6. Các HR Việt Nam sẽ cần ứng phó như thế nào trong năm 2024

Kinh tế Vĩ mô và các điều kiện kinh tế, chính trị, văn hoá đang rất khó đoán. Chắc chắn tình hình không thể nào ấm lên ngay được và dù những người nào lạc quan đến đâu cũng cần cẩn trọng và không ngừng lắng nghe thị trường, quan sát và phân tích thông tin đa chiều để nhanh chóng thích hứng với những thay đổi sắp tới.

Việc của HR đôi khi không phải là làm những gì đó phải thật mới, thật khác biệt mới thành công mà là linh hoạt, uyển chuyển để giữ những gì đang tốt, những gì cần cải thiện hoặc có thể làm tốt hơn thì mới tập trung vào để làm. Mỗi năm, nhiệm vụ của Nhân sự chỉ là thay đổi hoặc thực hiện một số dự án lớn, chiến lược trọng tâm chứ không phải là làm quá nhiều hay điều gì cũng muốn làm.

Đây là một số gợi ý (theo cá nhân) về các hoạt động ưu tiên của Nhân sự Việt Nam trong 2024:

  1. Nâng cao năng lực và hiệu quả điều hành hoạt động của đội ngũ quản lý và điều hành doanh nghiệp. Trong đó, đặc biệt cân ưu tiên đội ngũ quản lý cấp trung với nhiều năng lực và toàn diện hơn.
  2. Xây dựng văn hoá tổ chức và các chuẩn mực hành vi nhằm tăng cường sự hài lòng của khách hàng bên trong lẫn bên ngoài (Stakeholders).
  3. Ứng dụng công nghệ vào và thúc đẩy quá trình chuyển đổi số trong Công ty, HR.
  4. Xây dựng một không gian làm việc số tốt hơn (Digital Workspace) thay vì chì là trải nghiệm nhân viên.
  5. Cải thiện năng lực của bộ phận tuyển dụng, thu hút nhân tài nhằm tìm kiếm người phù hợp cho tổ chức.
  6. Xây dựng và quản trị nghề nghiệp của nhân viên trong tổ chức và duy trì đội ngũ. Ưu tiên trong việc giữ chân người tài nội bộ.
  7. DEI vẫn cần ưu tiên và nhìn nhận dưới góc độ tích cực hơn
  8. L&D vẫn là những vấn đề cần ưu tiên về trong việc nâng cao năng lực bền vững của tổ chức
  9. Doanh nghiệp và Marketing đang ưu tiên các hoạt động về Phát triển bền vững (ESG) và trách nhiệm xã hội. Cho nên, bộ phận Nhân sự cũng nên nhạy bén và cùng ưu tiên thực hiện các hoạt động này.
  10. Nâng cao năng lực đội ngũ làm Nhân sự trong doanh nghiệp về khả năng lãnh đạo, định hướng và dẫn dắt sự thay đổi trong tổ chức (Chuyển đổi số, tái cấu trúc, văn hoá…).

Chúc mọi người tuần mới nhiều niềm vui và làm việc hiệu quả.

(Bài viết được tổng hợp thông tin từ nhiều nguồn: Vnexpress, Gartner, các thông tin về kinh tế, chính trị… khác của Việt Nam).

Trân trọng,

Bài viết gốc được đăng tải tại LinkedIn Bùi Đoàn Chung

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

Đo lường thời gian thực hiện hàm trong Javascript một cách thanh lịch

Đo lường thời gian thực hiện hàm trong Javascript

Bài viết được sự cho phép bởi tác giả Sơn Dương

Vấn đề

Trong quá trình phát triển ứng dụng hoặc đang vận hành nó trong môi trường production sẽ có lúc phát sinh ra nhiều vấn đề mà chúng ta không lường trước được. Khi ứng dụng được tung ra thị trường, chắc chắn lượng người dùng sẽ nhiều lên từng ngày, từ đó tạo ra sự đa dạng về hành vi lẫn dữ liệu người dùng thu thập được. Chúng kết hợp với nhau tạo ra nhiều trường hợp phát sinh lỗi mà quá trình kiểm thử trước đó không hề phát hiện ra.

Một trong số đó có thể kể đến như là tốc độ phản hồi API bỗng trở nên chậm chạp mặc dù lượng người sử dụng là không nhiều. Khi kiểm tra lại tính năng gây ra tình trạng đó, có vẻ bạn phát hiện ra hoặc đang nghi ngờ một hàm nào đó chiếm lượng thời gian xử lý lớn. Để chắc chắn là mình đúng thì tất nhiên phải đo được xem cụ thể là hàm đó tốn bao nhiêu thời gian để xử lý.

Có nhiều cách để biết hàm nào đang gây chậm hệ thống. Các ứng dụng APM với khả năng kiểm soát và chuẩn đoán ứng dụng của bạn rất tốt để kịp thời cảnh báo vấn đề. Một vài dịch vụ APM có tính năng thu thập hoặc cảnh báo theo thời gian thực nếu như chúng phát hiện ra một hàm nào đó đang mất quá nhiều thời gian để thực hiện, hoặc thời gian phản hồi của API là quá lâu. Nhưng đổi lại, giá thành của chúng không hề rẻ, hoặc nếu có miễn phí thì nhiều hạn chế sẽ phát sinh. Vì lẽ đó không phải ai cũng có điều kiện sử dụng APM, đó là lúc bạn cần đến một cách “xôi thịt” hơn nhưng lại hoàn toàn miễn phí mà ai cũng có thể tiếp cận được.

  5 thủ thuật hay với Javascript Promise bạn cần biết!

  Một số kinh nghiệm làm việc với mảng trong JavaScript dành cho bạn

Đo lường thời gian thực hiện hàm trong Javascript

Date.now()console.time()performance.now()process.hrtime()… là các hàm thường hay được sử dụng để đo khoảng thời gian mà hàm thực hiện. Về cơ bản, chỉ cần kẹp giữa hàm cần đo bằng chúng thì sẽ tính được thời gian thực thi.

Ví dụ sau dử dụng Date để tính thời gian thực thi bằng cách trừ hai khoảng thời gian trước và sau khi hàm được chạy.

const start = Date.now();

await functionToBeMeasured();

const end = Date.now();
console.log(`Execution time: ${end - start} ms`);

Ngoài ra, đơn giản hơn thì dùng console.time:

console.time('executionFunctionToBeMeasured');

await functionToBeMeasured();

console.timeEnd('executionFunctionToBeMeasured');

console.time không mang lại độ chính xác cao. Nếu muốn độ chính xác theo phần nghìn giây, hãy sử dụng hàm mạnh mẽ hơn với performance.now() hoặc process.hrtime() nếu sử dụng Node.js.

const start = performance.now();

await functionToBeMeasured();

const end = performance.now();
console.log(`Execution time: ${end - start} ms`);

Sau khi biết cách đo thời gian, một vấn đề khác nảy sinh đó chính là cần phải đặt hàm cần đo kẹp giữa hai hàm tính thời gian. Điều này gây ra sự xáo trộn mã trong dự án của bạn, phải sửa nhiều hơn, mã trở nên cồng kềnh hơn và khó kiểm soát.

Việc làm Javascript lương cao trên TopDev

Ý tưởng lúc này là viết một hàm để gói gọn tính năng đo thời gian thực thi. Đầu vào là một hàm cần tính còn đầu ra là kết quả của hàm đó cùng với thời gian thực thi. Một hàm gì đó trông giống như dưới đây:

calcExecuteTime(functionToBeMeasured);

functionToBeMeasured đôi khi là hàm có cả tham số, vì thế hãy sửa lại một chút.

calcExecuteTime(() => functionToBeMeasured(arg1, arg2...));

Nếu trong functionToBeMeasured có sử dụng this, hãy thêm một tham số context để nhận this từ nơi gọi.

calcExecuteTime(context, () => functionToBeMeasured(arg1, arg2...));

Cuối cùng, nên thêm một tham số name để xác định được cuộc gọi hàm từ đâu.

calcExecuteTime(name, context, () => functionToBeMeasured(arg1, arg2...));

Hàm calcExecuteTime có thể giống như sau:

const calcExecuteTime = async (name, context, fn) => {
  const start = process.hrtime();
  const result = await fn.call(context);
  const stop = process.hrtime(start);
  const executeTime = (stop[0] * 1e9 + stop[1]) / 1e9;
  console.log(`${name} execution time: ${executeTime}s`);
  return result;
};

Bây giờ hãy thử gọi hàm xem:

calcExecuteTime("Execute ToBeMeasured", this, () => functionToBeMeasured(arg1, arg2...));
// Execute ToBeMeasured execution time: 0.000178s

Bạn cũng có thể sửa lại hàm tùy vào mục đích, ví dụ thay vì console.log thì hãy logging lại thời gian thực hiện hàm vào đâu đó. Hoặc nâng cấp hàm lên ví dụ như thêm một cờ bật/tắt tính năng tính thời gian.

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

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

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

5 công cụ phân tích dữ liệu Big data tốt nhất 2024

Top 5 công cụ phân tích dữ liệu Big data hiệu quả nhất hiện nay

Bài viết được sự cho phép bởi tác giả Sơn Dương

Trong bài viết trước, chúng ta đã tìm hiểu big data là gì? Tầm quan trọng và cần phải chuẩn bị những kiến thức gì trước khi bắt đầu học big data.

Hiểu đơn giản, Big data là dữ liệu quá lớn và phức tạp mà không thể quản lý và xử lý bằng các công cụ truyền thống như MySQL, SQL server.v.v… Big data yêu cầu một bộ công cụ và kỹ thuật đặc biệt để xử lý đống dữ liệu khổng lồ đó.

Có một số công cụ khá nổi tiếng ngoài thị trường như Hadoop (hỗ trợ lưu trữ và xử lý big data), Spark (giúp tính toán dữ liệu ngay trong bộ nhớ), Storm, MongoDB… Mỗi công cụ lại có tác dụng và chức năng khác nhau để hỗ trợ phân tích big data.

Trong mỗi lĩnh vực đều có một yếu tố quan trọng nhất giúp bạn dễ dàng làm chủ và tiến xa hơn. Với lĩnh vực big data, câu trả lời là: Bạn cần có một bộ công cụ big data tốt.

Một công cụ tốt giúp cải thiện cách bạn làm việc. Một công cụ tuyệt vời giúp cải thiện cách bạn nghĩ.
– Jeff Duntemann, Co-Founder của Coriolis

Phân tích và xử lý big data không phải là một nhiệm vụ dễ dàng. Ngay như trong cái tên của nó, big data tức là dữ liệu lớn, do đó để làm việc và giải quyết nó cũng là một vấn đề lớn. Bạn cần phải có một bộ công cụ tốt, không chỉ giải quyết vấn đề mà còn hỗ trợ bạn tạo ra những kết quả có ích.

Bài viết này sẽ cung cấp cho bạn những công cụ tuyệt vời, giúp bạn làm việc hiệu quả hơn với big data.

Danh sách công cụ phân tích dữ liệu big data tốt nhất

Dưới đây là danh sách 5 công cụ big data tốt nhất:

  • Apache Hadoop
  • Datawrapper
  • Apache Cassandra
  • MongoDB
  • RapidMiner

Big data là một phần không thể thiếu của mọi công ty, tổ chức hiện nay. Các công ty như Google, Facebook, Apple… luôn sử dụng big data là công cụ hữu hiệu để training AI, phân tích xu hướng thị thường để dự đoán xu hướng, thiết kế sản phẩm…

Có một số yếu tố mà bạn cần phải lưu tâm khi lựa chọn công cụ. Đó là kích thước big data, chi phí mua công cụ, loại phân tích mà bạn muốn.v.v…

Ngay nay, với tốc độ tăng trường cấp số nhân của big data, thị trường cũng tràn ngập các thể loại công cụ big data, đủ loại “thượng vàng hạ cám”. Do đó, để giúp bạn không bị choáng ngợt và tối ưu hóa chi phí và hiệu quả công việc. Chúng ta sẽ cùng nhau xem danh sách 10 công cụ big data tốt nhất dưới đây.

  Một số lầm tưởng về big data của software engineer

  26 công cụ và kỹ thuật trong Big Data có thể bạn chưa biết

1. Apache Hadoop

Đứng đầu trong danh sách này không ai khác, chính là Hadoop. Apache Hadoop là một trong những công cụ được sử dụng phổ biến nhất trong lĩnh vực big data. Hadoop là một open-source framework từ Apache. Hadoop được dùng để lưu trữ và phân tích các tập dữ liệu lớn.

Hadoop được viết bằng Java ứng dụng công nghệ MapReduce. Hiểu nôm na là công nghệ phân tán dữ liệu do Google phát triển. Tức là từ dữ liệu lớn, chúng sẽ được tách ra thành nhiều dữ liệu nhỏ hơn và sắp xếp chúng lại để dễ dang truy xuất hơn. Bạn có thể hình dung rõ nét qua các kết quả tìm kiếm của Google.

Bạn thử tìm kiếm với một từ khóa nào đó nhưng ở nhiều khu vực khác nhau: Google.com. Google.com.vn, Google.in… chắc chắn kết quả tìm kiếm sẽ khác nhau đôi chút.

Hadoop sử dụng kiến trúc clustered. Một Cluster là một nhóm các hệ thống được kết nối qua LAN. Hadoop cho phép xử lý dữ liệu song song vì nó hoạt động đồng thời trên nhiều máy.

Hadoop gồm 3 layer chính:

  • Hadoop Distributed File System (HDFS): Là hệ thống file phân tán cung cấp truy cập thông lượng cao cho ứng dụng khai thác dữ liệu.
  • Map-Reduce: Đây là hệ thống dựa trên YARN dùng để xử lý song song các tập dữ liệu lớn. YARN: layer quản lý tiến trình và tài nguyên của các cluster.

Để dễ hình dung hơn cơ chế và kiến trúc của Hadoop, mời bạn tham khảo hình bên dưới đây:

kiến trúc của Hadoop

Chức năng chính của Hadoop:

  • Lưu trữ và xử lý những dữ liệu lớn, lên tới Petabyte (khoảng 1 triệu GB).
  • Xử lý trong môi trường phân tán, dữ liệu được lưu ở nhiều nơi khác nhau nhưng yêu cầu xử lý đồng bộ.

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

2. Cassandra

Apache Cassandra là hệ quản trị cơ sở liệu NoSQL phân tán mã nguồn mở. Công cụ được xây dựng để quản lý khối lượng dữ liệu khổng lồ trải rộng trên nhiều máy chủ, đảm bảo tính sẵn sàng cao.

Cassandra

Cassandra sử dụng CQL (Cassandra Structure Language) để tương tác với cơ sở dữ liệu.

Một số công ty sử dụng Cassandra như: Accenture, American Express, Facebook, General Electric, Honeywell, Yahoo,.v.v…

Ưu điểm của Cassandra:

  • Tốc độ xử lý rất nhanh
  • Lưu log có kiến trúc giúp việc debug, phát hiện lỗi tốt hơn
  • Khả năng mở rộng tự động
  • Mở rộng hệ thống theo tuyến tính.

Nhược điểm:

  • Yêu cầu trình độ nhất định để khắc phục khi có vấn đề phát sinh
  • Thiếu tính năng Row-level locking
  • Clustering còn chưa hiệu quả, cần cải thiện để có hiệu quả hơn

3. Datawrapper

Datawrapper là một platform mã nguồn mở có chức năng chính là trực quan hóa dữ liệu, hỗ trợ người dùng tạo các biểu đồ đơn giản, chính xác, thân thiện và có thể nhúng vào website dễ dàng.

Datawrapper

Các công ty sử dụng phần mềm này chủ yếu là các tòa soạn báo, có thể kể một số tên tuổi đình đám như: The Times, Fortune, Mother Jones, Bloomberg, Twitter,.v.v…

Ưu điểm:

  • Thân thiện với mọi loại thiết bị, kể cả thiết bị di động, máy tính để bàn…
  • Fully responsive
  • Tốc độ cho kết quả nhanh
  • Nhiều tùy chọn để tùy biến
  • Không yêu cầu người dùng phải biết lập trình

Nhược điểm:

  • Bảng màu còn hạn chế
  • Mất phí

4. MongoDB

MongoDB là một NoSQL, một kiểu hệ quản trị cơ sở dữ liệu hướng document, được viết bằng C/C++Javascript. MongoDB được cung cấp miễn phí và là một công cụ mã nguồn mở hỗ trợ đa nền tảng gồm: Window, Linux…

Đây là công cụ quản trị cơ sở dữ liệu phổ biến nhất cho big data, vì nó hỗ trợ rất tốt cho việc quản lý dữ liệu không có cấu trúc hay loại dữ liệu thay đổi thường xuyên.

MongoDB sử dụng dynamic schemas, do đó, bạn có thể chuẩn bị và tạo dữ liệu một cách nhanh chóng, không cần phải thiết kế cấu trúc trước cho dữ liệu, thích thì thêm vào DB thôi.

Chức năng chính của MongoDB gồm có: Aggregation, Adhoc-queries, Uses BSON format, Sharding, Indexing, Replication, Server-side execution of javascript, Schemaless, Capped collection, MongoDB management service (MMS)…

Các công ty sử dụng MongoDB gồm có: Facebook, eBay, MetLife, Google,v.v…

Ưu điểm:

  • Học và tiếp cận rất dễ
  • Hỗ trợ nhiều công nghệ và nền tảng khác nhau
  • Dễ cài đặt và bảo trì
  • Đáng tin cậy và chi phí thấp

Nhược điểm:

  • Số liệu phân tích còn hạn chế
  • Một số trường hợp báo cáo tốc độ ứng dụng chậm đi khi sử dụng MongoDB

5. RapidMiner

Rapidminer là một công cụ đa nền tảng cung cấp môi trường tích hợp cho khoa học dữ liệu, machine learning, và phân tích dự đoán số liệu. Rapidminer cung cấp nhiều loại giấy phép tùy vào từng loại quy mô công ty, quy mô dữ liệu.

Ngoài ra, Rapidminer cũng có một phiên bản miễn phí phục vụ cho mục đích học tập với giới hạn 1 CPU và 10,000 records.

Các công ty đang sử dụng RapidMiner: Hitachi, BMW, Samsung, Airbus…

Ưu điểm:

  • Open-source Java core
  • Có nhiều công cụ và thuật toán cao cấp phục vụ rất tốt nhu cầu phân tích dữ liệu big data.
  • Có GUI
  • Dễ dàng tích hợp các API hay cloud.
  • Dịch vụ chăm sóc khách hàng rất tốt

Nhược điểm

  • Các dịch vụ online cần cải thiện

Thay lời kết

Qua bài viết này, mình đã giới thiệu một số công cụ tốt nhất phục vụ cho nhu cầu lưu trữ và phân tích dữ liệu big data. Trong số các công cụ này, có công cụ miễn phí, có công cụ phải trả phí.

Tùy thuộc vào nhu cầu công việc, quy mô dữ liệu mà bạn lựa chọn công cụ big data phù hợp nhất.

Hi vọng các bạn sẽ ủng hộ các bài viết về Big data, để lại ý kiến của bạn ở mục bình luận bên dưới nhé.

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

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

Tìm kiếm việc làm IT mới nhất tại TopDev!

Các hàm xử lý chuỗi thường dùng trong PHP

Các hàm xử lý chuỗi thường dùng trong PHP

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

Cắt hay nối chuỗi trong PHP, kiểm tra từ tồn tại trong một chuỗi trong PHP. Hay như đếm số ký tự trong một chuỗi bằng PHP, độ dài của chuỗi,…. Có rất nhiều thao tác với chuỗi trong PHP chúng ta sẽ gặp thường xuyên trong lập trình.

Bài này mình xin được chia sẻ với các bạn về một số hàm xử lý chuỗi thường dùng trong PHP. Trước hết, chúng ta xem qua nguyên tắc dùng chuỗi trong php: Nếu chuỗi được đặt trong dấu nháy kép “” thì các ký tự nháy kép ” bên trong chuỗi phải thêm dấu gạch chéo đằng trước nó.

Trước hết, chúng ta xem qua nguyên tắc dùng chuỗi trong php:

Nếu chuỗi được đặt trong dấu nháy kép “” thì các ký tự nháy kép ” bên trong chuỗi phải thêm dấu gạch chéo đằng trước nó.

echo "Phân tích câu tục ngữ \"Uống nước nhớ nguồn\" ";

Nếu chuỗi được đặt trong dấu nháy kép  “”  thì trong chuỗi ta có thể truyền biến mà không cần dùng phép nối chuỗi.

$foo = 100;
echo "Số foo có giá trị là $foo";

Nếu chuỗi được đặt trong dấu nháy đơn ” thì các ký tự nháy đơn ‘ bên trong chuỗi phải thêm dấu gạch chéo đằng trước nó. Thường dùng với câu chữ trong tiếng Anh.

echo 'I\'m fine';

Bây giờ chúng ta đến với các hàm xử lý chuỗi hay dùng:

addcslashes($str, $char_list)

Hàm này có tác dụng chèn \ vào trước các ký tự trong chuỗi $str với các ký tự được liệt kê ở $char_list

echo addcslashes(" PHP là ngôn ngữ lập trình Web", 'g');
// output: PHP là n\gôn n\gữ lập trình Web
echo addcslashes("PHP là ngôn ngữ lập trình Web", 'a..z');
//output: PHP \là \n\gô\n \n\gữ \lậ\p \t\rì\n\h W\e\b
echo addcslashes("PHP là ngôn ngữ lập trình Web", 'a..zA..Z');
// output: \P\H\P \là \n\gô\n \n\gữ \lậ\p \t\rì\n\h \W\e\b

addslashes($str)

Hàm này sẽ thêm ký tự \ vào trước các ký tự ', ", \ trong chuỗi $str nếu có.

echo addslashes("PHP l'à ngôn ngữ lập trình W'e'b");
//output: PHP l\'à ngôn ngữ lập trình W\'e\'b

bin2hex($str)

Hàm này có tác dụng chuyển đổi chuỗi về dạng ASCII HEX của từng ký tự trong chuỗi $str.

echo bin2hex("I am PHP");
//ouutput: 4920616d20504850

  Top 6 mẹo của PHP giúp anh em code tốt hơn

chop($string, $charList)

Hàm này có tác dụng xóa ký tự,hoặc từ cuối cùng của chuỗi nếu nó = $charlist.

echo chop("My name is Strong PHP", "PHP");
//output: My name is Strong

crc32($string)

Hàm này có tác dụng chuyển một chuỗi thành một số nguyên.

echo crc32("I am PHP");
//output: 2701280583

explode($separator, $string, $limit)

Hàm này có tác dụng tách chuỗi $string thành một mảng(array) với điều kiện $separator, và giới hạn $limit.

$str = "facebook.com";
$data = explode('o', $str);
print_r($data);
//output: Array ( [0] => faceb [1] => [2] => k.c [3] => m )
$data = explode('o', $str, 2);
print_r($data);
//output: Array ( [0] => faceb [1] => ok.com )

Xem thêm tuyển dụng PHP lương cao trên TopDev

implode($separator, $array)

Ngược lại với hàm explode thì hàm này có tác dụng nối tất cả các phần tử của mảng $array thành chuỗi với khoảng phân biệt $separator.

$data = ["I", "a", "m", "PHP"];
echo implode('-', $data);
//output: I-a-m-PHP

strlen($string)

Hàm này có tác dụng đếm xem chuỗi $string có bao nhiêu ký tự.

  Substr trong php là gì? Ví dụ về substr

str_word_count($string)

Hàm này có tác dụng đếm xem chuỗi $string có bao nhiêu từ.

str_repeat($string, $repeat)

Hàm này có tác dụng lặp chuỗi $string $repeate lần.

str_replace($find, $replace, $string)

Hàm này có tác dụng tìm kiếm chuỗi $find và thay thế chuỗi đó bằng $replace trong chuỗi $string.

md5($string)

Hàm này có tác dụng chuyển chuỗi $string sang mã hóa md5.

strip_tags($string, $allow)

Hàm này có tác dụng loại bỏ các thẻ html có trong chuỗi $tring, trừ các thẻ được cho phép $allow. Thường được dùng để lọc dữ liệu đầu vào trong các chức năng của website.

substr(string, start, length)

Hàm này có tác dụng cắt chuỗi $string, bắt đầu ở vị trí $start và có giới hạn $length.

strtolower($string)

Hàm có tác dụng chuyển chuỗi $string sang in thường.

strtoupper($string)

Hàm có tác dụng chuyển đổi chuỗi $string sang in hoa.

ucword($string)

Hàm có tác dụng chuyển đổi chữ cái đầu tiên của các từ trong chuỗi sang in hoa.

ucfirst($string)

Hàm có tác dụng chuyển đổi chữ cái đầu tiên trong chuỗi sang in hoa.

trim($string, $charlist)

Hàm có tác dụng loại bỏ khoảng trắng hoặc các ký tự $charlist trong chuỗi $string

ltrim($tring,$charlist)

Tương tự như hàm trim nhưng chỉ cắt bên trái của chuỗi.

rtrim($tring,$charlist)

Tương tự như hàm trim nhưng chỉ cắt bên phải của chuỗi.

Lời kết

Bài này đã giới thiệu với mọi người về các hàm xử lý chuỗi hay dùng trong PHP, hi vọng sẽ giúp các bạn mới tiếp cận với PHP dễ dàng hơn. Các bạn cũng có thể xem thêm các hàm khác ở đây nhé!

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

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

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

Dynamic Rendering là gì? Hướng dẫn thiết lập Dynamic Rendering cho các trang CSR bằng Nginx

Dynamic Rendering là gì?

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

Vấn đề

Những năm gần đây sự bùng nổ của các Framework về UX/UI như Angular hay React đang tạo nên một cuộc cách mạng về việc phát triển một trang web chú trọng vào tương tác người dùng và giao diện được xử lý hoàn toàn phía trình duyệt.

Những trang web như thế người ta gọi là Client Side Rendering (CSR) và thường được triển khai theo cách Single Page Application (SPA). Chúng tận dụng sức mạnh xử lý của thiết bị người dùng để giảm tải cho máy chủ, bên cạnh đó những trang web này thường mang lại trải nghiệm mượt mà bởi vì máy chủ chỉ cần gửi về mã Javascript cho thiết bị và việc lấy dữ liệu từ máy chủ chỉ cần thông qua API với dữ liệu cần thiết thay vì phải tải toàn bộ mã HTML.

CSR đang làm rất tốt nhiệm vụ của mình ở một khía cạnh nào đó, tuy nhiên chắc chắn rằng nó không tốt cho SEO. Cho những ai chưa biết SEO là gì thì nó là thuật ngữ chỉ việc website được tìm thấy trên internet thông qua những trang tìm kiếm như Google, Bing… Các trang tìm kiếm này liên tục “sai khiến” những con “bọ” truy cập vào tất cả các website mà nó biết để đọc nội dung. Những con “bọ” này đọc HTML rất tốt nhưng đối với Javascript thì không. Chính vì thế việc giúp các trang CSR thân thiện với SEO là một điều rất cần thiết.

Để đạt được điều đó có nhiều hơn một cách để thực hiện, ví dụ như sử dụng những thư viện hỗ trợ Server Side Rendering (SSR) hoặc build hoàn toàn website thành HTML static – Server Side Generation (SSG). Mỗi cách đều có ưu nhược điểm và phụ thuộc vào nhu cầu sử dụng, tuy nhiên trong bài viết này mình xin phép không đề cập đến 2 cách trên.

Thay vào đó, Google đã đề cập đến một giải pháp cho các trang web SPA muốn thân thiện với SEO đó chính là Dynamic Rendering. Vậy thì đó là như thế nào?

Dynamic Rendering là gì?

Dynamic Rendering là thuật ngữ chỉ cách trả về kết quả truy vấn bằng cách phân biệt các User-Agent là người dùng bình thường hay là các con “bọ” từ công cụ tìm kiếm. Nếu là người dùng bình thường thì trả về mã Javascript, còn nếu là “bọ” thì trả về một trang HTML.

Dynamic Rendering

Bởi vì các con “bọ” tập trung quan tâm đến nội dung trang web của bạn thế nên việc trả về kết quả HTML là điều cần thiết để nó có thể thu thập thông tin. Còn về phía những người dùng, bên cạnh nội dung ra còn có UI/UX bởi họ thực sự tương tác với những thứ đang hiển thị trên trang web.

Để làm được điều đó chúng ta sẽ dựa vào chuỗi User-Agent của người dùng duyệt web. Vì User-Agent của người dùng và “bọ” tìm kiếm là có thể phân biệt được nên dựa vào đó ta sẽ trả được về kết quả mong muốn. Việc phân biệt phân biệt người dùng và “bọ” chúng ta có thể thực hiện ở máy chủ HTTP như Nginx hoặc nếu các bạn đang dùng Framework như Nuxt, Next… thì chúng có sẵn cấu hình để chúng ta có thể dễ dàng thiết lập.

Hiện tại có nhiều cách để có thể triển khai Dynamic Rendering. Chúng ta có thể tìm đến một dịch vụ của bên thứ 3 như là Prerender.io hoặc là tự triển khai một service tạo mã HTML bằng thư viện Rendertron của Google Chrome.

  Kỹ thuật SEO bằng việc tối ưu URLs cho Website

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

Cách tự triển khai service hỗ trợ rendering

Rendertron là một headless Chrome (Chrome nhưng không có giao diện :D) được thiết kế để render và tái tạo lại trang web một cách nhanh chóng.

Nghe thật thú vị phải không, trình duyệt nhưng lại không có giao diện thì sao mà duyệt web??? Bởi vì nó được thiết kế ra không phải cho duyệt web thông thường, việc loại bỏ các thành phần hiển thị giúp trình duyệt trở nên nhẹ và linh hoạt hơn trong môi trường máy chủ.

Rendertron có chỉ dẫn nhiều cách để tạo một máy chủ render. Ở đây giả sử tôi chạy một máy chủ Rendertron bằng module Express.js của Node:

const express = require('express');
const rendertron = require('rendertron-middleware');

const app = express();

app.use(
  rendertron.makeMiddleware({
    proxyUrl: 'http://my-rendertron-instance/render',
  })
);

app.use(express.static('files'));
app.listen(8080);

Với http://my-rendertron-instance là địa chỉ máy chủ của bạn. Để xem chi tiết cấu hình bạn có thể bấm vào Google Chrome Middleware.

Sau đó hãy thử truy cập vào địa chỉ http://my-rendertron-instance/render/your-spa-url với your-spa-url là địa chỉ trang CSR của bạn sẽ thấy kết quả trả về là mã HTML đã render của trang web.

Cơ hội việc làm cho Web developer trên TopDev

Cấu hình Dynamic Rendering cho các trang CSR bằng Nginx

Nếu bạn đang triển khai một trang web CSR thông qua Nginx thì đây là hướng dẫn dành cho bạn.

Đầu tiên chúng ta cần xác định danh sách cách User-Agent của “bọ”:

map $http_user_agent $is_bot {
        default                                     0;
        "~*Prerender"                               0;
        "~*googlebot"                               1;
        "~*yahoo!\ slurp"                           1;
        "~*bingbot"                                 1;
        "~*yandex"                                  1;
        "~*baiduspider"                             1;
        "~*facebookexternalhit"                     1;
        "~*twitterbot"                              1;
        "~*rogerbot"                                1;
        "~*linkedinbot"                             1;
        "~*embedly"                                 1;
        "~*quora\ link\ preview"                    1;
        "~*showyoubot"                              1;
        "~*outbrain"                                1;
        "~*pinterest\/0\."                          1;
        "~*developers.google.com\/\+\/web\/snippet" 1;
        "~*slackbot"                                1;
        "~*vkshare"                                 1;
        "~*w3c_validator"                           1;
        "~*redditbot"                               1;
        "~*applebot"                                1;
        "~*whatsapp"                                1;
        "~*flipboard"                               1;
        "~*tumblr"                                  1;
        "~*bitlybot"                                1;
        "~*skypeuripreview"                         1;
        "~*nuzzel"                                  1;
        "~*discordbot"                              1;
        "~*google\ page\ speed"                     1;
        "~*qwantify"                                1;
        "~*pinterestbot"                            1;
        "~*bitrix\ link\ preview"                   1;
        "~*xing-contenttabreceiver"                 1;
        "~*chrome-lighthouse"                       1;
        "~*telegrambot"                             1;
}

Sau đó cấu hình cho cách User-Agent này chuyển qua máy chủ Rendertron mà chúng ta đã tạo ở bên trên.

server {
    listen 80;
    server_name example.com;
    ...

    if ($is_bot = 1) {
        rewrite ^(.*)$ /rendertron/$1;
    }

    location /rendertron/ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://my-rendertron-instance/render/$scheme://$host:$server_port$request_uri;   
    }
}

Hãy restart lại nginx và thử dùng trình duyệt với dùng Postman sử dụng User-Agent của “bọ” xem trang web của bạn đã trả về mã HTML chưa nhé!

Dưới đây là chuỗi User-Agent của Google.

Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

Tổng kết

Single Page App đang là xu hướng phát triển web hiện nay bởi những lợi ích mà nó mang lại. Tuy nhiên SPA không thân thiện với SEO, chính vì thế Dynamic Rendering là một trong những giải pháp để đưa SPA đến gần hơn với những công cụ tìm kiếm.

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

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

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

10 lệnh command line mà developer nhất định phải biết

10 lệnh command line mà developer nhất định phải biết

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

Nếu bạn là một developer thì cơ bản nhất là cần biết về command line. Chưa biết thì không sao chúng ta có thể học từ mọi thứ.

Sau đây là 10 lệnh cơ bản trong command line mà bạn cần biết, sử dụng hằng ngày.

1.In ra đường dẫn thư mục đang làm việc (pwd)

$ pwd sẽ hiển thị đầy đủ đường dẫn thư mục bạn đang làm việc.

2. Thay đổi thư mục làm việc (cd)

Bạn muốn nhảy sang thư mục làm việc khác chỉ cần dùng $ cd sẽ giúp đưa bạn đi mọi nơi bạn cần.

3. Hiển thị Danh sách các file và thư mục con (ls)

$ ls sẽ giúp bạn xem tất cả các file và thư mục trong thư mục bạn đang đứng. Nếu bạn cần hiển thị theo dạng cây thì có thể thêm hậu tố -l như sau $ ls -l. Hoặc để xem các file ẩn (.ten_file) thì chỉ cần thêm hậu tố -a $ ls -a

4. Tạo file (touch)

Việc tạo file trong CLI là công việc thường xuyên. Bạn dùng lệnh $ touch ten_file sẽ tạo ra 1 file rỗng.

Chú ý, nếu tên file bạn tạo đã tồn tại, nó sẽ ghi đè file cũ của bạn nhé. Hãy cẩn thận!

  Thực thi phương thức kiểm thử NUnit với Command Line

5. Tạo thư mục (mkdir)

Tương tự việc tạo file, tạo thư mục cũng được sử dụng khá nhiều. $ mkdir ten_thu_muc

  Giới thiệu cấu trúc dự án tạo bằng Vuejs CLI

6. Xoá file (rm)

Xoá file với lệnh $ rm. Hoặc xoá luôn cả folder và file bên trong với $ rm -r

Chú ý: lệnh này sẽ không thể khôi phục file hoặc folder đã xoá.

7. Di chuyển hoặc đổi tên file/thư mục (mv)

Để di chuyển file/thư mục sang folder khác ta dùng $ mv old_path new_path

Để đổi tên file $ mv file_cu.txt file_moi.txt

Xem thêm nhiều tuyển dụng VueJS hấp dẫn trên TopDev

8. Copy file hoặc thư mục (cp)

Tương tự lệnh mv thôi nha mọi người $ cp file_cu.txt ban_file_moi.txt

9. Xoá màn hình CLI (clear)

$ clear xoá tất cả những gì trên màn hình đang hiển thị

10. man

Nêu bạn muốn xem tất cả tham số, cách sử dụng từng lệnh thì chỉ cần dùng $ man

Như vậy, là mình đã giới thiệu sơ qua về 10 lệnh cần thiết trong CLI cho các bạn dev. Hi vọng sẽ giúp ích cho các bạn mới làm quen.

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

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

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

Talent Acquisition là gì? Phương pháp “săn nhân tài” thời đại 4.0

Talent Acquisition là gì?

Trong bối cảnh thị trường lao động ngày càng cạnh tranh, việc thu hút và giữ chân nhân tài là một thách thức lớn đối với các doanh nghiệp. Talent Acquisition (Thu hút nhân tài) là một phương pháp tuyển dụng mới, mang tính chiến lược và dài hạn, giúp doanh nghiệp đảm bảo nguồn nhân lực chất lượng cho hiện tại và tương lai. Vậy Talent Acquisition là gì? Có gì vượt trội hơn so với phương pháp tuyển dụng truyền thống? Mời bạn theo dõi chi tiết bài viết dưới đây để hiểu hơn về Talent Acquisition nhé!

Talent Acquisition là gì?

Talent Acquisition là gì

Talent Acquisition (Thu hút nhân tài) là một thuật ngữ trong lĩnh vực nhân sự. Đây là một quá trình liên tục nhằm xác định, xây dựng mối quan hệ và tuyển lựa những cá nhân có các năng lực nhằm đảm bảo nguồn nhân lực chất lượng cho doanh nghiệp.

Talent Acquisition không chỉ giới hạn trong việc thu hút ứng viên mới mà còn liên quan đến việc phát triển và duy trì mối quan hệ với những người tài hiện có trong tổ chức. Nó bao gồm các hoạt động như xác định nhu cầu nhân sự chiến lược, xây dựng thương hiệu nhà tuyển dụng, sử dụng các phương tiện truyền thông xã hội, và thậm chí đàm phán chính sách phúc lợi để tạo điều kiện làm việc thuận lợi và giữ chân nhân sự giỏi.

Sự khác biệt giữa Talent Acquisition và Recruiment (tuyển dụng)

Sự khác biệt giữa Talent Acquisition và Recruiment

Talent Acquisition và Recruitment là hai thuật ngữ thường được sử dụng trong lĩnh vực nhân sự, tuy nhiên chúng có một số điểm khác biệt cơ bản. Sự khác biệt chính giữa Talent Acquisition và Recruitment nằm ở tầm nhìn và tính chiến lược.

  • Talent Acquisition mang tính chiến lược và tầm nhìn dài hạn, tập trung vào việc xây dựng thương hiệu tuyển dụng, thu hút ứng viên tiềm năng và xây dựng mối quan hệ với họ.
  • Recruitment mang tính ngắn hạn, tập trung vào việc tìm kiếm và tuyển chọn ứng viên cho các vị trí hiện tại của doanh nghiệp.

Một số điểm khác biệt cụ thể giữa Talent Acquisition và Recruitment bao gồm:

Talent Acquisition

Recruitment

Mục tiêu Đảm bảo nguồn nhân lực chất lượng cho doanh nghiệp, đáp ứng nhu cầu phát triển của doanh nghiệp trong hiện tại và tương lai. Tìm kiếm và tuyển chọn ứng viên cho các vị trí hiện tại của doanh nghiệp.
Tầm nhìn Dài hạn Ngắn hạn
Chiến lược Xây dựng thương hiệu tuyển dụng, thu hút ứng viên tiềm năng và xây dựng mối quan hệ với họ. Tìm kiếm và tuyển chọn ứng viên phù hợp với yêu cầu của vị trí tuyển dụng.
Công việc Xác định nhu cầu nhân lực, xây dựng chiến lược tuyển dụng, thu hút ứng viên, lựa chọn ứng viên, tuyển dụng, onboard nhân viên mới. Tìm kiếm ứng viên, sàng lọc hồ sơ, phỏng vấn, đánh giá năng lực, lựa chọn ứng viên, tuyển dụng.

  Những tác động to lớn của trí tuệ nhân tạo trong tuyển dụng

  Cách đăng tin tuyển dụng trên Facebook với 5 tuyệt chiêu tối ưu

Nhiệm vụ chính của một Talent Acquisition

Talent Acquisition là người chịu trách nhiệm về toàn bộ quá trình tuyển dụng và thu hút nhân tài cho doanh nghiệp. Nhiệm vụ cụ thể của một Talent Acquisition bao gồm:

Hoạch định chiến lược

Talent Acquisition cần xây dựng các chính sách và chiến lược tuyển dụng phù hợp với mục tiêu và chiến lược của doanh nghiệp. Các chính sách và chiến lược này cần xác định rõ các mục tiêu tuyển dụng, đối tượng tuyển dụng, các kênh tuyển dụng, các phương pháp tuyển dụng, ngân sách tuyển dụng,…

Phân bổ nguồn nhân lực

Talent Acquisition cần phân bổ nguồn nhân lực một cách hợp lý, đảm bảo đáp ứng nhu cầu nhân lực của doanh nghiệp trong hiện tại và tương lai. Muốn hoạt động Talent Acquisition hiệu quả bạn cần phân tích nhu cầu nhân lực, dự báo nhu cầu nhân lực và xây dựng kế hoạch tuyển dụng phù hợp.

Xây dựng thương hiệu tuyển dụng

Xây dựng thương hiệu tuyển dụng

Talent Acquisition cần xây dựng thương hiệu tuyển dụng tích cực, thu hút ứng viên tiềm năng đến với doanh nghiệp. Hãy bắt đầu bằng việc xây dựng hình ảnh doanh nghiệp là một nơi làm việc hấp dẫn, có môi trường làm việc tốt, cơ hội phát triển nghề nghiệp cao,…

Tạo dựng mối quan hệ với ứng viên

Talent Acquisition cần xây dựng mối quan hệ tốt đẹp với ứng viên, giúp ứng viên có trải nghiệm tốt trong quá trình tuyển dụng. Bạn hãy thể hiện sự tôn trọng và thấu hiểu đối với ứng viên, cung cấp thông tin đầy đủ và chính xác về doanh nghiệp và vị trí tuyển dụng, phản hồi ứng viên một cách kịp thời và chính xác.

Ngoài ra, bạn cũng nên giữ liên lạc với ứng viên cũ và xây dựng một cộng đồng ứng viên để phục vụ cho mục tiêu doanh nghiệp.

Đo lường và dự đoán

Công việc đo lường và dự đoán sẽ giúp chỉ ra những điểm mạnh điểm yếu trong quá trình tìm kiếm nhân tài. Người làm Talent Acquisition phải thường xuyên thu thập data, quản lý và phân tích data để đưa ra những định hướng, giải pháp phù hợp trong tương lai.

Tham khảo việc làm Java hấp dẫn, lương cao trên TopDev

Yêu cầu đối với một Talent Acquisition là gì?

Yêu cầu đối với một Talent Acquisition là gì?

Một chuyên gia Talent Acquisition cần phải có một loạt các kỹ năng và phẩm chất để thực hiện nhiệm vụ của mình một cách hiệu quả. Dưới đây là một số yêu cầu quan trọng:

Hiểu rõ về doanh nghiệp và ngành nghề

  • Hiểu rõ về ngành nghề hoạt động của doanh nghiệp để có cái nhìn toàn diện về nhu cầu nhân sự.
  • Nắm vững về chiến lược kinh doanh để xác định ưu tiên và mục tiêu tuyển dụng.

Kỹ năng giao tiếp tốt

  • Có khả năng giao tiếp mạch lạc, có thuyết phục, và tạo ra một trải nghiệm tích cực cho ứng viên.
  • Xử lý tình huống giao tiếp khó khăn một cách chuyên nghiệp.

Kỹ năng phân tích và đánh giá

  • Có khả năng phân tích nhu cầu nhân sự và đánh giá kỹ năng, kinh nghiệm của ứng viên.
  • Sử dụng dữ liệu để đưa ra quyết định chính xác.

Kiến thức về thị trường lao động

  • Theo dõi và hiểu rõ về xu hướng thị trường lao động, mức lương, và các yếu tố ảnh hưởng đến tuyển dụng.
  • Nắm vững về các nguồn tài năng và mạng lưới chuyên gia trong ngành.

Xây dựng thương hiệu nhà tuyển dụng

  • Có khả năng xây dựng và quảng bá thương hiệu nhà tuyển dụng để thu hút tài năng.
  • Tạo nên một hình ảnh tích cực và chuyên nghiệp về doanh nghiệp trong cộng đồng tài năng.

Sử dụng công cụ và công nghệ

Sử dụng hiệu quả các công nghệ và công cụ tuyển dụng, bao gồm các hệ thống quản lý nhân sự và các nền tảng tìm kiếm ứng viên.

Tóm lại

Talent Acquisition là một giải pháp tuyệt vời giúp giải quyết tình trạng thiếu hụt nhân sự mà mọi doanh nghiệp nên áp dụng. Hy vọng rằng bài viết trên đã giúp bạn hiểu rõ Talent Acquisition là gì cũng như những tiềm năng của nó với sự phát triển của doanh nghiệp. Việc tận dụng Talent Acquisition hiệu quả sẽ giúp doanh nghiệp chiến thắng trên đường đua “săn đầu người” ngày càng gay gắt. Chúc bạn tận dụng Talent Acquisition thành công và có được đội ngũ nhân sự tuyệt vời.

Xem thêm:

Bạn đang có một công việc (Job) hay một sự nghiệp (Career)?

Bạn đang có một công việc (Job) hay một sự nghiệp (Career)?

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

Công việc và sự nghiệp đều nói về việc đi làm kiếm tiền, nhưng mang hai ý nghĩa khác nhau. Phân biệt được sự khác nhau giữa “công việc” và “sự nghiệp” có thể giúp ích cho bạn trong việc xây dựng các mục tiêu khác nhau để phát triển trong thời gian đi làm.

Công việc là gì?

Công việc hiểu đơn giản là việc bạn làm để có tiền trang trải cho các nhu cầu cơ bản trong cuộc sống. Công việc có thể là việc toàn thời gian, bán thời gian hoặc các công việc thời vụ. Bạn làm phục vụ quán cafe 20K/giờ hay làm hành chính 20 triệu/tháng đều được gọi là công việc. Tuỳ theo mức độ phức tạp mà công việc có thể đòi hỏi nhiều kĩ năng và bằng cấp kèm theo. Ví dụ để làm nhân viên sửa chữa xe máy thì không cần bằng đại học, nhưng để làm chuyên viên tư vấn tài chính thì cần phải có.

Sự nghiệp là gì?

Sự nghiệp có thể được hiểu là một cái nghề bạn phát triển trong thời gian dài, dựa trên đam mê và sở thích của bạn. Nếu công việc (job) là một khái niệm ngắn hạn, thời vụ, chúng ta có thể hiểu sự nghiệp (career) là một thứ gì đó dài hơi và có tính bền vững hơn. Công việc thì chủ yếu vào việc nhận được tiền dựa trên công sức bỏ ra, sự nghiệp thì ngoài tiền bạn có thể nhận được những thứ khác như phụ cấp công ty, cổ phần công ty, cảm giác hài lòng và tự hào trong công việc.

Sự nghiệp là khái niệm có thể kéo dài cả đời. Trong một sự nghiệp của một người có thể bao gồm nhiều khái niệm công việc khác nhau, và các công việc đó không nhất thiết phải nằm cùng trong một lĩnh vực.

  Có nên nộp hồ sơ công việc mình thích nhưng đang không đăng tuyển?

Công việc ảnh hưởng đến nghề nghiệp thế nào?

Trong cuộc đời mỗi người chúng ta sẽ trải qua nhiều công việc khác nhau. Các công việc sẽ liên kết với nhau tạo thành một sự nghiệp riêng biệt của mỗi người. Có những người có sự nghiệp rất đồng bộ trong một lĩnh vực, ví dụ đi từ Marketing Intern lên Marketing Executive rồi Marketing Manager. Có những người có sự nghiệp đa dạng hơn, từ làm Sales, chăm sóc khách hàng, giáo dục, bất động sản, nhảy qua nhảy lại nhiều lĩnh vực khác nhau. Mỗi kiểu sự nghiệp đều có cái hay riêng.

Hiện nay chúng ta dễ bị ảnh hưởng bởi những lời khuyên về việc phải tìm ra được một công việc và nghề nghiệp phù hợp từ khi còn trẻ để theo đuổi cả đời, để không đi sai. Tuy nhiên việc đó thực sự rất khó và không nhiều người làm được. Đa số chúng ta cần những trải nghiệm, đặc biệt hơn là các trải nghiệm làm sai để nhận ra đâu là điều đúng với mình.

Không có công việc nào trong quá khứ bạn đã làm là không có giá trị hay không liên quan cả. Dù cho công việc đó có thể không nằm trong lĩnh vực bạn đang nộp thì nó vẫn có giá trị. Bởi lẽ với mỗi công việc ngoài những kiến thức chuyên môn, bạn còn được học các kĩ năng làm việc khác nhau.

  Chỉ cần một bản CV hay nhiều bản cho nhiều công việc khác nhau?

Ví dụ một bạn làm phục vụ trong quán cafe sau này đi làm chăm sóc khách hàng trong một công ty có thể sử dụng các kĩ năng liên quan đến làm việc nhóm, tương tác với khách hàng. Hay một bạn kế toán nhảy qua Marketing vẫn có thể sử dụng các kĩ năng liên quan đến số, sự cẩn thận trong việc làm kế hoạch, xây dựng bản chi phí.

Bên cạnh tiền bạc, công việc còn mang lại cho chúng mình cơ hội được xây dựng mối quan hệ – vì vậy đừng bỏ qua việc này khi làm bất kỳ công việc nào. Khi bạn xác định làm một công việc, bên cạnh việc nhận được bao nhiêu tiền, hãy suy nghĩ xem với công việc đó mình có thể có cơ hội xây dựng mạng lưới quan hệ với những người nào.

Việc làm IT Fresher dành cho bạn

Làm sao để có được một sự nghiệp cho mình?

1/ Phân tích lại thực trạng hiện tại và tìm hiểu về thị trường lao động

Dù bạn là một sinh viên mới vào trường hay là một người đã đi làm được vài năm, việc bây giờ bạn cần làm là phân tích hiện trạng của bản thân. Bạn thích những kiểu công việc gì? Bạn thấy mình làm khá tốt kĩ năng gì? Bạn thích làm việc với kiểu người như thế nào? Bạn đang quan tâm, hứng thú với lĩnh vực nào trong thị trường? Sau khi phân tích xong bản thân hiện tại, bạn dựa trên những thông tin mình có để tìm sự kết nối với các công việc trên thị trường hiện nay.

2/ Tìm một người mentor

Một cách nhanh và hiệu quả để bạn học hỏi về một lĩnh vực mới là tìm một người mentor, người có nhiều kinh nghiệm hơn bạn trong lĩnh vực bạn đang quan tâm. Để tìm được mentor, bạn cần mở rộng các mối quan hệ thông qua việc tham gia các workshops, hội nghị, các sự kiện networking để gặp gỡ với những người trong ngành.

3/ Bắt đầu tìm công việc thực tập hoặc các cơ hội được trải nghiệm công việc mình đang quan tâm

Tuỳ theo từng công việc, nếu bạn đang bắt đầu tìm hiểu thì cần bắt đầu bằng các khoá học ngắn hạn. Sau đó tự làm các dự án của riêng mình thực hành kiến thức đã học, hoặc tìm các cơ hội thực tập 3-6 tháng ở trong các công ty liên quan đến lĩnh vực đó.

Công việc hay sự nghiệp thực tế có liên kết với nhau rất chặt chẽ. Ai cũng muốn một sự nghiệp bền vững, nhưng cách để đạt được sự nghiệp đó thì có nhiều con đường khác nhau. Bạn cần kiên nhẫn, bình tĩnh để tìm ra con đường của mình nhé.

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

Xem thêm: 

Xem thêm Top Việc làm Developer trên TopDev

Tìm hiểu về thuật toán đảo ngược chuỗi liên kết (Linked List)

thuật toán đảo ngược chuỗi liên kết

Bài viết được sự cho phép bởi tác giả Sơn Dương

Tiếp tục trong series thuật toán chuyên sâu, hôm nay chúng ta cùng nhau tìm hiểu một thuật toán khá phổ biến: đó là đảo ngược chuỗi liên kết đơn (Linked List).

Vẫn như mọi khi, chúng ta sử dụng Java để triển khai thuật toán.

Đảo ngược chuỗi liên kết (LinkedList)

Linked List là một cấu trúc dữ liệu được sử dụng để lưu trữ dữ liệu theo tuyến tính. Tức là từ phần tử này có thể biết được phần tiếp theo.

Mỗi phần tử của LinkedList luôn bao gồm một phần dữ liệu và địa chỉ cho phần tử tiếp theo của LinkedList.

Các phần tử LinkedList thường được gọi là các node.

Để đảo ngược một LinkedList, điều quan trọng là mình cần đảo ngược các con trỏ sao cho phần tử tiếp theo (next) trỏ đến phần tử trước đó (previous)

Sau đây là minh họa cho input và output. Mời các bạn cùng theo dõi:

Đầu vào kiểu như sau:

Đảo ngược chuỗi liên kết

Kết quả sau khi chạy thuật toán:

Đảo ngược chuỗi liên kết

Phần head của LinkedList là node đầu tiên. Không có phần tử nào có địa chỉ được lưu trữ ở vị trí này.

Phần đuôi của LikedList là node cuối cùng. Địa chỉ tiếp theo được lưu trữ ở node này là null

Có hai phương pháp để đảo ngược một danh sách liên kết đơn (Linked List)

  • Sử dụng vòng lặp
  • Sử dụng phương pháp đệ quy (recursive)

  Big O độ phức tạp thuật toán

  Thuật toán tham lam (Greedy Algorithm) – Thực hành với C++

Phương pháp dùng vòng lặp để đảo ngược một LinkedList

Để đảo ngược một LinkedList theo cách Iterative, mình cần lưu trữ các tham chiếu của phần tử next và phần tử previous, để chúng không bị mất đi khi mình hoán đổi con trỏ địa chỉ bộ nhớ sang phần tử next trong LinkedList.

Tham khảo hình minh họa dưới đây để thấy rõ hơn cách mình đảo ngược LinkedList bằng cách thay đổi các tham chiếu:

đảo ngược chuỗi liên kết (Linked List)

Cách bước thực hiện
Sau đây là các bước cần thực hiện để đảo ngược LinkedList.

Việc đầu tiên là bạn sẽ phải tạo 3 phiên bản: current, next và previous.

Lặp lại phiên bản tiếp theo cho đến khi phiên bản hiện tại không null:

  • Lưu node tiếp theo của phần tử current trong con trỏ tiếp theo.
  • Đặt node tiếp theo của current thành previous . Đây là dòng MVP.
  • Chuyển từ previous sang current.
  • Chuyển current sang next.

Cuối cùng, vì phần tử current đã đi trước phần tử cuối cùng một bậc, nên mình cần đặt phần head thành phần tử cuối cùng mà chúng ta đạt được. Điều này có sẵn trong previous.

Đặt phần đầu về previous. Do đó, mình có phần head của LinkedList mới và phần tử cuối cùng cũ hơn.

Các bước thực hiện đã rõ ràng rùi đúng không? Giờ chúng ta bắt tay vào viết code để thực hiện thuật toán đó thôi.

Đầu tiên là định nghĩa một Node.

package com.vntalking.linkedlist.reverse;

public class MyLinkedList {

    public Node head;

    public static class Node {

        Node next;

        Object data;

        Node(Object data) {

             this.data = data;
             next = null;
        }
    }
}

Tiếp theo dưới đây là chương trình Java để đảo ngược một LinkedList theo cách Iterative và hiển thị các phần tử của nó ra màn hình console:

package com.vntalking.linkedlist.reverse;

import com.vntalking.linkedlist.reverse.MyLinkedList.Node;

public class ReverseLinkedList {

    public static void main(String[] args) {
        MyLinkedList myLinkedList = new MyLinkedList();
        myLinkedList.head = new Node(1);
        myLinkedList.head.next = new Node(2);
        myLinkedList.head.next.next = new Node(3);

        printLinkedList(myLinkedList);
        reverseLinkedList(myLinkedList);
        printLinkedList(myLinkedList);

    }

    public static void printLinkedList(MyLinkedList linkedList) {
        Node h = linkedList.head;
        while (linkedList.head != null) {
            System.out.print(linkedList.head.data + " ");
            linkedList.head = linkedList.head.next;
        }
        System.out.println();
        linkedList.head = h;
    }

    public static void reverseLinkedList(MyLinkedList linkedList) {
        Node previous = null;
        Node current = linkedList.head;
        Node next;
        while (current != null) {
            next = current.next;
            current.next = previous;
            previous = current;
            current = next;
        }
        linkedList.head = previous;
    }

}

Việc làm C++ lương cao, hấp dẫn dành cho bạn!

Đảo ngược một LinkedList bằng phương pháp đệ quy (recursive)

Trước tiên để đảo ngược một LinkList theo phương pháp đệ quy mình cần chia LinkedList thành hai phần: phần head và phần còn lại.

Ban đầu, phần head chỉ đến phần tử đầu tiên. Phần còn lại chỉ đến phần tử tiếp theo từ phần head.

Mình duyệt lần lượt các phần tử của danh sách bằng kiểu đệ quy cho đến phần tử cuối cùng thứ hai. Khi mình đã đến phần tử cuối cùng, mình đặt phần tử đó làm phần head.

Từ đó, mình thực hiện những việc những việc sau cho đến khi bắt đầu vào LinkedList.

node.next.next=node;
node.next = null;

Để không bị mất dấu vết head gốc, mình sẽ lưu một bản sao của head instance.

Bạn hãy tham khảo hình dưới đây nhé để hiểu rõ hơn nhé.

đảo ngược chuỗi liên kết (Linked List)

Bạn có thắc mắc chương trình Java đảo ngược một LinkedList theo cách đệ quy – Recursive là như thế nào không? Hãy xem chương trình Java dưới đây để hiểu rõ hơn.

public static Node recursiveReverse(Node head) {
    Node first;

    if (head==null || head.next == null)
        return head;

    first = recursiveReverse(head.next);
    head.next.next = head;
    head.next = null;

    return first;
}

Trong đoạn code trên, mình chỉ chuyển head.next trong lệnh gọi đệ quy đến phần tử cuối của LinkedList.

Khi đến cuối, mình đặt phần tử cuối cùng thứ hai làm phần tử tiếp theo của phần tử cuối cùng và đặt con trỏ tiếp theo của phần tử cuối cùng thứ hai thành Null. Phần tử cuối cùng sẽ được đánh dấu là phần head mới.

Nếu bạn muốn đảo ngược chuỗi liên kết bằng cách sử dụng phương pháp đệ quy thì hãy sử dụng mã sau:

myLinkedList.head = recursiveReverse(myLinkedList.head);

Kết quả thu được vẫn giống như cách tiếp cận sử dụng vòng lặp.

Độ phức tạp
– Time Complexity – O(n)
– Space Complexity – O(1)

Cảm ơn bạn đã theo dõi hết bài viết này. Đừng quên like và comment nhé! ❤

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

Xem thêm:

Xem thêm It Job for Developer hấp dẫn trên TopDev