Home Blog Page 166

Sếp nhớ trả lương em gấp 10 nha (phần 1)

Tăng lương em nha sếp vì một mình em code bằng 10 người ấy ạ. Làm sao để trở thành một engineer có công lực gấp mười lần hiện nay? 

Làm sao để trở thành một engineer có công lực gấp mười lần hiện nay? Có 7 cấp độ để các bạn luyện tập mà đảm bảo chính các bạn sẽ bất ngờ về chính mình sau vài tháng nhìn lại.

1. Đả thông tư tưởng – nuôi dưỡng niềm đam mê

Ông bà ta có câu nói

Tư tưởng không thông, vác bình không cũng nặng

Câu tục ngữ nói lên nhiều điều. Nhiều nghiên cứu đã chỉ ra rằng bạn sẽ làm việc hiệu quả nhất với các vấn đề mà bạn cảm thấy hứng thú. Nếu đang làm việc mà bạn cảm thấy không hứng thú, bạn sẽ rất dễ bị xao nhãng, như đang ngồi học bài hay làm việc mà nghĩ đi tới Vũng Tàu, Nha Trang, nghĩ tới cuối tuần sẽ làm gì, nên đi chơi ở đâu… Các bạn thấy quen không? Theo bạn thì bạn có thể trở nên xuất sắc trong lĩnh vực của mình nếu tình trạng này thường xuyên diễn ra không?

tăng lương

Có một số cách để bạn có thể vượt qua được điều này.

Nếu bạn còn là sinh viên, hãy tìm hiểu kỹ hơn về ngành nghề mà bạn đang theo đuổi để biết những gì có thể chờ đón bạn ở phía trước. Bạn còn những lựa chọn nào khác, nên làm gì là tốt nhất ở thời điểm hiện tại? Một khi đã xác định rõ việc mình cần phải làm, thì hãy hết lòng với nó. Tất nhiên nói thì dễ, làm mới khó. Mình tặng bạn các phương pháp chuyên sâu hơn được đề cập ở ý thứ 3 bên dưới và kèm theo link dẫn tới một bài viết khác của mình.

Nếu bạn đang đi làm, với tư cách là người đi đã từng đi làm thuê trong nhiều năm thì mình cũng không ngoại lệ đã có những lúc rơi vào tình cảnh này. Kinh nghiệm đầu tiên giúp mình vượt qua được đó là suy nghĩ một cách công bằng.

Công ty tuyển mình vào làm việc, trả lương sòng phẳng cho mình, nên chừng nào vẫn còn ngồi tại công ty thì nếu là một người biết thế nào là phải trái, là công bằng sẽ biết cần làm việc với thái độ chuyên tâm và chuyên nghiệp nhất có thể. Suy nghĩ này đã giúp mình vượt qua được những ngày mà mình cảm thấy không thích ông sếp hay một bạn đồng nghiệp nào đó trong team.

Thay vì ngồi trách sếp thế này thế nọ, nếu đã thấy không thể gắn bó thì mình sẽ sẵn sàng tìm công việc mới, còn nếu đã quyết định ngồi lại thì mình sẽ vẫn cam kết với công việc của mình. Ngoài ra, trong xã hội kết nối như ngày nay, không gì là bí mật. Bạn hãy làm sao, để sau này dù bạn có ở bất cứ môi trường nào thì mọi người vẫn nói về bạn như là một con người chuyên nghiệp trong công việc.

  Sếp nhớ trả lương em gấp 10 nha (phần 2) - HĐH Ubuntu
  Sếp nhớ trả lương em gấp 10 nha (phần 3) - trình duyệt web

Điều này dĩ nhiên cũng ảnh hưởng rất nhiều đến tín nhiệm của mọi người xung quanh đối với bạn. Và ngạc nhiên chưa, chỉ cần thay đổi thái độ, kết quả làm việc của mình được tốt hơn, lại cảm thấy yêu công việc hơn trước nhiều. Và bật mí luôn, là năm đó, mình đã được tăng lương, thăng tiến lên vị trí tốt hơn và có nhiều thử thách thú vị hơn nhiều đấy.

Trải nghiệm công cụ tính lương gross to net chuẩn tại TopDev

Vấn đề của bạn đang gặp phải là vấn đề của cảm xúc, và bạn đang không điều khiển được nó. Bạn có biết rằng, có nhiều nghiên cứu khoa học về cảm xúc buồn, vui, giận, hạnh phúc, đau khổ, chán nản, xấu hổ, sợ hãi, … tất cả đều chỉ là một trạng thái của tâm trí. Một khi các bạn tập quan sát cảm xúc của mình, bạn sẽ thấy điều này rất rõ.

Và tin vui là, bạn có quyền lựa chọn trạng thái cảm xúc của mình, giống như đơn giản chỉ là bật công tắc chuyển mode sang mode lạc quan. Với một tâm trí lạc quan thì cũng giống như một con máy tính chip Intel core i7 RAM 16GB mới cài hệ điều hành, bạn hiểu tôi đang nói gì Mà chắc bây giờ đã là core i9 RAM 32GB rồi đấy :))

tăng lương

◎ Ngầu quá

Nếu vẫn còn chưa tìm được niềm vui trong công việc cho mình, bạn cũng đừng lo lắng quá. Bạn có biết là niềm đam mê có thể xây dựng được không? Cũng giống như tình yêu cần được vun đắp, như tình yêu thời xưa của ông bà, cha mẹ của bạn. Thời mà bố mẹ đặt đâu con ngồi đấy, hai người cưới nhau mà chưa biết gì về nhau. Ấy thế mà cuộc hôn nhân lại rất bền, tình yêu được bồi đắp dần dần từ không có gì trở nên rất lớn.

Như mẹ của mình là giáo viên, mẹ thường tâm sự với mình là cũng có nhiều lúc chán nghề lắm, lương thấp không đủ trang trải chi phí cho gia đình, hết việc trên trường về nhà lại tiếp tục soạn giáo án, bận rộn suốt ngày. Tuy nhiên, sau đó mẹ mình lại thay đổi suy nghĩ, tập chấp nhận và nghĩ rằng vẫn còn nhiều điều thú vị.

Từ khi thay đổi suy nghĩ, bỗng mẹ mình lại thấy rất nhiều chuyện trước giờ không nhận thấy, tìm thấy những cái hay từ các câu hỏi và câu trả lời của các em học sinh, hay sự ngây thơ của các em sẽ luôn khiến cho tâm hồn của mình cũng trẻ theo, rồi cảm nhận niềm vui vô bờ khi được nhìn thấy những thế hệ mình đào tạo trưởng thành nên người, thành công. Đó đều là những đặc ân của ngành giáo.

Và rốt cuộc là mẹ mình đã theo nghề giáo mấy chục năm đến cả khi về hưu, mà vẫn có thể nuôi được 3 chị em mình học đại học và có công việc tốt, mình thì đi làm ở Hàn Quốc, còn chị mình thì vừa tốt nghiệp tiến sĩ ngành CNTT ĐH Queensland năm trước, hiện đang giảng dạy tại Úc luôn.

Thế nên, nhiều lúc khi câu trả lời còn chưa rõ, hãy tự tin tiến bước, để rồi khi nhìn lại bạn sẽ thấy chặng đường mình đã đi thật thi vị. Cũng giống như bài diễn văn Connecting the dots của Steve Jobs, nhiều việc nhìn tới mình không thể thấy được, nhưng khi nhìn lui lại mọi thứ đều thật kết nối với nhau.

tăng lương

Mình vẫn còn một nghiên cứu và một bí kíp rất hay về chủ đề này, tuy nhiên, bạn hãy thư giãn đọc hết bài này, và bài tập trung và làm việc sâu mình đề cập ở dưới đây trước khi tới phần đó nhé.

2. Gõ bàn phím như hacker

Khi đã đả thông tư tưởng, bạn quyết định đi trên con đường này rồi, giờ sẽ đến lúc cần luyện tuyệt chiêu.

Tuyệt chiêu đầu của bạn cần có để có thể nâng công suất lên 10 lần, là gõ bàn phím được 10 ngón nhé các bạn, và setup tất cả thể loại hotkeys để chỉ với một nhát bạn có thể tung được nghìn chiêu.

tăng lương

◎ Đánh máy 10 ngón siêu tốc – code siêu tốc

Nhớ nhẹ một chút, ngày xưa mình hay chơi các trò chơi đánh chữ mười ngón, sau một hồi cũng lên cơ kha khá đấy. Tốc độ trung bình hiện tại của mình là 117 từ/phút (117wpm), và thỉnh thoảng vẫn tiếp tục luyện.

Ngày nay thì càng có vô vàng trò chơi để tập luyện kỹ năng đánh máy, bạn có thể thử ngay ở đây nhé https://play.typeracer.com/

  Sếp nhớ trả lương em gấp 10 nha (phần 4) - IDE
  Sếp nhớ trả lương em gấp 10 nha (phần 5) - làm việc sâu

Kể vui một chút, lúc phỏng vấn các ứng viên mình thường cho bài test code thật trên máy, nhìn cách các bạn thao tác máy tính và đánh máy mình có thể nhìn ra bạn ấy có phải là dân thực sự ghiền công nghệ hay không, nên cẩn thận cảnh giác với những người tuyển dụng như mình nhé.

3. Tuyệt chiêu phím tắt

Cũng liên quan đến bàn phím, tuyệt chiêu gắn rất chặt với một anh kỹ sư 10x, đó là kỹ năng sử dụng phím tắt (hotkey)

Với những ai dùng hệ điều hành Windows có thể biết có một siêu hotkey là nút Windows, chỉ cần nhấn 1 nút là mở ra ngay Start Menu để có thể truy xuất / tìm kiếm chương trình rất nhanh.

Tiếp tục, thử tưởng tượng nếu bạn cần mở ra trình duyệt file, bạn sẽ làm gì? Bạn có thể bấm thu nhỏ lần lượt từng cửa sổ, rồi rê chuột vào My Computer, rồi nhấp đúp vào. Vậy bạn đã thử bấm tổ hợp phím Windows + E chưa, E là viết tắt của “Explorer” là trình duyệt file đó các bạn. Mở ra ngay trình duyệt file trong vòng 1 nốt nhạc.

Người dùng Mac cũng tương tự, nút Command + Space có thể popup ra Spotlight để tìm và truy xuất chương trình nhanh chóng.

Tuy nhiên, bạn có nghĩ hotkey chỉ dừng lại ở đó không? Theo mình, cái quan trọng hơn hotkey là cái mindset, là tư duy optimize mọi thứ bạn làm. Nếu bạn là người như vậy, bạn sẽ thấy có một khao khát luôn luôn cháy bỏng để đi tìm hotkey cho mọi thao tác trên máy tính, mọi phần mềm. Khi dùng một phần mềm mới, việc đầu tiên của bạn sẽ là đi tìm tổ hợp phím tắt mà nó có hỗ trợ.

Ví dụ list phím tắt của Ubuntu, dĩ nhiên bạn có thể tùy chỉnh lại theo ý thích của mình.

tăng lương

Câu hỏi cho ai dùng Ubuntu: nếu bạn cần mở terminal để đánh câu lệnh, bạn sẽ làm như thế nào? Câu trả lời có thể là dư thừa, bởi mình nghĩ quan trọng ở tư duy của bạn, chỉ cần đặt được câu hỏi, bạn đã có thể có câu trả lời (google là công cụ rất tuyệt vời cho mọi vấn đề mà phải không, không tin nữa ư, bạn có thể thử đánh phím tắt mở terminal ubuntu, hoặc tiếng Anh thì open terminal hotkey ubuntu)

Đá qua một chút, mặc dù không phải phím tắt, bạn đã bao giờ thử vào sheet.new chưa. Thử đi bạn nhé. Rồi bạn sẽ thấy nữa, khi dùng Excel hay google sheet, rất nhiều cụm phím tắt làm bạn “trông pro” hơn nhiều :))

Hãy thử chọn 5 ô liên tiếp trong google sheet, rồi bấm tổ hợp Ctrl Alt +, bạn có thể nhanh chóng chèn ô/hàng/cột từ vị trí ô hiện tại mà không cần rê chuột đi đâu cả.

topdev

Bạn có thể thử với Ctrl Alt - để xóa.

Mình nhắc lại, key của phần này chính là tư duy, nếu bạn có tư duy optimize, bạn sẽ tự đặt câu hỏi và đi tìm để optimize cho mọi thứ bạn làm.

À muốn nữa không? Thử vào doc.new, slide.new để thấy sự kỳ diệu nghen các bạn.

4. Tập trung và làm việc sâu

Đây là một bài mình đã talk ở team VeXeRe và ở BarCamp@SaiGon 2019.

Nếu đọc được sách tiếng Anh, mình khuyến khích các bạn đọc cuốn Deep work của Cal Newport, cuốn sách nêu lên một số luận điểm rất hay và hợp lý để có thể tỏa sáng trong thời đại công nghệ phát triển với tốc độ chóng mặt như ngày nay.

topdev

◎ Tập trung phải như tia laser thế này này

Làm việc sâu – deep work là khả năng làm việc tập trung vào một vấn đề nhiều giờ hay nhiều ngày liên tiếp, không bị gián đoạn.

The ability to perform deep work is becoming increasing rare at exactly the same time it is becoming increasingly valuable in our economy – Deep work hypothesis of Cal New Port

Dịch nghĩa: khả năng làm việc sâu đang trở nên ngày càng hiếm và cũng đồng thời trở nên ngày càng có giá trị trong nền kinh tế ngày nay.

Nhiều công trình lớn trên thế giới như Thuyết tương đối của Einstein, hay lời giải cho Định lý lớn Fermat bởi giáo sư người Anh là Andrew Wiles – sau hơn 350 năm không có lời giải. Luận điểm này dựa trên cơ sở rằng cuộc sống ngày nay đang vận động với tốc độ quá nhanh, nhanh hơn ngày xưa gấp nhiều lần, có vô vàn những cơ hội đồng thời những xao nhãng diễn ra xung quanh chúng ta.

SMS, email, điện thoại, các ứng dụng chat, vô vàn trang web, vô vàn bộ phim hay, vô vàn sách vở, vô vàn mối quan hệ (do thế giới trở nên quá phẳng, một phần từ sự viral quá lớn của mạng xã hội facebook), tất cả điều đó làm cho bạn dường như không thể tập trung vào một vấn đề liên tục trong thời gian dài tốt như thời đại trước nữa. Trừ phi, bạn nhận ra điều đó, nhận thức được sự nghiêm trọng của sự thiếu tập trung, và có mong muốn thực sự trong việc cải thiện nó.

Mình đã dành nhiều thời gian nghiên cứu, thử nghiệm và áp dụng hiệu quả trong thực tế trong những năm gần đây. Bạn có thể tìm hiểu sâu hơn về chủ đề này ở link này

5. Công cụ tốt

Từ lịch sử nghìn năm nay, với công cụ tốt con người đã tạo ra năng suất vượt bậc. Vậy với các bạn lập trình viên, còn chần chờ gì nữa mà không tự kiếm cho mình bộ công cụ tốt nhất? Bộ môn này cũng có từ cơ bản đến nâng cao, và dành riêng cho người dùng Mac và Windows. Tôi sẽ sớm public các bài tiếp theo để các bạn có thể vọc liền tay.

tuyển dụng it

◎ Hình mình họa: với chiếc máy gặt đập liên hợp này không còn cảnh một dàn các bác nông dân cầm liềm để gặt lúa, rồi vác từng bao về nhà để xay nữa.

Có rất nhiều loại công cụ tốt cho nhiều mục đích khác nhau.

Với các bạn lập trình viên quen dùng Windows, bạn có thể xem xét chuyển về dùng Linux (Ubuntu là một lựa chọn tốt). Với việc hỗ trợ tốt với các thao tác bằng bàn phím, hỗ trợ docker native, độ tương thích cao đối với rất nhiều framework opensource hiện nay. Có thể nói đây là môi trường rất tốt cho dev. Bạn có thể xem hướng dẫn cách cài đặt môi trường Ubuntu làm thế nào để có thể đạt hiệu suất cao nhất dành cho dev ở đây

Một tin vui khác cho các bạn không nỡ rời xa HĐH Windows, cùng với bản cập nhật vào cuối tháng 4 này, Microsoft sẽ mang đến cho bạn rất nhiều cải tiến tuyệt vời, đáng chú ý là sự hỗ trợ chính thức cho môi trường Windows Subsystem for Linux thế hệ thứ 2 – hỗ trợ Linux native 100% dẫn đến việc bạn có thể chạy docker ngay bên trong WSL, kèm theo đó rất nhiều tiện ích hỗ trợ cho công việc như đặt tên màn hình ảo để tiện gom nhóm các phần mềm theo công việc (cái này rất quan trọng trong việc nâng cao sự tập trung và tăng hiệu suất khi chuyển qua lại giữa các chương trình).

Mình đã thử cài bản Insider Preview về cài và test thử, mọi thứ rất tuyệt vời. Nếu bạn quan tâm, hãy để lại comment bên dưới mình sẽ viết tiếp một bài hướng dẫn chi tiết cách tweak HĐH Windows như thế nào cho hiệu suất gấp 10 nhé.

Đối với các bạn đang dùng máy Mac, tin vui cho các bạn là đó là một lựa chọn rất sáng suốt. HĐH MacOS vốn xuất thân từ gốc Unix nên các câu lệnh bash tương thích với Linux, rất tiện cho việc lập trình. Đồng thời, Apple luôn nổi tiếng trau chuốt rất nhiều trong trải nghiệm người dùng, do đó qua việc quan sát các bạn dùng MacOS, mình thấy đa phần khá ổn.

Còn có cả nghiên cứu nói rằng những người dùng máy Mac thường có hiệu suất cao hơn các HĐH khác 30% cơ đấy, điều này tất nhiên cần kiểm chứng kỹ hơn. Tuy nhiên ngay cả nếu bạn đang dùng máy Mac, vẫn có rất nhiều tuyệt chiêu để nâng tiếp 10 lần hiệu suất nữa. Một trong số đó bạn có thể tham khảo từ phần hướng dẫn setup cho HĐH Ubuntu (các phần liên quan đến terminal, zsh, vì các phần mềm này chạy được trên MacOS). Phần còn lại mình hẹn sẽ đề cập trong bài viết khác.

6. Kỹ năng đặt mục tiêu và quản lý thời gian để đạt mục tiêu

Lẽ dĩ nhiên, cách duy nhất mà sếp của bạn đánh giá bạn là qua các mục tiêu mà sếp đặt ra cho bạn, hoặc do bạn tự đặt ra, và khả năng đạt được hay vượt các mục tiêu đó.

Thế nên, để nhắc nhỏ sếp tăng lương cho bạn, cách tốt nhất là bạn hãy chứng tỏ mình có thể đạt được các mục tiêu đầy tham vọng, liên tục và thường xuyên. Nếu bạn đã được như vậy rồi, bài viết này không dành cho bạn. Nếu không thì bạn hoặc là thuộc tuýp người không đặt mục tiêu, hoặc là thuộc tuýp người đặt mục tiêu nhưng không làm nó tới cùng.

Có bao nhiêu lần bạn buông một câu kiểu như Mình quyết tâm học Anh Văn, hay Mình quyết tâm từ nay sẽ chạy bộ mỗi sáng Các mục tiêu vô thưởng vô phạt như vậy là một trong những lý do rất lớn khiến cho bạn không thể đạt được mục tiêu. Vì mục tiêu không rõ ràng và cũng như không có bất cứ động lực nào rõ ràng để hoàn thành nó.

Mình tham gia nhiều khóa học và đọc nhiều sách về chủ đề này. Cuốn tâm đắc nhất và là cuốn gối đầu giường của mình là cuốn 7 thói quen của người thành đạt của tác giả Stephen Covey. Và vì chủ để này rất hay cũng như để có thể giúp được bạn thì nó cần được mô tả có logic và đầy đủ hơn, do đó mình xin phép được chia sẻ riêng trong một bài viết sau.

Tuy nhiên, bạn có thể giúp mình trước hết bằng việc thử đi trả lời các câu hỏi sau:

  • Đâu là 3 lý do lớn nhất khiến mình trì hoãn không chịu đặt mục tiêu?
  • Đâu là 3 lý do lớn nhất khiến mình thất bại trong việc hoàn thành mục tiêu?
  • Nếu chỉ chọn một mục tiêu có thể đạt được trong năm 2020, bạn sẽ chọn mục tiêu đó là gì?

7. Lối sống cân bằng từ bên trong

Bạn là lập trình viên, bạn biết rất rõ một chiếc máy vi tính sẽ không thể đạt được hiệu suất cao nhất nếu CPU trở nên quá nóng và luôn trong tình trạng chạy 100% công suất.

Do đó bạn cần luôn nhìn nhận lại cuộc sống của chính mình, có gì mất cân bằng không? Lưu ý việc mất cân bằng và việc dành quá nhiều thời gian cho công việc không hẳn là liên quan với nhau, nếu bạn làm mà cảm thấy như không làm, làm mà cảm thấy vẫn như đang chơi thì tinh thần vẫn hoàn toàn thoải mái và hiệu suất vẫn cao.

Vậy làm sao để có thể có được lối sống cân bằng đó?

Cách đây hơn 5 năm, mình đã rất may có cơ duyên được tiếp xúc với một phương pháp mà dạo gần đây đang ngày càng được quan tâm rộng rãi, đó là thiền. Không như suy nghĩ của nhiều bạn, thiền có thể không liên quan đến tôn giáo nào cả. Có một phương pháp gọi là thiền chú ý hay thiền chánh niệm, tiếng anh gọi là mindfulness meditation và nó đơn giản đến nỗi bất kỳ ai cũng có thể tập được.

Thiền được định nghĩa là khi một người tập trung toàn bộ cảm xúc, cảm giác và suy nghĩ của mình vào một sự vật, sự việc và không có bất cứ phán xét gì tại một thời điểm nhất định trong hiện tại. Chỉ với 5 phút mỗi ngày, ngồi yên không suy nghĩ hoặc đơn giản là theo dõi nhịp thở vào ra, bạn đã có thể bước vào con đường thiền định để ổn định tâm trí và tạo sự tập tập trung tối đa cho mọi vấn đề hóc búa.

Ngoài nâng cao hiệu suất tập trung, thiền còn có tác dụng khác. Nói nôm na là trong bạn có hai thành phần quan trọng nhất là cơ thể và tâm hồn. Xưa giờ bạn đã rất thiên vị khi chỉ suốt ngày chăm sóc cho thân thể, tập gym, chạy bộ mà không bao giờ để ý đến tâm hồn của mình. Lẽ dĩ nhiên cái gì mất cân bằng đều sẽ không tốt. Và thiền chính là cách để cho bộ não tạm thời nghỉ ngơi một cách toàn diện.

Dưới đây là một câu chuyện Ông vua và 4 bà vợ rất sâu sắc, bạn có thể nghe và cảm nhận.

Bộ môn này thật ra có cả trăm điều vi diệu khác và tôi hứa sẽ truyền tải đến với các bạn ở các bài viết sau. Phương Tây đã nghiên cứu rất nhiều về các phương pháp làm sao để thành công, như giao tiếp thành công, quản lý thời gian thành công, quản lý cảm xúc thành công.

Tuy nhiên, điều đáng chú ý là tất cả phương pháp đó đều đúng, nhưng hoàn toàn không dễ để thực hiện. Và không may là sự khác biệt lại nằm ở phần thực hiện những nguyên tắc ấy. Gần đây hơn, có nhiều nghiên cứu của khoa học phương Tây dành cho thiền, họ đã khám phá ra vô vàn điều thú vị xung quanh, mà có thể rút gọn lại một ý là nếu bạn tập thiền thường xuyên, bạn có thể làm được những điều mà đáng lẽ bạn nên làm để thành công, một cách đều đặn và thường xuyên.

Thế đấy, vượt qua 7 cấp độ này, bạn sẽ không còn nhận ra mình nữa đâu. Thế giới quan thay đổi, bạn thành công, lương cao, công việc tốt. Hẹn gặp lại bạn sớm trong các bài viết chuyên sâu kì sau.

Tác giả: Long Luong

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

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

Tác giả: Lưu Bình An

Nếu đang muốn tìm những ví dụ thực tế sử dụng map và reduce, quá chán với ví dụ cộng số, bài viết này chính là dành cho bạn.

Xóa phần tử trùng trong mảng

Bạn có một mảng String, Number, giờ chúng ta xóa đi các phần tử bị trùng giá trị. Chúng ta sử dụng kiểu Set để đạt được mục đích này

let values = [3,1,3,5,2,4,4,4];
let uniqueValues = [...new Set(values)];
// uniqueValues [3,1,5,2,4]

Phương thức search đơn giản, phân biệt hoa thường

  10 câu hỏi javascript để nâng cao trình độ
  12 Thư viện JavaScript trực quan hoá dữ liệu hot nhất năm 2024

Chúng ta dùng hàm filter để tạo mảng mới, với điều kiện phần tử đó includes một String hoặc thỏa một expression

let users = [
  { id: 11, name: 'Adam', age: 23, group: 'editor' },
  { id: 47, name: 'John', age: 28, group: 'admin' },
  { id: 85, name: 'William', age: 34, group: 'editor' },
  { id: 97, name: 'Oliver', age: 28, group: 'admin' }
];
let res = users.filter(it => it.name.includes('oli'));
// res is []

Search đơn giản, không phần biệt hoa thường

Chúng ta dùng RegExp để lọc theo điều kiện

let res = users.filter(it => new RegExp('oli', "i").test(it.name));
// res is
[
  { id: 97, name: 'Oliver', age: 28, group: 'admin' }
]

Kiểm tra user có nằm trong group admin không

Dùng phương thức some() để kiểm tra có ít nhất một element trong mảng thỏa điều kiện đặt ra

let hasAdmin = users.some(user => user.group === ‘admin’);
// hasAdmin is true

Giảm số chiều của mảng

Nếu chúng ta có một mảng […[], …[1,2,3]], và chúng ta muốn transform nó thành [1,2,3]

let nested = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
let flat = nested.reduce((acc, it) => [...acc, ...it], []);
// kết quả: [1, 2, 3, 4, 5, 6, 7, 8, 9]

Ở đây chúng ta không có quan tâm đến performance, nên dùng luôn spread operator bên trong reduce().

Còn đây là cách của Paweł Wolak, không sử dụng Array.reduce

let flat = [].concat.apply([], nested);

Xem thêm nhiều việc làm JavaScript hấp dẫn tại TopDev!

Tạo một object chứa 1 key được tính toán

let users = [
  { id: 11, name: 'Adam', age: 23, group: 'editor' },
  { id: 47, name: 'John', age: 28, group: 'admin' },
  { id: 85, name: 'William', age: 34, group: 'editor' },
  { id: 97, name: 'Oliver', age: 28, group: 'admin' }
];

let groupByAge = users.reduce((acc, it) =>
({...acc, [it.age]: (acc[it.age] || 0) + 1 }),
{});

Tạo một object từ mảng

Thay vì tiến hành trên cả array để tìm user theo id, chúng ta tạo một object mới, trong đó user id sẽ là key của object này, truy xuất sẽ nhanh hơn.

let uTable = users.reduce((acc, it) => ({...acc, [it.id]: it }), {})

// kết quả
{
  11: { id: 11, name: 'Adam', age: 23, group: 'editor' },
  47: { id: 47, name: 'John', age: 28, group: 'admin' },
  85: { id: 85, name: 'William', age: 34, group: 'editor' },
  97: { id: 97, name: 'Oliver', age: 28, group: 'admin' }
}

Lấy giá trị unique của các item trong một mảng

Chúng ta có mảng user, mỗi user có thuộc vào một group khác nhau, chúng ta sẽ lấy tất cả group đang tồn tại trong mảng user

let listOfUserGroups = [...new Set(users.map(it => it.group)];
// kết quả: listOfUserGroups is ['editor', 'admin'];

Đảo giá trị key-value trong object

let cities = {
  Lyon: 'France',
  Berlin: 'Germany',
  Paris: 'France'
};
let countries = Object.keys(cities).reduce(
  (acc, k) => (acc[cities[k]] = [...(acc[cities[k]] || []), k], acc) , {});
// countries is
{
  France: ["Lyon", "Paris"],
  Germany: ["Berlin"]
}

Nếu đoạn code trên quá phức tạp, quá khó hiểu, viết lại như thế này cho dễ dòm hơn

let countries = Object.keys(cities).reduce((acc, k) => {
  let country = cities[k];
  acc[country] = [...(acc[country] || []), k];
  return acc;
}, {});

Chuyển đổi mảng chứa giá trị độ F sang giá trị độ C

Có thể áp dụng để chuyển đổi tiền tệ, khối lượng, …

let celsius = [-15, -5, 0, 10, 16, 20, 24, 32]
let fahrenheit = celsius.map(t => t * 1.8 + 32);
// kết quả [5, 23, 32, 50, 60.8, 68, 75.2, 89.6]

Chuyển object thành query string

let params = {lat: 45, lng: 6, alt: 1000};
let queryString = Object.entries(params).map(p => encodeURIComponent(p[0]) + '=' + encodeURIComponent(p[1])).join('&')
// kết quả "lat=45&lng=6&alt=1000"

Echo ra bảng giá trị dữ liệu

let users = [
  { id: 11, name: 'Adam', age: 23, group: 'editor' },
  { id: 47, name: 'John', age: 28, group: 'admin' },
  { id: 85, name: 'William', age: 34, group: 'editor' },
  { id: 97, name: 'Oliver', age: 28, group: 'admin' }
];

users.map(({id, age, group}) => `\n${id} ${age} ${group}`).join('')
// kết quả
"
11 23 editor
47 28 admin
85 34 editor
97 28 admin"

Tìm và thay thế key-value trong một mảng object

  5 câu hỏi javascript và cách đánh bại chúng

Ví dụ chúng ta đổi giá trị tuổi của một user users[1].age = 29, đó là trong trường hợp ta biết giá trị index user muốn đổi, chúng ta tạo hẳn một mảng mới và thay đổi giá trị của phần tử mong muốn. Tại sao lại làm vậy? Để chúng ta có thể so sánh nhanh updatedUsers == user

let updatedUsers = users.map(
  p => p.id !== 47 ? p : {...p, age: p.age + 1}
);

Union hay mảng

Không cần union của ladash, chúng ta dùng Set để giải quyết vấn đề này.

let arrA = [1,4,3,2];
let arrB = [5,2,6,7,1];

[...new Set([...arrA, ...arrB])];
// kết quả: [1, 4, 3, 2, 5, 6, 7]

Lấy kết quả giao nhau giữa 2 mảng

let arrA = [1, 4, 3, 2];
let arrB = [5, 2, 6, 7, 1];

arrA.filter(it => arrB.includes(it));
// kết quả: [1,2]

Link bài viết gốc: 15 Useful JS Examples of map(), reduce() and filter()

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

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

Xem thêm việc làm IT tại Hồ Chí Minh, Đà Nẵng, Hà Nội lương cao

Các công ty công nghệ Việt Nam và thách thức trong việc chuyển mình thời Covid – 19

Thập kỷ mới mở ra với nhiều sự phát triển vượt bậc về công nghệ số, trí tuệ nhân tạo, con người nhân sự,… và điều này tạo ra một lợi thế cạnh tranh rất lớn cho các công ty thuộc lĩnh vực công nghệ nói riêng và các tổ chức/doanh nghiệp khác nói chung. Tuy nhiên, Covid-19, “cơn bão” xuất hiện trong hơn hai tháng gần đây đã phủ lên nền kinh tế toàn cầu một màu xám ảm đạm. 

Nhận thấy việc bật chế độ “sinh tồn” là điều hoàn toàn cần thiết trong thời điểm hiện tại, nhiều doanh nghiệp Việt Nam dường như đã sẵn sàng ứng phó với thời giai đoạn khó khăn này. Ông Nguyễn Hữu Bình, CEO TopDev chia sẻ: “Chúng ta luôn thấy ánh sáng trong những thời khắc khó khăn nhất, đó chính là sự linh động và sáng tạo trong việc thích ứng của nhiều doanh nghiệp trong nước. Có vẻ, Việt Nam đã có sự chuẩn bị cho sự thay đổi đặc biệt là việc số hóa doanh nghiệp ngày càng được thúc đẩy hơn bao giờ hết.”

Thách thức chuyển mình và sự thích ứng toàn diện

Kịp thời nắm bắt những quy định được chính phủ ban hành nhằm hướng đến sự an toàn lao động và đảm bảo chu kỳ hoạt động doanh nghiệp, các nhà quản lý đã có những thông tin chi tiết giúp nhân viên trang bị đầy đủ những kiến thức quan trọng nhất, sẵn sàng “chiến đấu” trong mùa dịch bệnh. 

Thách thức lớn nhất của các công ty công nghệ nói riêng và các doanh nghiệp nói chung trong giai đoạn này chính là việc làm thế nào để đảm bảo các đầu công việc, kiểm soát dòng tiền và quan trọng nhất chính là giá trị và lợi ích sức khỏe của mỗi nhân viên.

“Remote Work” or “Work From Home” là giải pháp thiết thực nhất được áp dụng với việc tối ưu hóa song song các quy trình vận hành và công cụ hỗ trợ thực hiện công việc. Đồng thời, các nhà quản lý nhấn mạnh việc cải cách và tuân thủ các quy định, ứng dụng công cụ quản lý và tinh gọn quy trình sẽ có ý nghĩa quan trọng trong việc tái định hình được cách quản lý, cam kết hệ thống  hoạt động vẫn được diễn ra chặt chẽ.

Minh chứng cụ thể nhất cho giải pháp này chính là sự ra đời của các mô hình quản lý dần chuyển giao từ offline sang online, sau đó đề xuất hướng tập trung vào 50% nguồn lực để tiếp tục theo dõi tình hình hoàn động thực tế. Tuy nhiên, để tối ưu hóa mô hình hoạt động và giảm thiểu những ảnh hưởng tiêu cực thì ứng với từng doanh nghiệp khác nhau sẽ có cách thức thực hiện khác nhau. Cắt giảm một số chi phí không cần thiết, sa thải nhân sự hay thậm chí là dừng hoạt động công ty đều là những cách thức được các doanh nghiệp thực thi tính đến thời điểm hiện tại. 

Tuy nhiên, sự thích ứng toàn diện nằm ở việc một tổ chức được bảo vệ khi áp dụng những chính sách cụ thể, có tính hệ thống và sự hợp tác, đoàn kết của một tập thể. Lãnh đạo, quản lý nhân sự, nhân viên, các ứng viên hay nói bao quát hơn là người đứng đầu tổ chức và các phòng ban đều có vai trò quan trọng đối với sự thích ứng này.

Đi tiên phong trong việc tạo động lực, kết nối các ứng viên và chia sẻ những quy trình, kiến thức chuyên môn để thích ứng linh hoạt, thay đổi để lấp đầy những điểm thiếu sót để tạo ra sự liên kết vững mạnh trong chính tập thể. Dù vận hành công việc ở bất cứ nơi đâu, ý thức cá nhân luôn quan trọng, cùng với đó là sự am hiểu về văn hóa của tổ chức và những đầu việc được phân công. Khi đã nắm bắt đầy đủ, chính xác và có sự tương tác bền vững, việc kiểm soát chỉ số đo lường hiệu suất làm việc – KPI và tiến độ công việc vẫn diễn ra trôi chảy và hiệu quả.

Thách thức từ những lo ngại thực tế

Từ chính sự ghi nhận thực tế và những phỏng đoán trong tương lai gần, nhà tuyển dụng nhân sự – tức bộ phận chính trực tiếp tuyển chọn và quản lý nguồn nhân lực tiềm năng và các ứng viên đã có những lo ngại nhất định về tình hình công việc.

Đối với nhà tuyển dụng, đặc biệt là trong các công ty về công nghệ, các nhà quản lý đang đề ra những giải pháp để có thể duy trì lượng nhân viên của công ty và một trong những giải các được các phòng ban nhân sự hiện đang áp dụng chính là tạo ra một quy trình phỏng vấn trực tiếp ví dụ như sử dụng videoCV hoặc một số công cụ hỗ trợ khác giúp quy trình tuyển dụng diễn ra một cách mượt mà hơn. Thực tế tình hình khi có sự thích ứng toàn diện về chu trình vận hành công việc, nhà tuyển dụng khó khăn hơn trong nhu cầu tìm ứng viên. Vì thế, những lo lắng vào thời điểm này như làm thế nào để chăm sóc và quản lý các nhân viên, duy trì mối quan hệ tốt với các bên cung ứng nguồn lực phù hợp,.. thật sự hợp lý và là điều cần có để mỗi doanh nghiệp tập trung đưa ra những kế hoạch giải quyết hiệu quả.

Đối với các ứng viên, ảnh hưởng từ đại dịch Covid – 19 cũng làm hạn chế khả năng tìm kiếm những cơ hội, thậm chí một số ứng viên đã là nhân viên, freelancer, part time đã phải dừng hoạt động vì sự giảm thiểu về cơ chế nhân sự. Các ứng viên vẫn có thể tìm việc thông qua hệ thống mạng xã hội, các kênh truyền thông tuy nhiên, việc phỏng vấn có thể bị gián đoạn trong thời gian dài hoặc nếu có, nhà tuyển dụng cũng không thể có những đánh giá chính xác về nhân viên đó có phù hợp hay không.

Một trong những dẫn chứng cụ thể nhất cho thấy rõ thách thức từ những lo ngại thực tế đến từ các lập trình viên – những con người nhân sự quan trọng trong lĩnh vực IT. Cụ thể theo Báo cáo thị trường IT Việt Nam quý 1/2020 – Phần 1, số liệu được tổng hợp tương ứng với 37.5% trong số họ sợ rằng mình sẽ bị mất việc hoặc thu nhập sẽ bị ảnh hưởng. Con số này cũng nói lên mức độ lo ngại của họ bởi tùy công ty sẽ có các hình thức phân bổ nhân sự mùa dịch khác nhau. Họ có thể sẽ mất việc, có thể sẽ lại khó khăn hơn trong một “sàn thương mại công nghệ” với lợi thế cạnh tranh rất khốc liệt. 

Đâu là giải pháp hóa dữ thành lành trong tâm bão?

Việc kịp thời nhận ra những thách thức và có những hướng giải quyết cụ thể sẽ giúp các doanh nghiệp đảm bảo được tính ổn định trong tâm bão Covid – 19.

Với một kịch bản hoàn hảo nhất, chúng ta hoàn toàn có thể hy vọng dịch bệnh sẽ sớm được kiểm soát tốt. Như đã chia sẻ từ đâu bài viết, các doanh nghiệp đang bật chế độ “sinh tồn” nhằm giảm thiểu những tổn thất không đáng có và đảm bảo nhu cầu phát triển nhân lực cho công ty. Để có một chiến lược hoàn hảo giúp hóa dữ thành lành trong tâm bão, các doanh nghiệp nên tìm hiểu những thay đổi trong nhu cầu chung và hành vi của các đối tác để đưa ra những giải pháp nhanh chóng, phù hợp nhất.

Có ba điều mà doanh nghiệp cần tập trung như triển khai như sau:

  • Làm quen với việc dùng các công cụ tiên tiến để hỗ trợ quản lý và thực hiện công việc hiệu quả: Hướng đến mục tiêu số hóa doanh nghiệp (Digital Transformation). Đây được xem là bước khởi đầu thuận lợi giúp doanh nghiệp có thể chuyển mình mạnh mẽ hơn đồng thời tạo lợi thế cạnh tranh trong nền thời đại phát triển của công nghệ số.
  • Hợp tác và hỗ trợ nhau cùng phát triển và khắc phục các thiệt hại: Ví dụ như đưa ra các chương trình, các gói sản phẩm giúp doanh nghiệp có thể nhanh chóng phục hồi nhân lực cũng như tái cấu trúc quy trình quản lý và làm việc của công ty.
  • Đối với bộ phận tuyển dụng, cần lên kế hoạch triển khai các phương án phát triển sau mùa dịch: Doanh nghiệp cần tập trung tái đầu tư Employer Branding và Candidate Engagement, đây cũng là dịp để doanh nghiệp tối ưu lại nguồn nhân sự cũng như làm mới các phương thức tuyển dụng về sau.

Những thách thức hiện tại không chỉ là khó khăn mà còn là cơ hội để các doanh nghiệp đủ tiềm lực có thể chuyển mình và phát triển nhiều hơn. Sự quan tâm đúng mực từ các lãnh đạo cùng sư phối hợp đồng bộ của tập thể nhân sự của sẽ tạo ra sự thay đổi lớn trong tương lai. Covid – 19 hiện tại đã được kiểm soát, tuy nhiên mọi tổ chức vẫn phải trong tư thế sẵn sàng, cập nhật và theo dõi tình hình chung để có nắm bắt nhanh chóng những xu hướng quản lý và phát triển nhân sự mới sao cho phù hợp với quy mô hoạt động của từng tổ chức/doanh nghiệp.

Xem đầy đủ báo cáo tại đây

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

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

CƠ HỘI NÀO DÀNH CHO NHÂN SỰ NGÀNH IT GIỮA KHỦNG HOẢNG COVID-19

COVID-19 đang ngày càng diễn biến phức tạp, kéo theo nhiều hậu quả không nhỏ cho kinh tế tại Việt Nam nói chung và ngành công nghệ nói riêng. Nhiều doanh nghiệp thu hẹp hoạt động sản xuất, kinh doanh khiến số lượng lớn lao động bị mất việc. Bên cạnh đó, người lao động có xu hướng nhảy hoặc tìm việc nhiều ở thời điểm tháng 3 và tháng 4, nhưng do ảnh hưởng của dịch bệnh đã làm cản trở đến kế hoạch.

Mặt khác, nhiều ngành công nghiệp vẫn có nhu cầu cấp thiết đối với nguồn lực công nghệ, từ duy trì cơ sở hạ tầng đám mây cho đến thiết kế các trang thương mại điện tử. Việc hạn chế những nơi đông người và tăng cường mua sắm trực tuyến khiến các doanh nghiệp chuyển đổi hành vi mua sắm tại điểm bán sang đẩy mạnh phát triển các nền tảng mua sắm online, dẫn đến nhu cầu tuyển dụng các vị trí liên quan đến phát triển thương mại điện tử tăng cao. Các vị trí như System Engineer, Business Analyst hay Product Manager đều đóng vai trò quan trọng trong việc điều chỉnh lại các hoạt động của công ty để đối phó với tình hình như hiện nay. Công nghệ trở nên quan trọng hơn bao giờ hết khi Việt Nam lẫn thế giới đang vật lộn với khủng hoảng mang tên COVID-19.

Tuy nhiên, tính đến nay nguồn lực công nghệ vẫn đang trong tình trạng thiếu hụt do ứng viên ngại các cuộc phỏng vấn trực tiếp sẽ là nguyên nhân gây lây nhiễm dịch bệnh. Vì thế, nhiều doanh nghiệp đưa ra giải pháp phỏng vấn online để có thể dễ dàng tiếp cận ứng viên hơn trong tình hình dịch bệnh như hiện nay. Một số vị trí đang được các công ty hàng đầu săn đón hiện nay như:

Bạn là một Developer và đang nỗ lực thích nghi với tình hình, có lẽ đây là thời gian để bạn làm quen với việc chạy deadline nghiêm túc tại nhà. Hay bạn đang tìm kiếm công việc mới, hãy dành thời gian để chuẩn bị kỹ càng kiến thức để sẵn sàng cho một cuộc phỏng vấn online từ các nhà tuyển dụng. 

Bên cạnh đó, TopDev đã cho ra mắt VideoCV – Giải pháp phỏng vấn video xử lý trăm ứng viên mỗi ngày, với ưu điểm: 

  • Không “text” dài dòng;
  • Không mất nhiều thời gian;
  • Hoàn toàn miễn phí;
  • Không khó để thực hiện. 

Công cụ này sẽ giúp các Ứng viên lẫn Nhà tuyển dụng dễ dàng tiếp cận trong mùa dịch đang diễn biến phức tạp như hiện nay.

VideoCV sẽ giúp cho các Ứng viên:

  • Trả lời phỏng vấn bất kỳ lúc nào, không phụ thuộc lịch của nhà tuyển dụng;
  • Trả lời phỏng vấn một lần gửi cho nhiều nhà tuyển dụng;
  • Kể câu chuyện của riêng bạn – Điều mà dạng CV truyền thống không làm được.

Với VideoCV, Nhà tuyển dụng:

  • Không cần lên lịch trước như phỏng vấn offline hoặc video call, chỉ việc gửi yêu cầu trả lời câu hỏi;
  • Phỏng vấn được nhiều ứng viên hơn, hiệu quả hơn nữa với lượng ứng viên lớn;
  • Đánh giá ứng viên toàn diện, không tốn thời gian để phỏng vấn.

⇒ Hãy chuẩn bị sẵn sàng cho cuộc phỏng vấn online tốt nhất cùng VideoCV.

⇒ Giữa khủng hoảng Covid-19, hãy thật sự bình tĩnh, lựa chọn cho mình những cơ hội trong thử thách, chuẩn bị cho sự trở lại thật sự bùng nổ bạn nhé!

Làm việc từ xa (remote) – Chính sách nhân sự mới của doanh nghiệp trong mùa dịch

Làm việc online – từ xa đang trở thành chính sách chung được nhiều doanh nghiệp áp dụng, đặc biệt là các doanh thuộc lĩnh vực về công nghệ. Đây được xem là “nước cờ” thông minh vì nó không những giúp các doanh nghiệp kiểm soát, duy trì hoạt động, giảm thiểu các chi phí mà còn là phương pháp an toàn nhằm ngăn chặn sự lây nhiễm của dịch bệnh Covid-19.

Khi bước sang một thập kỷ mới, ngành Nhân sự đã có những bước phát triển vượt bậc. Song, “sự sống” của các tổ chức/doanh nghiệp đang bị đe dọa bởi những tác động đa chiều từ đại dịch lớn – Coronavirus. Vì thế, để có thể hạn chế tối đa những ảnh hưởng, đồng thời thực thi lời phát động chủ trương “Hãy ở nhà nhiều nhất có thể” từ Chính Phủ, giải pháp làm việc từ xa càng trở quan trọng hơn bao giờ hết.

Vậy những lý do nào khiến làm việc từ xa trở thành “xu hướng”?

Theo số liệu thống kê của Global Wokplace Analytics, lực lượng nhân sự gia nhập đội ngũ làm việc từ xa ở Mỹ tăng 159% kể từ năm 2005. Xu hướng này ban đầu được dự đoán sẽ lan rộng sang thị trường châu Á nói chung và Việt Nam nói riêng trong những năm tới, nhưng dường như đang diễn ra sớm hơn do sự tác động của đại dịch Covid-19.

Nhiều biến động liên quan đến công tác tổ chức nhân sự và mục tiêu phát triển doanh nghiệp đã phát sinh sau hơn 2 tháng Covid-19 xuất hiện. Thậm chí, nhiều công ty có nguy cơ “phá sản” cả về vật chất lẫn nguồn lực lao động. Họ đã phải tạm dừng mọi hoạt động tại văn phòng nhằm phòng tránh dịch bệnh lây lan.

Chính vì vậy, làm việc từ xa được coi là giải pháp thiết thực nhất hiện nay khi có thể giúp doanh nghiệp duy trì được hoạt động kinh doanh, tránh rơi vào tình trạng đóng băng dẫn đến thua lỗ hay thậm chí là phá sản.

Tham khảo việc làm remote IT lương cao trên TopDev

Nắm bắt tốt hơn về tình hình chung

Được xem là giai đoạn nhạy cảm và thực hiện nghiêm túc quá trình “tự cách ngày 14 ngày” kể từ khi Chính Phủ có chỉ thị, mỗi nhân viên giờ đây có thể tập trung “Work from home” mà không phải rơi vào tình trạng hoang mang. lo lắng. Đồng thời, nhân viên có thể theo dõi những thông tin, diễn biến chính xác nhất về tình hình dịch bệnh bởi các số liệu được ghi nhận và thống kê mỗi ngày. 

Điều này bước đầu đã tạo được hiệu quả khi mỗi người có thể hiểu rõ những gì đang diễn ra xung quanh mình. Và tất nhiên, đây cũng không phải chỉ dừng lại ở việc tổ chức phân bố nhân sự mà nó còn liên quan đến giá trị hạnh phúc và những quyền lợi về bảo vệ sức khỏe cho nhân viên của một tổ chức.

  Kinh nghiệm Remote work - Làm việc từ xa

Giảm chi phí và hạn chế sự lây nhiễm dịch bệnh

Khi thực hiện giải pháp làm việc từ xa, nhân viên và người cả nhà quản lý có thể tiết kiệm đáng kể mọi chi phí từ phí sinh hoạt cá nhân, phí cho bất động sản hay các loại chi phí về dịch vụ mạng, điện, nước, máy lạnh,…

“Ở nhà nhiều nhất có thể” là câu nói được nhiều người quan tâm khi nhận thấy tình hình diễn biến quá phức tạp. Thật vậy, đó là một trong những việc làm giúp ngăn chặn dịch bệnh tốt nhất hiện nay. Các doanh nghiệp cũng đã có những giải pháp cụ thể bằng cách vận hành mọi hoạt động công việc từ xa giúp giảm thiểu sự tiếp xúc giữa người và người, từ đó ngăn chặn sự lây lan của dịch bệnh một cách tốt hơn.

Nhân viên làm việc hiệu quả hơn

Nếu xét riêng trong mô hình nhân sự trước đó, nhiều nhân viên chia sẻ họ cảm thấy làm việc từ xa sẽ mang lại sự thoải mái và hiệu suất làm việc cũng vượt trội hơn. Điều này không quá khó hiểu bởi họ có thể tiếp cận nhiều thông tin, được hỗ trợ nhiều công nghệ hơn (do họ tự tìm kiếm) thay vì chỉ tập trung làm một công việc và gói gọn trong mối quan hệ giữa các đồng nghiệp qua vài câu nói.

Hầu hết những người trưởng thành đều có mối lo lắng là họ không có thời gian chăm sóc cho gia đình hay thời gian dành cho những nhu cầu riêng của bản thân. 

Ngoài ra, làm việc từ xa ở bất cứ nơi đâu có thể giúp nhân viên cân bằng được cuộc sống và công việc của mình. Tổng hợp số liệu từ một khảo sát với hơn 25.000 nhân viên từ các quốc gia Nhật Bản, Trung Quốc, Pháp, Úc, Nga,… cho thấy rằng gần ⅔ trong số họ thực sự làm việc hiệu quả bởi vì họ có thể bắt đầu ngày làm việc sớm hơn và kết thúc muộn hơn khi không cần đến văn phòng. 

  6 giải pháp công nghệ hữu ích cho phòng nhân sự của bạn

Góp phần giúp doanh nghiệp chuyển đổi số nhanh hơn

Trước những thách thức của một thị trường nhân sự đang thay đổi theo xu hướng toàn cầu hóa, các nhà lãnh đạo cần có một cách thức phù hợp để làm sao vừa đảm bảo được doanh nghiệp mình vẫn duy trì được lợi thế cạnh tranh, vừa cam kết được hiệu quả công việc và lợi ích sức khỏe của mỗi nhân viên.

Chuyển đổi số là một điều bắt buộc đối với một doanh nghiệp nếu muốn thu hút đầu tư và cả nguồn nhân lực mới. Giá trị thặng dư của việc chuyển đổi số cũng thể hiện mức độ uy tín, sự hài lòng và quy mô tổ chức có hệ thống của một tổ chức. Vì vậy, để giúp chuyển đổi số hiệu quả, nhiều công ty đã áp dụng việc vận hành công việc từ xa. Thời đại công nghệ số, xu hướng làm việc từ xa được sự hỗ trợ đắc lực từ các thiết bị, kỹ thuật cần thiết như: Phần mềm chat và giao việc trực tuyến, phần mềm chấm công trực tuyến, phần mềm quản lý doanh nghiệp trực tuyến…

Việc ứng dụng công nghệ vào làm việc từ xa sẽ giúp các doanh nghiệp giảm thiểu các chi phí có thể phát sinh đồng thời giúp cho việc chuyển đổi số diễn ra nhanh hơn và hiệu quả hơn.

Xu hướng làm việc từ xa đã không còn quá xa lạ với các tổ chức/doanh nghiệp. Nó khá nổi bật và tất nhiên, khi có những biến động xã hội – như vấn đề dịch bệnh Covid-19 đang hoành hành thì ta lại thấy rõ những điều thiết thực mà ;xu hướng làm việc này mang lại. Điều quan trọng là các nhà quản lý cần nắm bắt được những thách thức nào mà xã hội và tổ chức/doanh nghiệp mình đang phải đối mặt.

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

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

9 câu hỏi lắt léo về Promise

1.

var p = new Promise((resolve, reject) => {
  reject(Error('The Fails!'))
})
p.catch(error => console.log(error.message))
p.catch(error => console.log(error.message))

Kết quả output

  1. Kết quả lỗi log ra 1 lần
  2. Kết quả lỗi log ra 2 lần
  3. UnhandledPromiseRejectionWarning

.catch sẽ làm việc giống như .addEventListener(event, callback) hay Event Emitter .on(event, callback). Có thể add thêm bao nhiêu tùy thích, nó số chạy tất cả các callback đã đăng ký

2var p = new Promise((resolve, reject) => {
  return Promise.reject(Error('The Fails!'))
})
p.catch(error => console.log(error.message))
p.catch(error => console.log(error.message))
  1. Kết quả lỗi log ra 1 lần
  2. Kết quả lỗi log ra 2 lần
  3. UnhandledPromiseRejectionWarning

Khi khởi tạo một Promise, chúng ta phải gọi một trong hai callback resolve() hoặc reject(). Nó ko return giá trị. Không thể dùng Promise.reject() như ở trên. Đáp án: UnhandledPromiseRejectionWarning

3

var p = new Promise((resolve, reject) => {
    reject(Error('The Fails!'))
  })
  .catch(error => console.log(error))
  .then(error => console.log(error))

 

Kết quả

  1. In ra lỗi và undefined
  2. in ra lỗi 2 lần
  3. UnhandledPromiseRejectionWarning
  4. undefined

annotated-code/question-3.png

Gợi ý thứ nhất console.log() luôn trả về undefined. Thứ 2, khi đặt .catch trước .then như thế, nó sẽ không nhận được giá trị từ hàm trước đó, mọi thứ đã dừng lại ở catch. Đáp án In ra lỗi và undefined

4

var p = new Promise((resolve, reject) => {
    reject(Error('The Fails!'))
  })
  .catch(error => console.log(error.message))
  .catch(error => console.log(error.message))

 

  1. In ra lỗi một lần
  2. In ra lỗi 2 lần
  3. UnhandledPromiseRejectionWarning

Giải thích như trên, câu catch thứ 2 không được gọi đến, điều đặc biệt là bạn có thể đặt .then ở phía sau catch nhưng không thể đặt catch sau catch. Đáp án: In ra lỗi 1 lần

5

new Promise((resolve, reject) => {
    resolve('Success!')
  })
  .then(() => {
    throw Error('Oh noes!')
  })
  .catch(error => {
    return "actually, that worked"
  })
  .catch(error => console.log(error.message))

 

  1. In lỗi 1 lần
  2. In lỗi 2 lần
  3. UnhandledPromiseRejectionWarning
  4. Ko in gì cả

catch có thể được sử dụng để bỏ qua hoặc ghi đè lên giá trị lỗi bằng cách cho return một giá trị. Trò này chỉ làm được khi trước đó then có trả về giá trị. Đáp án: không in gì cả

6

Promise.resolve('Success!')
  .then(data => {
    return data.toUpperCase()
  })
  .then(data => {
    console.log(data)
  })

 

  1. In ra “Success!” và “SUCCESS!”
  2. In ra “Success!”
  3. In ra “SUCCESS!”
  4. Không in ra gì cả

.then sẽ truyền dữ liệu theo thứ tự đã viết, khi return giá trị, hàm then tiếp thiệu sẽ nhận giá trị return này. Đáp án: In ra “SUCCESS!”

7

Promise.resolve('Success!')
  .then(data => {
    return data.toUpperCase()
  })
  .then(data => {
    console.log(data)
    return data
  })
  .then(console.log)

 

  1. In ra “SUCCESS!”
  2. In ra “Success!”
  3. In ra “SUCCESS!” và “SUCCESS!”
  4. Không in ra gì cả

Giải thích tương tự như trên. Đáp án: In ra “SUCCESS!” và “SUCCESS!”

8

Promise.resolve('Success!')
  .then(data => {
    data.toUpperCase()
  })
  .then(data => {
    console.log(data)
  })

 

  1. In ra “SUCCESS!”
  2. In ra “Success!”
  3. In ra “SUCCESS!” và “SUCCESS!”
  4. In ra “undefined”

Nếu muốn truyền giá trị xuống .then bên dưới, trước đó phải return. Đáp án: In ra “undefined”

9

Promise.resolve('Success!')
  .then(() => {
    throw Error('Oh noes!')
  })
  .catch(error => {
    return 'actually, that worked'
  })
  .then(data => {
    throw Error('The fails!')
  })
  .catch(error => console.log(error.message))

 

  1. In ra “Oh noes!” và “The fails!”
  2. In ra “Oh noes!”
  3. In ra “The fails!”
  4. In ra “actually, that worked”
  5. Không in ra gì cả

Tổng hợp những kiến thức ở trên, hy vọng bạn trả lời đúng câu này. Ở then đầu tiên, chúng ta throw một error, catch tiếp theo chúng ta return coi như bỏ qua error này, then thứ 2, nhận data nhưng chúng ta ko làm gì với nó cả, mà throw một error khác, catch cuối cùng sẽ là giá trị error vừa throw ở trên. Đáp án: In ra “The fails!”.

TopDev via Vuilaptrinh

Xem thêm các vị trí tuyển dev lương cao tại đây

Bảo mật web – Một số kiểu tấn công

Tổng quát các vấn đề bạn cần quan tâm để bảo mật ứng dụng web

Cách quản lý Session hiện tại

HTTP = stateless

  • Tất cả request từ cùng 1 client không liên quan gì với nhau
  • Server không có cách nào để lưu tạm giá trị state HTTP hỗ trợ gửi đi dữ liệu authentication
  • Thông qua Header.Authorization
  • Gửi thông tin kèm theo tất cả request
  • Server không can thiệp gì trên từng session

Session quản lý bởi server

Server toàn quyền kiểm soát session, kiểm tra tình trạng active, expire, invalid date, xóa session

Đại diện cho cách này là dùng Cookie

  • Dữ liệu được truyền qua lại giữa server và client
  • Hầu hết các trình duyệt đều hỗ trợ, khó, nếu sử dụng bên ngoài trình duyệt (ứng dụng điện thoại chẳng hạn)
  • Bị tấn công CSRF

Theo mặc định các request sẽ không nên gửi kèm thông tin xác thực tài khoản (ví dụ cookie), nếu cần gửi thêm thông tin này bằng thiết đặt withCredentials thủ công, phía server đồng thời cũng gửi lại trong response header giá trị Access-Control-Allow-Credentials: true

Session quản lý ở client

Đưa toàn bộ thông tin session xuống phía client Server không kiểm soát session nào đang active Dữ liệu session được gửi đi trên mỗi request

Đại diện cho kiểu này là dùng Token (JWT đang là phổ biến nhất)

  • Dữ liệu session được lưu xuống token, server gửi token này qua HTTP header hoặc body của response
  • Ứng dụng tự quản lý chuyện gửi server token này
  • Trên mỗi request gửi đi nó không tự chèn token vào, do đó nó không thể tấn công bằng CSRF
  • Mồi ngon của tấn công XSS

Một số kiểu tấn công

CSRF (Cross-Site Request Forgery)

Kiểu tấn công rất phổ biến, nếu thông tin session được gửi qua Cookie. Đại khái là nếu bạn đăng nhập vào facebook.com, sau đó truy cập vào trang web nào đó bị hack rồi, trang bị hack này sẽ gửi một trang có nội dung html bên trong đó nó dùng một thẻ nào đó (như <img /><iframe/><link/><bgsound/><background />) để gửi một request thay đổi email lên trang facebook.com

<iframe height="0" width="0" src="facebook.com/api/1/destroy">
<link ref="stylesheet" href="facebook.com/api/1/destroy" type="text/css"/>
<bgsound src="facebook.com/api/1/destroy"/>
<background src="facebook.com/api/1/destroy"/>
<img height="0" width="0" src="facebook.com/api/1/destroy"/>

 

CSRF (Cross-Site Request Forgery)

Cách ngăn chặn #1: Sử dụng HTML token

Dấu token bên trong HTML, ví dụ như nhét nó trong form, server khi nhận được sẽ kiểm tra lại để chắc chắn là token này hợp lệ

<form action="submit.php">
  <input type='hidden' name='CSRFToken' value='OWY4NmQwODE4ODRjN2Q2NTlhMmZlYWEwYzU1YWQwMTVhM2JmNGYxYjJiMGI4MjJjZDE1ZDZMGYwMGEwOA==' />
</form>

 

Tuy nhiên cách này sẽ không thích hợp với SPA, vì yêu cầu phía server phải quản lý session của từng user đang login

Cách ngăn chặn #2: Origin Header

Với những request như POST/PUT/DELETE, tự động thêm Origin Header để xác thực yêu cầu

Cách ngăn chặn #2: Origin Header

Cách ngăn chặn #2: Origin Header

Cách ngăn chặn #3: dùng transparent token

So sánh giá trị cookie với giá trị header

User gửi đi một request, nó nhận được 1 Session Cookie và 1 CSRF Token Cookie.

Set-Cookie: session=...
Set-Cookie: CSRF-Token=123

 

Khi ứng dụng gửi đi một request, javascript sẽ copy cookie và đưa vào header X-CSRF-Token chỉ javascript trên trang hiện tại mới truy xuất được thông tin này

Cookie: session=...
Cookie: CSRF-Token=123
X-CSRF-Token: 123

 

Server đơn giản là kiểm tra 2 giá trị Cookie: CSRF-Token và X-CSRF-Token có khớp không

Cross-Site Scripting (XSS)

Hacker sẽ tìm cách để chạy javascript trên trang trình duyệt của user, khi user truy cập vào một trang đã bị hack. Hacker sẽ dùng những cách sau

Store XSS – lưu đoạn script đó lên trên server

Cross-Site Scripting (XSS)

Reflect XSS

Reflect XSS

DOM-Based XSS

Reflect XSS

Cách phổ biến để phòng chống

  • Filter hết mấy đoạn html nguy hiểm (như < >, ” “, &) trước khi lưu
  • Dùng thư viện để escape context-sensitive trước khi output

Công cụ kiểm tra

Một số trang online để check

https://securityheaders.com/

https://sitecheck.sucuri.net/

https://www.ssllabs.com/ssltest/

https://quttera.com/

https://detectify.com/

https://app.webinspector.com/

https://app.upguard.com/webscan

Getting Single Page Application Security Right by Philippe De Ryck

TopDev via Vuilaptrinh

5 biểu hiện của nhân viên cần cân nhắc sa thải

Có nhiều lý do để người quản lý buộc thôi việc nhân viên mình. Đó có thể dựa trên những đánh giá từ kết quả công việc, sự phù hợp – tính ổn định về lâu dài, phẩm chất nhân viên,… hay bất cứ một lý do nào đó.

Thực tế đã cho thấy, chuyện chấm dứt hợp đồng làm việc với nhân viên mình chưa bao giờ là một quyết định dễ dàng với các nhà quản lý. Tuy nhiên, với một nhân viên có những biểu hiện sau, việc sa thải là điều hiển nhiên phải thực hiện.

  Bí mật giúp tạo động lực và tăng năng suất cho nhân viên!
  Công nghệ gắn kết nhân viên - vũ khí mới của HR trong thời đại mới

1. Thường xuyên phàn nàn hay đòi hỏi

Những nhân viên tệ trong quá trình làm việc sẽ có xu hướng phàn nàn, than vãn về nhiều việc diễn ra xung quanh. Có thể là đồng nghiệp, môi trường làm việc, khối lượng công việc đảm nhận và trong mắt họ, không có gì là hoàn hảo. Và nếu để kéo dài, họ có thể là những tạo ra những ảnh hưởng tiêu cực đến với sự phát triển của tổ chức/doanh nghiệp.

5 biểu hiện của nhân viên cần cân nhắc sa thải

Cụ thể họ có những biểu hiện hành vi như sau:

1. Thường xuyên tìm kiếm nhiều điều để khiếu nại, phàn nàn về những sai lầm của đồng nghiệp. 

2. “Tạo sóng” bằng cách lan truyền những tin đồn tạo ra sự thị phi

3. Nói xấu sau lưng đồng nghiệp.

Không những thế, những nhân viên này đôi khi còn đòi hỏi quá nhiều điều về các nhu cầu khác nhau. Có thể họ sẽ đòi hỏi về mức lương trong khi bản thân mình không tự đánh giá được khả năng của mình hoặc đòi hỏi những nhu cầu mà họ xem là cấp thiết như: các thiết bị hỗ trợ, chính sách phúc lợi xã hội,..

2. Thiếu tinh thần trách nhiệm

Không một công ty nào mong muốn nhân viên của mình thiếu trách nhiệm với công việc cả. Và để tránh làm ảnh hưởng đến tinh thần làm việc của mọi người và ảnh hưởng lớn đến chiến lược xây dựng và sự phát triển chung của công ty thì những đối tượng nhân viên có các biểu hiện sau đây cần được xem xét “thanh lọc” sớm: 

  • Hay đổ lỗi cho hoàn cảnh khi chưa hoàn thành tốt nhiệm vụ được giao, đỗ lỗi cho người khác
  • Thực hiện và giải quyết công việc hời hợt, không tập trung
  • Luôn viện cớ bào chữa cho những hạn chế, sai phạm do bản thân gây ra 
  • Không hề có sự biểu hiện nào của sự cố gắng
  • Chiếm dụng quỹ thời gian để làm việc riêng

3. Thiếu tập trung và thái độ

Ngoài năng lực chuyên môn, thái độ sống tích cực thì nhiệt huyết và sự đam mê trong công việc rất quan trọng. 

5 biểu hiện của nhân viên cần cân nhắc sa thải

Cụ thể khi một dự án mới được triển khai, họ thường tỏ ra không mấy hứng thậm chí uể oải khi tiếp nhận thông tin. Ngược lại, họ lại tỏ thái độ thiếu hợp tác và họ thuộc kiểu người dễ nản chí khi gặp một chút khó khăn. Chính vì vậy mà nếu tiếp diễn lâu dài họ sẽ truyền đi năng lượng xấu cho các nhân viên khác và ảnh hưởng xấu đến bầu không khí làm việc chung của mọi người.

Sự thiếu nhiệt huyết đôi khi còn được thể hiện thông qua sự lười biếng hoặc thậm chí nhân viên đó nghỉ việc quá nhiều. Một nhân viên tự ý nghỉ việc không lý do chính đáng, thiếu nhiệt huyết trong công việc thì khó có thể hoàn thành tốt nhiệm vụ được giao.

4. Không có tinh thần làm việc nhóm

Việc tập trung vào công việc của mình là tốt, đó cho thấy bạn thật sự có trách nhiệm với phần việc của mình đồng thời cũng là một cách hiệu quả để rèn luyện khả năng tư duy độc lập. Tuy vậy, để phát triển sự nghiệp lâu dài, bạn không phải làm việc độc lập một mình mà cần sự hợp tác nhóm, nên việc giúp đỡ, trao đổi với ai đó là điều cần thiết.

Đặc biệt hơn không riêng gì giới nhân sự, nếu muốn phát triển và thăng tiến trong sự nghiệp thì việc nhân viên phải cọ xát và trải nghiệm nhiều vai trò, vị trí để nắm bắt tốt suy nghĩ, mong muốn của họ là điều thật sự cần thiết. Và làm việc nhóm chính là cơ hội để nhân viên thử sức học hỏi những điều này.

Nếu cứ chỉ chăm chăm làm việc của mình mà không quan tâm đến thành quả chung mang tính đồng đội, không hiểu giá trị của sự cộng tác thì bạn sẽ mãi chậm chân tại chỗ, mãi vẫn là một ngôi sao không bao giờ sáng.

5. Thiếu sự chủ động và sự sáng tạo

Môi trường làm việc năng động và không ngừng cập nhật những xu hướng mới. Vì thế, việc nhân viên cần phải chủ động và rèn luyện tính sáng tạo trong công việc là một điều cần thiết.

Sự chủ động có thể hiểu là sự linh hoạt trong suy nghĩ dẫn đến biểu hiện cụ thể qua hành động. Ví dụ như bạn bày tỏ những quan điểm, sáng kiến mới về vấn đề, mạnh dạn đóng góp những ý kiến, đánh giá, đề xuất của cá nhân trong các cuộc họp của tổ chức,…. Ngoài ra, việc tự trau dồi thêm  kiến thức bổ trợ từ các khóa học chuyên sâu cũng là cách để phát triển năng lực của mình. Tương tự, để có thể tiếp tục theo đuổi công việc, bạn cần có sự sáng tạo để có những lối tư duy mới, tránh những đường hướng cũ. Cá nhân mọi tổ chức doanh nghiệp đều mong muốn nhân viên của họ có tính chủ động và sáng tạo trong công việc.

Đôi khi bạn có thể chưa sáng tạo nhưng sự chủ động có thể thay thế và ngược lại đồng thời, bạn phải có sự thích ứng tốt với công việc, luôn tìm tòi, học hỏi và tự phát triển bản thân theo lộ trình riêng. Hãy thể hiện cho người quản lý thấy sự nỗ lực của bạn như thế nào, sự thay đổi tích cực của bạn ra sao thông qua các thành quả thay vì chỉ mãi thụ động và chậm chân tại chỗ.

Có rất nhiều biểu hiện cho thấy đó là một nhân viên không phù hợp. Tuy nhiên, các nhà quản lý cần sáng suốt trong việc đưa ra những chiến lược để giải quyết kịp thời trước những thái độ của nhân viên. Một chiến lược hợp lý và thể hiện được ủy quyền của nhà quản lý sẽ là bài học sâu sắc cho mỗi cá nhân nhân viên nhìn nhận lại sự thiếu sót của mình, giúp họ hoàn thiện hơn trên hành trình nghề nghiệp. 

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

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

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

Mong muốn của dev mọi nhà đôi khi đơn giản chỉ là một trang hosting đủ tính năng, quan trọng là miễn phí để test thôi. Sao không bỏ túi ngay top 13 hosting web, có đủ các chức năng và còn không tốn đồng nào trong list dưới đây? Lưu về ngay để lúc nào cần chỉ cần mở lên dùng thôi nhé.

Infinity Free

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

Có nhiều lý do khiến Infinity Free đứng đầu bảng Free Web Hosting như là băng thông không giới hạn, tốc độ tải cực nhanh bao gồm lượng uptime của hosting này đạt đến 99%. Ngoài ra yếu tố quan trọng nhất là Disk Space không giới hạn và không hề có ads. Những ứng dụng phổ biến của Infinity Free bao gồm WordPress, Joomla, Drupal, MyBB, PrestaShop, PhpBB. Bạn còn có thể host 10 tài khoản email miễn phí và 400 cơ sở dữ liệu MySQL với không gian không giới hạn.

FREEHOSTIA

Tương tự với Infinity Free nhưng Freehost có những giới hạn và đặc tính riêng. Freehostia cho phép web hosting cloud miễn phí. Người dùng có thể host 5 domains mỗi tài khoản với 250MB mỗi Disk Space (dung lượng lưu trữ) và 6GB băng thông hàng tháng.

000webhost

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

000webhost là trang web hosting miễn phí với Cpanel, hoàn toàn free với PHP, MySQL, cPanel và không có ad. Ngoài ra 000webhost đảm bảo lượng Uptime 99.9%, 1Gb Disk Space và 10Gb băng thông.

BYET

Byet cho phép dịch vụ hosting web miễn phí không ads bao gồm PHP, MySQL, FTP, Vistapanel. Bạn có thể tham khảm domain “yoursite.byethost.com” và 7 lựa chọn khác trang này đưa ra. Mục tiêu hàng đầu của BYET là dẫn đầu các trang server về Uptime, họ cho phép PHP 5.4 đến 7.0. Free FTP, MySQL. Ngoài ra người dùng có thể xây dựng tính năng build SEO để cải thiện điểm tối ưu hóa công cụ tìm kiếm (SEO).

Googiehost

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

Cũng như Byet, Googiehost cho phép host web free với Cpanel, nhiều tính năng với những công nghệ mới nhất. Googiehost cung cấp storage lên đến 1000 MB SSD với băng thông không giới hạn bao gồm Uplink 100MBPS. Họ cung cấp những tài khoản email doanh nghiệp miễn phí không giới hạn, người dùng có thể tạo Subdomain thoải mái.

Freehosting.io

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

Freehosting.io cung cấp dịch vụ shared hosting hoàn toàn free cùng những tính năng bảo mật tốt nhất và dịch vụ hỗ trợ 24/7, với hơn 50+ địa điểm server trên toàn thế giới. Hiện nay đang có khoảng hơn 70 nghìn website đang chạy trên nền tảng Freehosting.io mà không có Downtime.

Với lượng Disk Space và băng thông vô hạn, người dùng có thể sử dụng bao nhiêu tùy thích, ngoài ra họ còn có thêm tính năng Drag and Drop (kéo thả) đi kèm với rất nhiều template. Với 3 bước sau bạn có thể dựng một trang web miễn phí:

  • Đăng ký: tạo tài khoản và bắt đầu tiến trình.
  • Xác thực email: xác nhận email đăng ký bằng cách click vào đường dẫn trong Inbox.
  • Tạo website: bạn đã hoàn tất mọi thủ tục để có website cho riêng mình.

UltimateFreeHost

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

Như tên gọi, UltimateFreeHost cung cấp Disk Space, băng thông vô hạn và không giới hạn tài khoản email. Người dùng có thể tạo cơ sở dữ liệu MySQL vô hạn & Cpanel Access để quản lý tốt hơn. Ngoài ra UltimateFreeHost cung cấp Free Domain, Subdomain hoàn toàn free, không giới hạn. Bạn cũng không cần viết code để tạo website vì UltimateFreeHost có Zyro website builder, một tính năng phát triển miễn phí. Ngoài ra còn có embedded traffic booster để thu hút traffic trên website.

Webfreehosting

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

WebFreeHosting cung cấp shared hosting miễn phí với tốc độ server khá nhanh. Trang miễn phí Disk Space 1GB và 5GB băng thông. Người dùng có thể chuyển file lên đến 2MB và đảm bảo Uptime 99.9%. Để host, WebFreeHosting cho phép 1 domain và 3 subdomain. Ngoài ra họ cũng cung cấp Cpanel nâng cao và Web Based File Manager. Đối với Email thì có thể host 1 địa chỉ với Filter, SPAM protection, virus protection, …. 

BIZ.NF

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

Biz.nf cung cấp web hosting vừa nhanh và miễn phí từ năm 2008, 1GB Disk SPace và trao đổi dữ liệu 5GB mỗi tháng hoàn toàn miễn phí. Domain sẽ có cú pháp “.co.nf”

Build web trên Biz.nf không hiện ads và chạy 100% trên năng lượng tái tạo. Với 1 Free Hosting Plan người dùng có thể host 4 website (1 domain chính và 3 subdomain). 

50WEBS

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

50webs.com cung cấp website hosting miễn phí đáng tin cậy mà không “dính” banner quảng cáo nào, gồm 500MB Disk Space và 5GB data băng thông hàng tháng. Bạn có thể host 10 domain mỗi tài khoản, và tạo đến 100 tài khoản email khác nhau. 50Webs khá phù hợp cho các beginner đấy.

Freehosting.com

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

Những tính năng mà Freehosting mang lại sẽ không tìm thấy ở các công ty web khác, khi người dùng có thể tạo bất kỳ loại website nào hoàn toàn free, và được cung cấp đến 10GB Disk Space và băng thông vô hạn. Nền tảng hosting của họ tích hợp với Linux, PHP, APache, MYSQL, …

Trên Freehosting bạn có thể host 1 website và 0 subdomain, tạo được 1 tài khoản email và 1 MySQL database. Việc tạo website cũng không quá khó khăn với Website Builder với hơn 170 template có sẵn. Ngoài ra họ cung cấp thêm các database và tính năng khác nhau như:

  • MySQL database server
    • InnoDB storage engine
    • phpMyAdmin
    • Unlimited MySQL queries
    • Unlimited query time
  • Apache / PHP 7
    • .htaccess support
    • All Major Apache modules
    • All common PHP extensions
    • Complete PHP functions enabled
    • PHP Safe mode switched off
    • 60 seconds PHP execution time
    • 200 MB Max upload file size
    • 256 MB Max PHP memory limit

Ngoài ra bạn có thể mua thêm những tính năng khác ngoài những gì trang cung cấp miễn phí.

Free Hosting Eu

Tương tự như Biz.nf, Freehostingeu cung cấp 200MB Disk Space và 4GB data transfer mỗi tháng, ngoài ra còn có 2 website builder hoàn toàn miễn phí. Bạn có thể host 1 domain và 5 subdomains.

Awardspace

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

AwardSpace được biết đến khá rộng rãi và free cho hầu hết các cách dùng, có thể host đến 4 website một tài khoản miễn phí và được đảm bảo mạng uptime lên đến 99.9%. 

Những tính năng của Awardspace:

  • Băng thông – 5GB
  • Disk Space – 1000MB
  • Zacky Website Builderq
  • Kích hoạt tài khoản nhanh chóng
  • Free PhpMyadmin Access
  • Hỗ trợ Full MYSQL Database
  • 100% Ad-Free
  • Hỗ trợ 24/7 

TopDev via real.tips

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

Google Maps và React

Nhúng Google Maps vào web site bình thường thì quá sức đơn giản, để sử dụng với React Js thì hơi vụng công một chút.

Để sử dụng Google Maps API, ta chỉ cần load đoạn js từ googleapis, chèn thêm một cái div với id là map chằng hạn.

<!DOCTYPE html>
<html>
  <head>
    <title>Basic Google Map on a web page</title>
  </head>
  <body>
    <div id="map"></div>
    <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&"></script>
  </body>
</html>

 

Đoạn script của google sẽ được load sau khi có static DOM, cái <div id='map' /> lúc đó đã tồn tại và có thể được sử dụng thoải mái bởi google maps api.

Việc làm React lương cao không cần kinh nghiệm

Nhưng mà trong React JS thì DOM được render và re-render từ virtual DOM, một file html của app React JS thường là chỉ có thế này

<!DOCTYPE html>
<html>
  <head>
    <title>Simple React app</title>
  </head>
  <body>
    <div id="app"></div>
    <script src="js/app.js"></script>
  </body>
</html>

 

Tức là nếu làm như cách bình thường ở trên thì cái <div id='map' /> chưa hề tồn tại trên xã hội.

Load bất đồng bộ (Asynchronous Loading)

Cả hai đoạn script React và Google maps đều phải tốn thời gian để load, chúng ta phải đảm bảo Google Map chỉ được tạo ra sau khi React app đã khởi tạo và render DOM xong. Thoạt nhìn thì dùng asyn google map sẽ là một giải pháp.

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"
        async defer></script>

 

Chúng ta thêm asyn và defer để load đoạn googleapis này sau cùng, đồng thời thêm hàm callback sau khi load xong. Nếu initMap là một global function thì ta có thể gọi nó bên trong React Component

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), { ... });
}

 

Buồn thay! Không chạy đâu các bạn ạ. Ngay cả khi Google Maps chỉ được load sau khi React được load, không có nghĩa là toàn bộ cây DOM đã được mount và render khi thực thi hàm callback.

Ok, chúng ta cần giải pháp tốt hơn. Về cơ bản

chúng ta muốn load đoạn script của google ngay khi component có sử dụng đến google api được mounted

componentDidMount {
    // trỏ global function window.initMap này vào hàm initMap của component để thằng google có thể  gọi trong hàm callback
    window.initMap = this.initMap;

    // chèn ngay đoạn js của googleapis cho anh xài ngay.
    loadJS('https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap')
}

initMap = () => {
    map = new google.maps.Map(this.refs.map.getDOMNode(), { /* các options khác*/});
}

render {
    return (
        <div>
            <div ref="map" style="height: '500px', width: '500px'"><⁄div>
        <⁄div>
    );
}

// hàm này để chèn thêm <script /> sau khi gọi
function loadJS(src) {
    var ref = window.document.getElementsByTagName("script")[0];
    var script = window.document.createElement("script");
    script.src = src;
    script.async = true;
    ref.parentNode.insertBefore(script, ref);
}

 

Để ý là ta thêm ref='map' để trỏ tới đúng cái div sử dụng để đưa vào cho Google Map constructor bằng hàm this.refs.map.getDOMNode() ngay khi DOM đã render.

Vậy là xong. Google Map đã có thể hoạt động trơn tru với React Component, đúng hơn là với Virtual DOM.

Tác giả: klaasnotfound Link bài gốc: http://www.klaasnotfound.com/2016/11/06/making-google-maps-work-with-react/

TopDev via Vuilaptrinh

Xem thêm các vị trí tuyển nhân viên it gấp tại đây

Sửa lỗi scroll với fixed header bằng CSS

Giải quyết issue với fixed header và scroll đến một element bằng hashtag

Khi sử dụng hashtag # cho attribute href, trình duyệt sẽ scroll tới element có id tương ứng section-two. Đây là một tính năng từ thời trình duyệt mới ra đời.

<a href="#section-two">Section Two</a>

 

Nhưng một khi chúng ta thêm một element với position: fixed, như header, vị trí scroll đến sẽ ko còn đúng nữa, nó vẫn scroll tới element đó, nhưng giờ nó có thể bị che bởi element đang set fixed.

Có rất nhiều cách để giải quyết vấn đề này trước đây, như thêm vào một đoạn padding vào element, hoặc dùng một đoạn javascript để handle, có tất cả 5 cách để giải quyết con issue này.

Fixed Header, Page Links

Giờ đây chúng ta có cách hoàn toàn mới chỉ với css

Sử dụng 2 thuộc tính mới là scroll-padding và scroll-margin

body {
  scroll-padding-top: 70px;
 /* giá trị chiều cao của header */
}

 

Hiện tại cái này chỉ chạy tốt trên trình duyệt dùng Chromiu

TopDev via Vuilaptrinh

Lập trình viên làm gì khi Corona hoành hành: ở nhà học tiếng Anh lập trình theo phong cách “fast and furious”

Có nhiều người luôn thắc mắc làm gì với nghề này để có mức thu nhập cao hơn và có bước tiến thân cao hơn trong nghề. Người thì lựa chọn cày ngày cày đêm, chạy từ dự án này sang dự án khác; người thì “đi tìm đường cứu thân”, sang một đất nước khác để có cơ hội cao hơn. Nhưng rồi lại gặp khó khăn lớn về ngôn ngữ, đặc biệt là tiếng Anh. Tự lúc nào nỗi sợ học tốt tiếng Anh lập trình đã làm rào cản khiến lập trình viên không dám mơ lớn, ngôn ngữ máy tính mình còn học được mà huống chi ngôn ngữ loài người nhỉ :)))

TÌNH TRẠNG CHUNG 

Bạn sẽ rất ngưỡng mộ khi bắt gặp ai đó xì xồ xì xào nói tiếng Anh với người nước ngoài và luôn tự nhủ mình cũng sẽ nói được nếu mình chăm luyện tiếng Anh. Và rồi tức tốc bạn về nhà ngay, lên kế hoạch cụ thể cho bản thân, google search thần tốc các mẹo học tiếng Anh, ghi ghi chép chép, note dán đầy phòng. Chưa kể thấy người ta chia sẻ tài liệu nào hay thì liền download về đến nỗi chật cả máy, và còn rất nhiều ti tỉ cách khác để bạn tự học được tiếng Anh. Nhưng rồi một ngày đẹp trời, chú lười đến rủ rê bạn đi chơi vài hôm, xem phim, cà phê trà sữa với bạn bè, lâu dần bạn lại bỏ xó xấp tài liệu kẹt trong máy và tờ note dính bụi trên tường. Và rồi vòng lặp cứ thế lại diễn ra. 

Bạn đừng quá lo, không chỉ có mình bạn mà đó là tình trạng chung của mọi người luôn rồi, kể cả mình – người đang gõ từng dòng chữ bài viết này. Mình may mắn đã thức tỉnh sớm và chia sẻ đến mọi người một số cách tự học tiếng Anh, nếu bạn đang đọc bài viết này có nghĩa bạn cũng đang may mắn lắm đấy *cười* 

Tiếng Anh là công cụ tốt nhất hiện nay để giao tiếp với mọi người. Nhiều người học tiếng Anh cảm thấy lo lắng, do dự về việc tự học. Sự thật là, internet không chỉ là nguồn tốt nhất để bạn học tiếng Anh, mà còn là cách dễ nhất để tự học bất cứ khi nào và bất cứ đâu bạn muốn. 

Tốt nhất là bạn nên học theo cách riêng của bản thân mình mà không cần phải làm theo lời khuyên của ai khác, hãy bớt phụ thuộc vào ai đó. Trong phim “The Karate Kids”, ông Parker đã nói với cậu bé rằng: “Võ thuật nằm trong chính những hành động hằng ngày của chúng ta”. Tiếng Anh cũng vậy ! Bạn thích nghe nhạc, bạn thích xem phim, bạn thích đọc blog, bạn thích nghe radio hoặc bất cứ gì bạn muốn, mọi thứ như vậy đều giúp bạn học tốt tiếng Anh. Bạn hãy để việc tự học tiếng Anh là điều làm bạn cảm thấy thoải mái, chứ không phải là gánh nặng (hồi nhỏ đã rất ám ảnh việc học để ba mẹ tự hào, để ba mẹ vui rồi, bây giờ lớn bạn không cần phải bắt ép bản thân như vậy nữa). 

Để có thể tự thân vận động được bạn hãy cho bản thân một lý do thật sự lớn để học tiếng Anh. 

Bước 1: TÌM MỘT LÝ DO DUY NHẤT KHIẾN BẠN PHẢI HỌC TIẾNG ANH 

Khi đọc đến đây bạn sẽ nghĩ ra cho mình được rất nhiều lý do nhỉ? Nào là, vì mình muốn được đi nước ngoài này, muốn được tỏ ra bảnh tỏn khi ra phố nói tiếng Anh như gió, vì nhỏ ghệ giỏi tiếng Anh nên mình phải đu theo, ty tỷ lý do. Nhưng bạn hãy tìm một lý do duy nhất trong hàng tá lý do đó, đó phải là lý do quan trọng nhất. 

Tại sao lại là quan trọng nhất, vì nếu lý do đó không quan trọng thì bạn sẽ chẳng có động lực nào để học tốt tiếng Anh (nếu bạn có lỡ sa ngã lười biếng). Lý do quan trọng nhất giống như là kim chỉ nam để bạn hướng theo, cũng giống như là cái neo để giữ bạn lại ý. 

Vậy làm sao để xác định được lý do quan trọng nhất? Cũng đơn giản thôi, đặt lý do và mục tiêu cuộc sống, nếu song song thì bỏ qua, còn nếu cắt nhau thì đó là lý do quan trọng nhất. 

Sau khi xác định được “cái neo”, muốn thuyền đi xa phải có thuyền trưởng chứ.. (từ đây tôi mạn phép ví việc học tốt tiếng Anh như con thuyền nhé !) ý tôi ở đây là bản kế hoạch chi tiết cụ thể để bạn dễ dàng vẽ ra lộ trình học tiếng Anh ấy mà. 

Bước 2: LẬP BẢN KẾ HOẠCH CHI TIẾT CỤ THỂ NHỮNG GÌ BẠN MUỐN LÀM BẰNG TIẾNG ANH 

Việc bạn lập kế hoạch này hãy dựa trên mục tiêu cuộc sống và lý do quan trọng phía trên. Những mục tiêu trong bản kế hoạch này nên nặng hơn trình độ hiện tại của bạn, vì nếu như bạn lập những mục tiêu rất dễ hoàn thành thì bạn rất khó để cải thiện tiếng Anh. Từng mục tiêu trong bản kế hoạch càng chi tiết càng tốt, não chúng ta vốn đã lười suy nghĩ nên bạn liệt kê càng cụ thể thì bản thân sẽ càng có trách nhiệm hơn, và quan trọng là hãy ghi bằng tiếng Anh cho bản kế hoạch này nhé. 

Ví dụ 1 : bạn nên lập kế hoạch như sau: 

  • Within 8 months, I want to be able to read and understand any article in the programming document. (Tôi muốn đọc và hiểu được bất kì bài viết nào của tài liệu lập trình trong vòng 8 tháng tới)
  • Within 6 months, I want to score at least 6.0 on the IELTS English exam so I can apply and be accepted to an exchange program (Trong vòng 6 tháng, tôi muốn đạt ít nhất 6.0 trong các bài kiểm tra IELTS, để tôi có thể đăng ký tham gia chương trình trao đổi quốc tế)
  • Within 3 months, I want to be able to talk with English speakers in social situations about everyday topics such as sports, music, films, travel and food. (Trong vòng 3 tháng, tôi muốn nói chuyện với người bản xứ về các chủ để hằng ngày trong xã hội, như thể thao, âm nhạc, phim ảnh, du lịch và thực phẩm)

Bạn có thể sắp xếp thời gian theo chiều ngược lại, miễn sao bạn nhìn vào thấy hợp lý. Mỗi người có cách sống và nguyên tắc riêng mà.

Ví dụ 2: bạn không nên lập kế hoạch như sau:

  • I want to speak English fluently (Tôi muốn nói tiếng Anh lưu loát)
  • I want to go to university in another country (Tôi muốn học đại học ở nước ngoài)
  • Get a girlfriend/boyfriend who speaks English (Tôi muốn có bạn gái/bạn trai nói tiếng Anh tốt)

Kế hoạch quá chung chung, rất dễ gây nhàm chán, không có sự ràng buộc nào cho bạn và bạn cũng sẽ không có lý do nào giúp níu kéo bạn trong việc học tốt tiếng Anh. 

Nếu bạn có giới hạn thời gian, thì bạn có thể đánh giá sự tiến bộ của bạn trong quá trình học và tìm hiểu xem bạn có cần thay đổi thói quen để đáp ứng mục tiêu của mình không. Mỗi mục tiêu tốt đều có thời hạn rất rõ ràng.

Neo có rồi, thuyền trưởng có rồi, bạn cần phải có thuyền thì mới khởi hành ra khơi được. 

Bước 3: TÌM TÀI NGUYÊN HỌC TIẾNG ANH 

Bước này rất quan trọng, là chìa khóa giúp bạn học tiếng Anh nhanh chóng. Nếu như trình tiếng Anh của bạn chỉ ở mức cơ bản hoặc trung cấp, thì đừng nên cố gắng đọc những bài viết trên trang The Verge (bật mí là nó sẽ làm mất động lực ngay vì nó khá khó so với trình độ hiện tại của bạn, toàn thuật ngữ chuyên ngành mà thôi). Thay vào đó, bạn có thể nghe những câu chuyện tin tức tiếng Anh rõ ràng, dễ hiểu trên DZone, NETTUTS, Web Designer Wall, và một số trang web khác dành cho việc học tiếng Anh lập trình  

Hãy chắc chắn rằng các nguồn tài nguyên học tiếng Anh này không quá dễ, vì nếu như bạn học những thứ dưới level hiện tại sẽ dễ khiến bạn nản và (có thể) sinh ra chứng tự mãn, nên hãy chọn nguồn học phù hợp với bản thân nhưng không quá khó. Nếu bạn là một người được nói tiếng Anh, việc đọc sách truyện thiếu nhi hoặc Wikipedia bằng các article tiếng Anh đơn giản sẽ khiến bạn cảm thấy tự tin hơn, và còn làm phong phú vốn từ, cấu trúc nữa. Bạn thực sự có học tiếng Anh không nếu như chỉ thấy những từ đã biết. 

Bạn hãy lựa chọn những bài viết mà bạn lướt qua có thể hiểu ý tác giả muốn nói nhưng cũng đủ khó để bạn phải tra cứu nhiều từ nếu bạn muốn hiểu chi tiết tường tận. Hãy cứ tìm kiếm, hãy cứ dại khờ :))) cho đến khi tìm được nguồn tài liệu phù hợp với trình độ của bạn. 

Có một lưu ý nhỏ trong này đó là hãy tìm nguồn tài liệu match với mục tiêu của bạn 

Xem phim, show truyền hình 

Chắc chắn rằng mọi thứ bạn tìm kiếm đều gần với mục tiêu của bản thân. Nếu mục tiêu của bạn là nói chuyện, giao tiếp tiếng Anh như người bản địa, thì bạn nên xem phim hoặc các show truyền hình (nhưng phải bằng tiếng Anh nha :D). Lúc đầu chắc hẳn sẽ gặp nhiều khó khăn, không sao đừng quá lo, bạn có thể bật phụ đề lên để vừa nghe được và cũng vừa biết được cấu trúc câu, thành ngữ và cụm từ đặc biệt (idioms and phrases) trong tiếng Anh. Khi bạn đã quen thuộc hơn và hiểu những gì diễn viên nói thì hãy xóa phụ đề và xem lại bộ phim một lần nữa để kiểm tra khả năng hiểu tiếng Anh của bạn. Đừng chán khi phải xem lại nhiều lần, hãy chọn bộ phim mà bạn cảm thấy hứng thú, tò mò về nó, mỗi khi bạn xem lại biết đâu được bạn lại học được bài học nào đó. 

Bản thân mình thì thích xem các thể loại hack não (càng khó hiểu càng tốt), bạn nào như mình thì có thể xem Inception, hoặc The Prestige (nếu có xem xong rồi thì cho mình biết cảm nhận như nào nha, với mình thì thấy đã lắm :D). Hoặc thể loại tình cảm, mình gợi ý phim Me before you; Love, Roise;…. bla bla, bạn cứ lên google search nhiều lắm. 

Ngoài ra, có một cách khác để bạn hiểu tường tận bộ phim hơn. Tưởng tượng ra sao nếu một ngày cầm trên tay kịch bản của các bộ phim bom tấn, như Avengers; Parasite, The Internet Movie Script Database (IMSDb) có một danh sách các kịch bản bộ phim mà bạn tha hồ chọn, đơn giản chỉ cần tìm kiếm bất kỳ bộ phim nào đó và đọc cùng lúc khi bạn xem phim, một trải nghiệm thú vị mới lạ ha :))

Xem video Youtube 

Ngoài xem phim ra thì có ty tỷ thứ trên Youtube, nhưng hãy search keyword bằng tiếng Anh thì mới ra nhiều nguồn được nhé! Bạn cũng có thể xem các cuộc phỏng vấn và đánh giá trên youtube, sẽ giúp bạn làm quen với tiếng Anh đàm thoại và cách bạn giao tiếp với người khác như thế nào. 

Tôi gợi ý nho nhỏ, nếu bạn mệt mỏi với việc xem, học mọi thứ bằng tiếng Anh thì bạn nên seach một vài video tiếng Việt nhưng đúng với công việc hiện tại của bạn (như kênh youtube TopDev TV chẳng hạn), vừa thư giãn vừa update kiến thức

  13 kênh Youtube lập trình tiếng Việt giúp bạn trở thành Fullstack developer

Nghe nhạc

Chán xem phim thì âm nhạc là lựa chọn giúp bạn vừa thư giãn vừa học tiếng Anh hiệu quả. Thực tập với các bài hát trending nổi tiếng thì tốt hơn vì bạn luôn nghe chúng ở bất cứ không gian nào, trong xe hơi, trong tiệm tạp hóa, hay trung tâm thương mại (vì chúng không phải là nhạc đặc thù nên phù hợp với mọi hoàn cảnh). Bạn nên tránh nghe rock và rap vì lời bài hát thường mù mờ, tiết tấu nhanh, khó nghe

Kiểm tra ngữ pháp tiếng Anh bằng các câu đố trực tuyến

Khi bạn tự học, một vấn đề xảy ra là bạn có thể bỏ lỡ những lỗi và sai sót mà bạn mắc phải. Một cách dễ dàng để tự kiểm tra là làm các câu đố tiếng Anh trực tuyến. Những câu đố này sẽ kiểm tra ngữ pháp, xây dựng câu dễ dàng hơn.

Chat, tám chuyện với người nước ngoài 

Trò chuyện với bạn bè trực tuyến là một cách thú vị để tự học tiếng Anh, nó khác với việc nói chuyện với giáo viên, hoặc học trên lớp, hoặc thậm chí sử dụng tiếng Anh tại nơi làm việc vì nó thoải mái, và ngôn từ dễ sử dụng. Trò chuyện là một cách tuyệt vời để học tiếng Anh vì bạn có thể thực hành những gì bạn đã học theo cách giản dị, không căng thẳng. Thông qua trò chuyện trên bàn phím, bạn có thể kiểm tra các lỗi ngữ pháp trước khi nhấn nút Enter. Ngoài ra, việc bạn bè của bạn nói tiếng Anh với bạn là động lực thúc đẩy hơn cho bạn. Bạn không chỉ có thể chứng minh với họ rằng tiếng Anh của bạn ngày càng tốt hơn, mà bạn còn cảm thấy thỏa mãn hơn khi biết rằng bạn có thể nói tiếng Anh thoải mái với bạn bè bất cứ lúc nào.

Đọc e-book, báo, tạp chí online 

Đọc cũng quan trọng như nghe khi học tiếng Anh. Đọc và nghe vừa làm sắc nét tâm trí vừa rèn luyện bạn suy nghĩ bằng tiếng Anh.

Những người nói tiếng Anh không phải là người bản ngữ luôn phải dịch tiếng Anh trong tâm trí, điều này gây ra sự chậm trễ trong phản ứng. Tuy nhiên, nếu tâm trí được đào tạo để suy nghĩ bằng tiếng Anh điều này giúp dễ dàng trong việc hiểu và nói ngôn ngữ. Bạn càng đọc nhiều, bạn càng tiếp xúc nhiều hơn với cấu trúc câu tiếng Anh, từ vựng mới có nghĩa là bạn có rất nhiều câu để lựa chọn khi bạn bắt đầu nói tiếng Anh.

Internet là một kho tàng sách điện tử, bài báo và tạp chí tiếng Anh. Tìm một tài nguyên với một chủ đề mà bạn thực sự quan tâm. Mà không chỉ Internet, Google là một kho tàng không đáy nữa, “dân ta phải biết sử ta, nếu mà không biết thì tra google”, bạn muốn gì cứ lên google là có tất, chỉ có điều bạn có kỹ năng search google hay không thôi :))) 

  Cách tìm kiếm nâng cao với Google

Viết ra những gì bạn nghĩ 

Nó không phải là một bài báo được xuất bản trực tuyến, bạn chỉ cần bắt đầu với những điều cơ bản diễn ra xung quanh, có thể hiểu như là một nhật ký hằng ngày (daily diaries) vậy ý. Viết tác phẩm của riêng bạn kết hợp tất cả việc học của bạn với nhau với tất cả những gì bạn biết về ngữ pháp tiếng Anh, từ vựng và hiểu biết tổng thể.

Sau khi viết, hãy tự kiểm tra lại xem có lỗi nào không. Để làm điều này, tốt nhất là đưa những gì bạn vừa viết vào một tệp để bạn có thể sử dụng các chương trình kiểm tra ngữ pháp để xác định vị trí lỗi.

Có nguồn học xong xuôi hết rồi thì bước cuối cùng này cũng là bước quan trọng lắm đấy. 

Bước 4: THỰC HÀNH MỖI NGÀY

Vì sao lại thực hành mỗi ngày, vì những lý do sau đây: 

  • Tạo động lực: Nếu bạn làm điều gì đó mỗi ngày, nó sẽ trở thành thói quen. Một khi bạn tạo thói quen, bạn sẽ có động lực để tiếp tục thói quen đó.
  • Tiết kiệm thời gian: Khi bạn chỉ học một hoặc hai lần một tuần, bạn sẽ quên rất nhiều điều mới bạn đã học trong buổi học trước. Vì vậy, bạn phải lãng phí rất nhiều thời gian có giá trị của mình để xem xét những thứ bạn đã học. Nếu bạn học mỗi ngày, tài liệu mà bạn đã học ngày hôm trước sẽ tươi mới trong tâm trí bạn, điều đó có nghĩa là bạn sẽ dành ít thời gian hơn để xem xét.

Lời nhắn nhủ: ĐỪNG BỎ CUỘC

Tôi biết bạn có thể học tiếng Anh hiệu quả, thậm chí là học tốt hơn cả tôi (tôi đã già rồi !). Làm sao tôi biết ư? Bởi vì hàng triệu và hàng triệu người trên khắp thế giới đã chứng minh rằng điều đó xảy ra được. Bạn càng luyện tập, càng mắc lỗi, càng nói, bạn càng nhanh chóng thông thạo tiếng Anh. Vậy tại sao không bắt đầu ngay hôm nay?

Chúc bạn thành công trên con đường học tốt tiếng Anh này !

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

Tìm việc IT lương cao, đãi ngộ tốt trên TopDev ngay!

Cách làm các slide và các hiệu ứng hover do JavaScript và CSS tạo ra

Làm sao để sử dụng previousElementSibling để biết được position của phần tử đó của mảng, ngoài ra còn dùng bằng jquery để code (không chuyên sâu lắm);

Khi code previousElementSibling này mục đích chính của nó là phục vụ cho code slide và các sự kiên hover mà nhiều phần tử hoạt động, theo mình nó vẫn là quan trọng với 1 số html devolop

Khi code cái này chúng ta cần biết được cái gì là phần tử đang hoạt động, để tìm ra cái thằng đứng sau ngay nó

<div class="one_team  run">
                    <div class="row" style="position: relative;">
                        <div class="one_people col-sm-4">
                            <img src="images/team-img1.jpg" alt="" srcset="" class="imgs_vt2">
                            <div class="bolds">
                                <b class="bold_vt2">MARY,CEO</b>
                            </div>
                            <p class="text_vt2">Lorem ipsum dolor sit amet consectetur, adipisicing elit.</p>
                        </div>
                        <div class="one_people col-sm-4">
                            <img src="images/team-img2.jpg" alt="" srcset="" class="imgs_vt2">
                            <div class="bolds">
                                <b class="bold_vt2">MARY,CEO</b>
                            </div>
                            <p class="text_vt2">Lorem ipsum dolor sit amet consectetur, adipisicing elit</p>
                        </div>
                        <div class="one_people col-sm-4">
                            <img src="images/team-img3.jpg" alt="" srcset="" class="imgs_vt2">
                            <div class="bolds">
                                <b class="bold_vt2">MARY,CEO</b>
                            </div>
                            <p class="text_vt2">Lorem ipsum dolor sit amet consectetur, adipisicing elit.</p>
                        </div>
                    </div>
                </div>

                <div class="one_team">
                    <div class="row">
                        <div class="one_people col-sm-4">
                            <img src="images/team-img4.jpg" alt="" srcset="" class="imgs_vt2">
                            <div class="bolds">
                                <b class="bold_vt2">MARY,CEO</b>
                            </div>
                            <p class="text_vt2">Lorem ipsum dolor sit amet consectetur, adipisicing elit.
                            </p>
                        </div>
                        <div class="one_people col-sm-4">
                            <img src="images/team-img5.jpg" alt="" srcset="" class="imgs_vt2">
                            <div class="bolds">
                                <b class="bold_vt2">MARY,CEO</b>
                            </div>
                            <p class="text_vt2">Lorem ipsum dolor sit amet consectetur, adipisicing elit</p>
                        </div>
                        <div class="one_people col-sm-4">
                            <img src="images/team-img6.jpg" alt="" srcset="" class="imgs_vt2">
                            <div class="bolds">
                                <b class="bold_vt2">MARY,CEO</b>
                            </div>
                            <p class="text_vt2">Lorem ipsum dolor sit amet consectetur, adipisicing elit.</p>
                        </div>
                    </div>
                </div>

                <div class="one_team">
                    <div class="row">
                        <div class="one_people col-sm-4">
                            <img src="images/team-img7.jpg" alt="" srcset="" class="imgs_vt2">
                            <div class="bolds">
                                <b class="bold_vt2">MARY,CEO</b>
                            </div>
                            <p class="text_vt2">Lorem ipsum dolor sit amet consectetur, adipisicing elit</p>
                        </div>
                        <div class="one_people col-sm-4">
                            <img src="images/team-img8.jpg" alt="" srcset="" class="imgs_vt2">
                            <div class="bolds">
                                <b class="bold_vt2">MARY,CEO</b>
                            </div>
                            <p class="text_vt2">Lorem ipsum dolor sit amet consectetur, adipisicing elit</p>
                        </div>
                        <div class="one_people col-sm-4">
                            <img src="images/team-img4.jpg" alt="" srcset="" class="imgs_vt2">
                            <div class="bolds">
                                <b class="bold_vt2">MARY,CEO</b>
                            </div>
                            <p class="text_vt2">Lorem ipsum dolor sit amet consectetur, adipisicing elit.</p>
                        </div>
                    </div>

Trong cái souce code này nó có 3 cục cha là “one_team” đây là 3 cục mà dùng để chuyển slide, khi muốn có 1 slide chúng ta phải cho tất cả phần tử là

position: absolute;
width:100%;
height:100%;

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

Những kinh nghiêm thú vị hơn là khi ta code mấy phần tử này ,chúng ta nên để nó là:

opacity : 0;
visibility: hidden;

 

Cho tất cả biến mất đi khi đó để nó hoạt động, bạn muốn cái phần tử mẹ nào hoạt động thì cho một cái class gì gì đó và vào css set cho nó là:

opacity : 1;
visibility: visible;

Nó có thể giảm tối thiểu việc hiệu ứng slide, vậy là xong cái css việc còn lại là chỉ cần set Jquery (or JavaScript) sao cho theo ý định của mình.

Nếu ai muốn dùng kiểu button để điều chỉnh các slide thì mình sẽ đưa ra ngay đây.
Vẫn tiếp tục với cái souce code đau não lúc nãy thì nó sẽ có 3 cái btn tượng trưng cho 3 cái phần tử trong slide.
Nó như thế này:

 <button class="btn btn-primary btns-vt2"></button>
                <button class="btn btn-primary btns-vt2"></button>
                <button class="btn btn-primary btns-vt2"></button>

 

Thường khi dùng btn của slide ta thường đặt tên class giống nhau cho dễ xử lý. Để xử lý cái này ta cần biết cái vị trí btn trong cái arr mà khách hàng click vào là bao nhiêu ; bằng cách như thế này: (JavaScript and Jquery)

var btn = document.getElementsByClassName("btns-vt2");
    for(var i =0 ; i < btn.length ;i++){
        btn[i].onclick=function name(params) {
            var is=0;
            var this_slide=this;
            for( is = 0 ; this_slide=this_slide.previousElementSibling;is++){
          //cái này chính là cái thuật toán tính vị trí đấy
         }

            for( us = 0 ; us < $(".one_team").length;us++){ 
          // vòng này thì nó lại khác trước khi mà click vào thì phải 
           xóa all các phần tử trong đó
                $(".one_team").eq(us).removeClass("run");
            }
            $(".one_team").eq(is).addClass("run");
                    }
    }

 

Và nếu theo Jquery thì mình làm theo thuật toán của mình là như sau (cái này hơi dài đây là một souce code khác nên các bạn cố hình dung nhé!!)

 $(".one_people").hover(function name (params) {
        var stt=0;  
        var te= $(this);
        for(var is=0; is<$(".one_people").length;is++){
            if($(".one_people").eq(is).html()==te.html()){
                stt=is;
            }
        }
       $(".imgs_vt2").eq(stt).addClass("gout");  
        $(".text_vt2").eq(stt).addClass("over");
        $(".imgs_vt2").eq(stt).removeClass("ungout");  
        $(".text_vt2").eq(stt).removeClass("unover");

 

Cái này là một ví dụ cho cái hover mà nhiều phần tử chuyển động như mình nói trên ấy sau đó bạn thích add gì thì add, theo mình để các hiệu ứng đẹp hơn thì cần thuần thạo cái animation ;

.ungout{
    position: relative;
    transition: 0.4s;
    top: 0px;
    animation: ungo_top 0.5s;
    opacity: 1;
}
@-webkit-keyframes ungo_top{
    to{top: 0px;position: relative;opacity: 1;}
    from{top:-100px; position: relative;opacity: 1;}

Thế nhé, qua bài viết trên mong các bạn sẽ có thêm chút kiến thức cho mình!

TopDev via Tapchilaptrinh

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

Hiểm nguy rình rập khi dùng toán tử + trong javascript

Một toán tử phình phường có thể làm chúng ta điêu đứng

Như mọi thứ ngôn ngữ lập trình, ngôn ngữ toán học, Javascript dùng dấu + để thực hiện cộng giá trị. Tuy nhiên, vì là Javascript, anh có quyền không đi theo quy chuẩn chung, anh còn được dùng cho việc nối chuỗi

Nếu chúng ta dùng nó cho việc cộng số

const giaKhauTrangBinhThuong = 35000;
const doiGiaDichCovy = 300000;
const tienShip = 20000;
const chiPhiMuaHopKhauTrang = giaKhauTrangBinhThuong * doiGiaDichCovy + tienShip;

Xem việc làm javascript đãi ngộ tốt trên TopDev

Chúng ta dùng nó cho việc nối chuỗi

const ten = "Tui là An";
const nenLamGi = "Tui ở nhà cho Bình An";

const tuiLaAi = ten + ' & ' + nenLamGi;

Chúng ta sẽ có câu “Tui là An & Tui ở nhà cho Bình An”, mọi thứ hoạt động bình thường.

Thí dụ bạn lỡ viết thế này thì sao

const seRaSao = 9 + '1';

Khi có 2 giá trị khác kiểu, nó sẽ ưu tiên kiểu giá trị mạnh hơn, là kiếu string nên kết quả chúng ta nhận là “91” chữ không phải 10

Điều đúc kết ở đây là gì, hễ chúng ta muốn cộng 2 con số lại, chuyển nó về giá trị số Number(ten_bien) trước cho chắc.

Bài viết gốc tại Vuilaptrinh

Tham khảo thêm các tin tuyển dụng việc làm IT trên TopDev

Mãi phàn nàn – than vãn về công ty, xu hướng chung của người bắt đầu công việc?

Một câu hỏi nhỏ dành cho bạn: Bạn có thường hay than vãn, tâm sự về tất tần tật những chuyện buồn vui trên công ty với các hội anh em/bạn bè của mình không? Khỏi nói cũng biết, tất nhiên là có rồi, bản thân TopDev cũng nghe nhiều phản hồi thú vị xoay quanh môi trường nhân sự đấy!

Niềm vui có, nỗi buồn có, khen chê đều có. Tuy nhiên, những gì TopDev ghi nhận được là những người mới bắt đầu đi làm hoặc đi làm chưa lâu, họ có xu hướng chê công ty của mình nhiều hơn là đánh giá cao tiềm năng của công ty:

  • Công ty dùng công nghệ cũ xì khiến việc vận hành không hiệu quả. Công ty gì phúc lợi kém quá, lại hay kì kèo.
  • Đồng nghiệp thì ba gai đủ chuyện. Sếp thì thiếu quan tâm thậm chí không hề hiểu nhân viên. 
  • Công việc dồn dập và tình trạng nước đến chân mới nhảy liên tục diễn ra.
  • Đôi khi công việc quá nhàn hạ, không rõ định hướng và bản thân nhân viên không phát triển được.  

Nói chung là có vô vàn thứ để chê. Và TopDev đang thuật lại những suy nghĩ của một nhóm người đang trong giai đoạn tiếp cận môi trường mới. Thật ra, việc bạn là ai và làm gì, làm ở môi trường nào cũng đều có những ý nghĩa riêng cả. Liệu các bạn có thay đổi suy nghĩ của mình về các công ty không? Cùng TopDev xem hết bài viết nhé! 

  Top 5 website giúp thiết kế CV chuẩn format, đủ nội dung
  Viết thư xin việc đúng cách

Tập thích nghi là điều quan trọng

Tốt nghiệp một ngôi trường Đại học danh tiếng cùng tấm bằng cử nhân, bạn bắt đầu đi làm tại một công ty cũng có chút tiếng tăm. Rồi chuyện gì xảy ra tiếp theo. Bạn than phiền: Công ty gì lương thấp quá vậy, công việc thì thiếu sáng tạo mà suốt ngày cứ đòi hỏi nhân viên này nọ. 

Trải nghiệm đầu về chuyến hành trình chinh phục công việc mơ ước kết thúc khi bạn quyết định rời khỏi công ty. Rồi kế đến, bạn lại “nhập gia tùy tục” tại một công ty với quy mô lớn hơn. Giai đoạn đầu là những chuỗi ngày êm đềm đúng nghĩa. Tuy nhiên sau đó, bạn chợt nhận ra, bản thân mình lại tiếp tục chê công ty: 

1. Công ty gì lớnlương thưởng không có. Task thì nhiều – Deadline thì dí nhân viên mà lương OverTime tương ứng con số 0 tròn trĩnh 

2. CEO đúng là có tố chất nhưng ngược với lãnh đạo thì lúc nào cũng lãnh đạm với nhân viên

3. Lương thì thấp, làm lâu mà không được tăng lương nhiều

Tiếp tục vòng quay trải nghiệm, bạn lại “bay” sang một công ty khác. Ở đây lương cao hơn, trả đúng hạn, quá tốt rồi nhưng không, bạn lại than phiền chuyện khác:

  • Đồng nghiệp nhiều gì mà hơn thua, coi thường người khác, thiếu thân thiện 
  • Công ty gì cứ liên tục thay đổi yêu cầu, thích chỉ định và không lắng nghe tiếng nói của nhân viên
  • CEO phởn phơ và nhàn rỗi “đi dạo” vòng quanh giám sát nhân viên, ai mà tập trung làm việc được

Các bạn có nhận ra điều gì không? Việc các bạn chê trách hay than vãn về công ty của mình bắt nguồn từ những “viễn cảnh tươi đẹp” mà các bạn đã vẽ ra trước khi bắt đầu trải nghiệm cuộc sống của một nhân viên. Hãy nhớ rằng, công ty cũng giống như một xã hội thu nhỏ. Nơi đó bạn sẽ tiếp xúc nhiều người, nhiều cái mới hơn. Việc quan trọng nhất của bạn lúc này là học cách thích nghi với môi trường làm việc. Đồng thời, bạn hãy mang trong mình những suy nghĩ tích cực hơn, loại bỏ những định kiến, cảm xúc tiêu cực về công ty. Điều này giúp bạn tìm ra được ý nghĩa thật sự trong vấn đề trải nghiệm công việc.

Hãy khai thác những khía cạnh tích cực và chấp nhận một điều: Công ty nào cũng có vấn đề cả!

Việc bạn điều chỉnh suy nghĩ sẽ tạo ra những thay đổi lớn. Hãy thử nhìn vào những mặt tốt của công ty xem, biết đâu bạn sẽ biết thêm nhiều điều thú vị. 

Ngồi ngẫm nghĩ lại, bạn lại nhận ra công ty mình cũng có điểm tốt đấy chứ:

  • Cũng có đồng nghiệp vui tính, lại thông tin, giỏi chuyên môn IT và giúp đỡ mình nhiều
  • Công việc nhiều nhưng mình biết cách cân bằng, nắm được những phần core quan trọng. Môi trường cũng khá năng động giúp mình nhanh lên trình hơn 
  • Mình được chọn tham dự mấy khóa học đào tạo chuyên môn, tận mắt thấy những quy trình công nghệ hiện đại và còn được gặp gỡ nhiều nhân vật nổi tiếng là các chuyên gia hàng đầu trong lĩnh vực nhân sự IT nữa 

Một điều bạn nên biết là bất kỳ một công ty nào cũng có vấn đề cả. Điều quan trọng là bạn có tinh tế nhận ra được và chấp nhận nó hay không. Những vấn đề đó có thể xuất phát từ nhiều chiều và trở thành đặc tính chung của mọi quy mô tổ chức/doanh nghiệp. 

Như đã nói trước đó, vì là giai đoạn trải nghiệm công việc, bạn hãy học cách thích ứng sao cho phù hợp với môi trường. Bất kỳ ai cũng đều có những định hướng cụ thể để thăng tiến trong sự nghiệp và bạn cũng không ngoại lệ. Hãy tập trung phần mình và cố gắng tạo ra những giá trị. Về chuyện các vấn đề tồn đọng, nếu là một nhân viên có bản lĩnh thì việc giải quyết chúng chỉ còn là thách thức về thời gian đối với bạn mà thời.

Hãy biến thách thức thành cơ hội

Thay vì suy nghĩ về những điều tiêu cực, bạn hãy biến nó thành cơ hội để bạn thể hiện năng lực của mình:

  • Nếu quy trình không rõ ràng? Đừng lo, hãy chủ động kêu gọi và ngồi lại với team để thảo luận, đóng góp các ý kiến nhằm tạo ra một quy trình phù hợp hơn
  • Nhân sự thiếu kỹ năng cả về chuyên môn lẫn kỹ năng mềm? Bạn đừng chê nữa, hãy mở lòng giao tiếp với họ. Bạn có thể tìm hiểu những mong muốn của họ để rồi trình bày lại với nhà quản lý/lãnh đạo nhân sự. Biết đâu các đồng nghiệp đang chờ một người biết chủ động và không ngại thể hiện mình như bạn đấy
  • Nhân thấy hệ thống tổ chức chưa thật sự thích hợp? Chỉ đơn giản là bạn chia sẻ với các manager, leader, cùng họ phân tích và đề xuất những phương án mới, có tính khả thi hơn

Đấy! Khó khăn nào rồi cũng có cách giải quyết thôi, phải không nào! Thách thức được tạo ra để bạn thử sức và trải nghiệm mình. Cũng có thể nói thách thức chính là cơ hội. Vì thế, bạn nên tận dụng những thách thức để tạo ra những giá trị riêng cho bản thân mình. Việc chấp nhận các thách thức, thay đổi suy nghĩ tích cực hơn và học cách thích nghi linh hoạt với môi trường sẽ giúp bạn có những trải nghiệm tuyệt vời trong công việc của mình.

Lời kết:

Điều mấu chốt bạn cần nhớ là đừng áp đặt quá nhiều suy nghĩ của bạn về môi trường làm việc của công ty. Và cũng đừng so sánh công ty này với công ty khác. Mỗi công ty đều khác nhau và tất nhiên chúng đều có những vấn đề riêng khó thay đổi. Hãy thích nghi và giảm thiểu những xúc cảm tiêu cực để mỗi ngày làm việc đều có những niềm vui. Chung quy lại, mọi thứ đều do chính bạn, hãy nhìn nhận đúng đắn và hy vọng bạn sẽ lựa chọn cho mình một công ty phù hợp để đồng hành phát triển lâu dài. 

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

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

Giải thích Javascript Reactivity

Bài viết được sự cho phép của tác giả Lưu Bình An

Rất nhiều thư viện Javascript như Angular, React, Vue sử dụng Reactivity, hiểu được reactivity là gì và cách nó chạy sẽ giúp nâng cao kỹ năng lập trình

Một ví dụ về Reactivity của Vue

<div id='app'>
  <div>Price: ${{ price }}</div>
  <div>Total: ${{ price * quantity }}</div>
  <div>Taxes: ${{ totalPriceWithTax }}</div>
</div>
var vm = new Vue({
  el: '#app',
  data: {
    price: 5.00,
    quantity: 2
  },
  computed: {
    totalPriceWithTax() {
      return this.price * this.quantity * 1.03
    }
  }
})

Ở đây khi chúng ta thay đổi giá trị của price, thằng Vue nó sẽ làm 3 thứ

  1. Cập nhập lại giá trị price
  2. Tính lại giá trị total
  3. Gọi lại hàm totalPriceWithTax và cập nhập lại giá trị

Thấy hết sức bình thường, nhưng đó KHÔNG PHẢI LÀ CÁCH CHẠY BÌNH THƯỜNG CỦA JAVASCRIPT

Ví dụ với javascript bình thường

let price = 5
let quantity = 2
let total = price * quantity // kết quả sẽ là 10
price = 20 // gán lại giá trị của price
console.log(`total is ${total}`)

Bạn hãy đoán xem kết quả log ra là mấy? Sẽ là 10 chứ không phải 40 đâu.

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

Vấn đề và giải pháp

Vấn đề là chúng ta cần phải lưu cái cách tính price * quantity này lại ở đâu đó, để chúng ta re-run cách tính này khi gọi lại total, nó sẽ không nên là biến số mà là thành hàm, thì khi đó nếu giá trị price hoặc quantity thay đổi chúng ta sẽ có kết quả total thay đổi theo.

Chúng ta cần một nơi để lưu phần code tính toán kiểu như vậy lại ở đâu đó, để khi price hoặc quantity thay đổi, chúng ta sẽ chạy lại tất cả những gì đã lưu

let price = 5;
let quantity = 2;
let total = 0;
let target = () => { total = price * quantity }

record(); // lưu lại đâu đó để re-run sau này

target(); //

Hàm record chúng ta sẽ implement nó như sau

let storage = []; // đưa toàn bộ các hàm muốn re-run vào mảng này

function record() {
  storage.push(target);
}
// hàm để chạy lại tất cả những thứ đã lưu trong store
function replay() {
  storage.forEach(run => run());
}

Giải pháp tổng quát hơn

Nếu đã nắm được ý tưởng chính để giải quyết bài toán ban đầu, giờ chúng ta sẽ hiện thực hóa nó bẳng observer pattern, tạo một class để quản lý những chuyện đó

class Dep {
  constructor() {
    // thay vì là starage, thiên hạ đã thống nhất lấy cái tên subscribers
    this.subscribers = []; 
  }
  depend() {
    if (target && !this.subscribers.includes(target)) {
      // chỉ thêm vào nếu chưa có hoặc không trùng
      thiss.subscribers.push(target);
    }
  }
  notify() {
    // run tất cả target, tên gọi khác là observer
    this.subscribers.forEach(sub => sub()); 
  }
}

Code lại ví dụ trên sử dụng class mới tạo này

const dep = new Dep();

let price = 5;
let quantity = 2;
let total = 0;
let target = () => { total = price * quantity }
dep.depend();
target();

console.log(total); // 10
price = 20;
console.log(total); // 10
dep.notify();
console.log(total); // 40

Chúng ta vẫn còn có thể nâng cấp đoạn code trên, thay vì

let target = () => { total = price * quantity }
dep.depend();
target();

… chúng ta đóng gói nó vào một watcher, sau đó chỉ cần gọi

watcher(() => {
  total = price * quantity
})

Implement cái function watcher này như bên dưới

function watcher(myFunc) {
  target = myFunc; // active target, target ở đây là global variable
  dep.depend(); // đưa target vào dependency
  target(); // gọi hàm target
  target = null; // reset
}

Tách Dep cho mỗi biến

Chúng ta sẽ muốn mỗi một biến có một Dep riêng, trước tiên ta đưa price và quantity thành property của data

let data = {price: 5, quantity: 2}

Chúng ta sẽ có các Dep khác nhau cho price và quantity

watcher phụ thuộc cả 2 biến

watcher(() => {
  total = data.price * data.quantity;
})

watcher chỉ phụ thuộc biến price

watcher(() => {
  salePrice = data.price * 0.9;
})

Chúng ta muốn khi giá trị price bị thay đổi, hàm dep.notify của price store sẽ được gọi

>> total
10
>> price = 20 // lúc này thằng notify của price sẽ được gọi liên luôn
>> total
40

Đọc thêm tài liệu về Object.defineProperty nếu chưa biết. Áp dụng nó trong ví dụ này

let data = {price: 5, quantity: 2}

let internalValue = data.price; // giá trị khởi tạo

Object.defineProperty(data, 'price', { // chỉ cho thằng Price Property
  get() {
    console.log('Em bị access');
    return internalValue;
  },
  set(newVal) {
    console.log('Em bị thay đổi');
    internalvalue = newVal;
  }
})
data.price // call get()
data.price = 20 // call set()

total = data.price * data.quantity;
data.price = 20;

Với cách này, chúng ta có thể chạy kèm một hàm nào đó khi giá trị price được get hoặc set. Với idea là như thế chúng ta tổng quát quá lên cho nhiều biến

let data = {price: 5, quantity: 2}

Object.keys(data).forEach(key => {
  let intervalvalue = data[key];
  Object.defineProperty(data, key, { // chỉ cho thằng Price Property
    get() {
      console.log('Em bị access');
      return internalValue;
    },
    set(newVal) {
      console.log('Em bị thay đổi');
      internalvalue = newVal;
    }
  })
})

total = data.price * data.quantity;
data.price = 20;

Tổng hợp các ý tưởng chính

total = data.price * data.quantity

Khi một đoạn code như vậy được chạy, nó sẽ get giá trị của price, chúng ta muốn thẳng price khi bị thay đổi hoặc gọi, nó sẽ re-run một function

  • Ở Get: nhớ dùm cái function này, bọn tao sẽ nhờ mày chạy lại
  • Ở Set: chạy cái function mày đã giữ hộ ấy, thay đổi giá trị luôn nhé

Và đây là toàn bộ code

let data = {price: 5, quantity: 2};
let target = null;

// Dep không thay đổi gì so với ở trên
class Dep {
  constructor() {
    // thay vì là starage, thiên hạ đã thống nhất lấy cái tên subscribers
    this.subscribers = []; 
  }
  depend() {
    if (target && !this.subscribers.includes(target)) {
      // chỉ thêm vào nếu chưa có hoặc không trùng
      thiss.subscribers.push(target);
    }
  }
  notify() {
    // run tất cả target, tên gọi khác là observer
    this.subscribers.forEach(sub => sub()); 
  }
}

// chạy qua từng data của property
Object.keys(data).forEach(key => {
  let intervalvalue = data[key];

  // mỗi em một Dep
  const dep = new Dep();

  Object.defineProperty(data, key, { // chỉ cho thằng Price Property
    get() {
      dep.depend(); // lưu hộ tao cái
      return internalValue;
    },
    set(newVal) {
      internalvalue = newVal;
      dep.notify();// re-run đi em
    }
  })
})

// watcher sẽ không còn gọi dep.depend nữa
function watcher(myFunc) {
  target = myFunc;
  target();
  target = null;
}

watcher(() => {
  data.total = data.price * data.quantity;
})

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

Tuyển dụng lập trình viên lương cao trên TopDev

3 lỗi javascript thường mắc phải làm ảnh hưởng perfomance

Bài viết dành cho những người nghiện tốc độ, nghiện cách viết ES6, cùng điểm qua 3 lỗi thường gặp dẫn đến ảnh hửởng performance trong Javascript.

1. loop qua một array

Chúng ta thử xem thời gian tiêu tốn cho việc loop qua 10k item trong array

  • for: ~10 microseconds
  • while: ~11 microseconds
  • forEach: ~77 microseconds
  • for-of: ~110 microseconds
  • reduce: ~113 microseconds

Nếu muốn tính tổng của một array thì sử dụng reduce là rõ ràng, tuy nhiên cái giá phải trả quá lớn. Vòng lặp mới nhất từ ES6 for-of cũng về áp chót. Như vậy cứ xài vòng for kinh điển, tuy cũ mà nhanh gấp 10 lần cái for-of

Tuyển dụng Javascript đãi ngộ tốt trên TopDev

2. Duplicate một array

Khi thế giới đang tồn thờ tư tưởng immutable function ( không sửa cái input khi cho ra output ), việc duplicate một input array là chuyện thường ngày ở huyện.

Chúng ta hãy xem kết quả tất cả các cách chúng ta có thể dùng để duplicate một array

  • [].concat(arr): ~366 microseconds
  • arr.slice(): ~367 microseconds
  • arr.map(x => x): ~469 microseconds
  • [...arr]: ~512 microseconds
  • Array.from(arr): ~1,436 microseconds

Như vậy 2 phương thức cũ như dưa mắm concat và slice vẫn dành chiến thắng, kiểu spread operation mới ES6 vẫn top cuối.

  Tại sao API của Facebook lại bắt đầu bằng một for loop?

3. Loop qua một object

  • for(let key in obj): ~240 microseconds
  • Object.keys(obj) sau đó for each: ~294 microseconds
  • Object.entries(obj) sau đó for of: ~535 microseconds

Ở hai cách làm bên dưới, do phải tạo thêm một mảng chứa key, rồi mới loop qua mảng này object nên nó chậm.

  JavaScript Arrays và Objects thật ra không khác gì sách và báo
Đừng mù quáng xài cách viết mới nếu không phù hợp với ứng dụng đang viết

3 JavaScript Performance Mistakes You Should Stop Doing </a

TopDev via Vuilaptrinh

Tham khảo các vị trí lập trình viên IT khác tại đây

Xử lý lỗi nếu có xảy ra trong Javascript

Tác giả: Lưu Bình An

Lỗi nếu có xảy ra, phải được xử lý hết tránh để chết nguyên ứng dụng. Điểm lại một vài cách xử lý lỗi trong javascript

Javascript error

throw new Error('khi có lỗi') sẽ tạo ra một object Error và dừng chạy.

Error object có 2 property có sẵn, 1 là message

const myError = new Error('Lỗi rồi nè');
console.log(myError.message);
// => Lỗi rồi nè

…cái thứ 2, rất quan trọng, là stack, nó sẽ cho ta history các phương thức và file đã gọi qua.

Error: please improve your code
 at Object.<anonymous> (/Users/gisderdube/Documents/_projects/hacking.nosync/error-handling/src/general.js:1:79)
 at Module._compile (internal/modules/cjs/loader.js:689:30)
 at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
 at Module.load (internal/modules/cjs/loader.js:599:32)
 at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
 at Function.Module._load (internal/modules/cjs/loader.js:530:3)
 at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
 at startup (internal/bootstrap/node.js:266:19)
 at bootstrapNodeJSCore (internal/bootstrap/node.js:596:3)

Nếu chúng ta không tự xử lý các trường hợp có lỗi, nó sẽ chết ngay chổ đó, để tránh tình huống này, tìm hiểu một số cách bắt lỗi

Xem việc làm javascript đãi ngộ tốt trên TopDev

try…catch

const a = 4;

try {
  // b chưa được định nghĩa, nó sẽ báo lỗi
  console.log(b);
} catch (err) {
  console.error(err)
}

// vẫn chạy đến đây
console.log(a);

Nếu không để console.log(b) bên trong try..catch, nó sẽ không chạy đến đoạn console.log(a)

…finally

Đôi khi chúng ta cần chạy một đoạn code dù nó có bị lỗi hay không bị lỗi, nó cũng sẽ giống ở trên, nhưng viết nó sẽ rõ ràng hơn

const a = 4;

try {
  // b chưa được định nghĩa, nó sẽ báo lỗi
  console.log(b);
} catch (err) {
  console.error(err)
} finally {
  console.log(a);
}

Các hàm async

Hiện tại chúng ta có 3 cách để làm việc với các hàm async, cách xử lý lỗi nếu có trên 3 cách này: callback, Promise, async/await

callback

myAsyncFunc(someInput, (err, result) => {
    if(err) return console.error(err);
    console.log(result);
})

Promise

Promise.resolve(1)
  .then(res => {
    console.log(res) // 1
    throw new Error('something went wrong');
    return Promise.resolve(2);
  })
  .then(res => {
    // sẽ không chạy
    console.log(res);
  })
  .catch(err => {
    console.error(err);
    return Promise.resolve(3)
  })
  .then(res => {
    // (A)
    console.log(res) // 3
  })
  .catch(err => {
    // trong trường hợp block (A) xảy ra lỗi
    console.error(err)
  })

async/await

async function() {
  try {
    await someFuncThatThrowsAnError()
  } catch (err) {
    console.error(err) 
  }
  // vẫn chạy
  console.log('Easy!')
}

Hiển thị lỗi ở phía giao diện người dùng

Ví dụ chúng ta làm Single Page App bằng React, chúng ta muốn hiển thị lỗi trên giao diện như thế này

Có thể dùng React Portal để chèn vào hoặc dùng một component nhận vào Error Object và render ra trên giao diện

<div>
  <GobalError err={errorObj} reset={handleResetError} />
</div>

Nếu lỗi hiển thị dạng inline phía dưới input

<div>
  <input
      type="text"
  />
  <button onClick={this._callBackend}>Delete your city</button>
  <InlineError error={this.state.error} />
</div>

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

Tham khảo các vị trí tuyển dụng IT tại đà nẵng, hcm, hà nội tại đây

13 kênh Youtube lập trình tiếng Việt giúp bạn trở thành Fullstack developer

Học lập trình cho Fullstack Developer – Theo thống kê mỗi anh em lập trình viên trung bình dành 15-25 phút vi vu trên Youtube. Để không lãng phí 30 phút mỗi ngày thời gian fix bug và kiếm gấu, anh em nên save lại ngay list tổng hợp các kênh học lập trình ngon-bổ-hoàn toàn miễn phí dưới đây.

Tuyển lập trình viên Full Stack

Học lập trình cùng TOIDICODEDAO – PHẠM HUY HOÀNG

Chia sẻ kiến thức, kinh nghiệm về ngành lập trình, cuộc sống của lập trình viên. Có rất nhiều tutorial hay ho và gần gũi, thậm chí những người hoàn toàn không biết gì về code cũng có thể học lập trình.

CODEAHOLICGUY

Hoàng Nguyên – chủ blog codeaholicguy rầm rộ trong giới dev. Đây là kênh Vlog chia sẻ về kiến thức và cuộc sống lập trình viên truyền động lực cho những anh em muốn phát triển con đường coder.

KTEAM

Chanel hướng dẫn lập trình từ cơ bản đến nâng cao đa dạng ngôn ngữ lập trình C, C++, SQL server,… dành cho người không vững lập trình. Một kênh hoàn toàn miễn phí anh em newbie không thể bỏ qua.

ZENDVN – HỌC LẬP TRÌNH ONLINE

ZendVN thực chất là một kênh học lập trình trực tuyến, và channel Youtube này chia sẻ miễn phí các video tự học trên rất nhiều ngôn ngữ lập trình: NodeJS, Angular, VueJS, Python, PHP, HTML CSS, Javascript, ReatJS,…

KÊNH TOPDEV TV CHANNEL

Không chỉ chia sẻ về những kiến thức lập trình, TopDev TV Channel còn có nhiều nội dung liên quan đến các kỹ năng mềm dành cho lập trình viên ở đủ mọi trình độ. Một kênh youtube giúp các bạn có thể được học hỏi kinh nghiệm từ các chuyên gia hàng đầu tại Việt Nam.

TRUNG TÂM ĐÀO TẠO TIN HỌC KHOA PHẠM

Khó có một kênh Youtube miễn phí với chất lượng video được đầu tư như vậy. Anh em có thể tham khảo nguồn tự học về php, zend framework, laravel framework, lập trình android, … Ngoài ra kênh còn chia sẻ kiến thức sử dụng github cũng như một số bài tập để luyện tập sau khi kết thúc khoá học.

  TẤT TẦN TẬT VỀ PHP - Tìm hiểu về PHP như thế nào?

DẠY NHAU HỌC

Với câu slogan cực chất: “Học lập trình dạy cho ta cách suy nghĩ”, không chỉ là một channel gồm video tutorial kiến thức về C, C++ và cấu trúc dữ liệu mà đây còn là nơi chia sẻ những kĩ năng nghề nghiệp bổ ích cho các anh em lập trình.

KÊNH CỦA THIENTAMNGUYEN

Đây là kênh gồm video chia sẻ kiến thức: C, C++ chi tiết từ cơ bản đến nâng cao đòi hỏi người xem phải nghiền ngẫm và thực hành mới thành công được. Tôn chỉ của channel: “Có tư duy mới thành công.”

KÊNH CỦA VIỆT NAM SƠN NGUYỄN

Channel tập trung cung cấp kiến thức về C/C++ và C#. Bên cạnh đó các anh em có thể thử sức giải đề của các trường đại học.

KÊNH CỦA THẠCH PHẠM

Nếu bạn đang muốn học về HTML, CSS, WordPress từ cơ bản thì hãy tham khảo ngay channel của Thạch Phạm. Kênh gồm các video hướng dẫn từ khái niệm đến thực hành việc sử dụng WordPress, thủ thuật WordPress và đánh giá các plugin WordPress, review hosting.

NGHIEPUIT

Kênh giúp anh em học về các ngôn ngữ lập trình ReactJS, Java, NodeJS,.. với hướng dẫn từ kiến thức cơ bản đến nâng cao.

THƯ VIỆN LẬP TRÌNH

Ngoài những video giới thiệu về HTML, CSS,… anh em có thể học thiết kế bằng Photoshop tại kênh youtube này.

VIET IT VLOG

Kênh bao gồm các video hướng dẫn sử dụng máy tính internet, lập trình, sử dụng excel các phần mềm văn phòng.

Chúc anh em “tu luyện” thành công! Và đừng bỏ qua những bài viết hay dưới đây:

Xem thêm việc làm Front end DeveloperBack end Developer tại TopDev

TopDev tổng hợp

5 câu hỏi hoàn thiện kế hoạch quản lý nhân sự mùa Covid-19

Những ngày gần đây, giới Nhân sự đang phải đối mặt với nhiều nguy cơ do diễn biến của dịch bệnh Covid-19 ngày càng phức tạp. Thách thức lớn nhất đối với các phòng nhân sự lúc này chính là phải có nhiệm vụ đưa ra các giải pháp khả thi nhằm cân bằng các mối lo ngại về an toàn lực lượng lao động với việc duy trì hoạt động doanh nghiệp như bình thường. Vì thế, họ cần phải hành động nhanh chóng để ứng phó mọi tình huống trước khi một cuộc khủng hoảng về nhân sự có thể diễn ra.

  Nhân sự nên làm gì giữa tâm bão Coronavirus

Bài viết sau đây sẽ giải đáp 5 câu hỏi để bạn có sự chuẩn bị tốt nhất về cách tiếp cận hiện trạng của vấn đề nhân sự đồng thời giúp thiết lập và điều chỉnh kế hoạch “tác chiến” trong đại dịch này.

1. Lựa chọn mô hình giải pháp Nhân sự: 50% hay 100%?

Covid-19 tạo ra rào cản lớn đối với các doanh nghiệp vì các triệu chứng mà chúng gây ra. Phải mất từ 2 đến 14 ngày sau khi tiếp xúc với người nhiễm bệnh, các triệu chứng mới quá phát, mở ra cơ hội lây lan trên diện rộng của doanh nghiệp. Mặt khác, thời gian phục hồi trung bình của những người bị nhiễm chủng virus mới này là khoảng 2 tuần hoặc có thể lâu hơn tùy vào thể trạng. 

5 câu hỏi hoàn thiện kế hoạch quản lý nhân sự mùa Covid-19

Thực tế đó cho thấy, các doanh nghiệp cần lựa chọn và áp dụng mô hình giải pháp nhân sự phù hợp nhất. Thực hiện giải pháp 50% số lượng nhân viên làm việc tại công ty trong một thời gian. Hãy bắt đầu xác định các chức năng nhân sự quan trọng, những công việc có tính trọng tâm để giảm thiểu sự gián đoạn trong quy trình phát triển chung. 

Khi nhận thấy tình hình dịch bệnh chưa vẫn chưa được kiểm soát và ngày càng gia tăng thì việc các doanh nghiệp nên làm đó là ưu tiên về tính an toàn cho người lao động. Hãy áp dụng giải pháp “Work from home” – cho phép các nhân viên triển khai và theo dõi các hoạt động nhân sự tại nhà hoặc làm việc từ xa. Đây là cách thức hữu hiệu nhất không chỉ trong công tác phòng- chống dịch bệnh mà còn đảm bảo được tiến độ công việc.

2. Làm thế nào để cân đối: Sức khỏe và hạnh phúc của nhân viên?

Đây được xem là một vấn đề “lớn”. Việc chưa nắm bắt những thông một cách chính xác có thể khiến các nhân viên lo lắng và hoảng loạn, làm ảnh hưởng đến sức khỏe tinh thần và hiệu suất công việc.

5 câu hỏi hoàn thiện kế hoạch quản lý nhân sự mùa Covid-19

Vì thế, việc đưa ra chính sách làm việc từ xa phù hợp với người lao động là điều cần thiết. Hãy đặt vấn đề sức khỏe và hạnh phúc của nhân viên lên hàng đầu bằng cách cung cấp thông tin về các bước cần thực hiện:

  • Nắm bắt những thông tin cơ bản về Covid-19.
  • Đặt khăn và chất khử trùng tay có chứa ít nhất 60% cồn xung quanh nơi làm việc kết hợp rửa tay đúng cách..
  • Thông báo cho nhân viên về những biện pháp phòng ngừa dịch bệnh một cách cụ thể.
  • Cập nhật các chính sách PTO (chính sách nghỉ phép nhưng vẫn được hưởng lương): Chính sách này giúp hỗ trợ người lao động bị bệnh và kiểm soát, thúc đẩy sự phân bổ công tác quản trị các đầu công việc sao cho hiệu quả.

3. Nếu bệnh tật dẫn đến làm việc từ xa, nhân viên có được đào tạo chéo và đảm nhiệm nhiều công việc không?

Đây cũng là một trong những vấn đề khiến doanh nghiệp đau đầu. Tuy nhiên, việc đào tạo chéo vẫn có thể diễn ra với điều kiện cá nhân thay thế có những hiểu biết cơ bản về công việc của vị trí đã vắng mặt. 

5 câu hỏi hoàn thiện kế hoạch quản lý nhân sự mùa Covid-19

Chẳng hạn như, front-end developer có thể hỗ trợ các nhu cầu back-end để duy trì trang web của bạn không vì họ sở hữu chung một background (kiến thức nền) Điều quan trọng là cần xác định được các chức năng chuyên môn nhân sự quan trọng trước khi cân nhắc việc có đào tạo chéo để hỗ trợ họ trong công việc hay không.

Một giải pháp khác có thể khắc phục tình trạng này đó là nhờ vào lực lượng lao động dự phòng (tức nguồn lực đang được quản lý và theo dõi bởi bộ phận nhân sự sau quá trình tuyển dụng). Họ là nguồn lực phù hợp nhất vào thời điểm này vì có thể nắm bắt, học hỏi và nâng cao kỹ năng nhanh chóng.

  Bí mật giúp tạo động lực và tăng năng suất cho nhân viên!

4. Những phần mềm/công cụ kỹ thuật nào cần thiết cần thiết cho lực lượng lao động tại nhà?

Theo một cuộc khảo sát từ Gartner, 54% các nhà lãnh đạo nhân sự chia sẻ rằng công nghệ và cơ sở hạ tầng kỹ thuật kém là rào cản lớn nhất trong việc tạo ra tính hiệu quả khi thực hiện công việc từ xa. Tùy thuộc vào từng tính chất công việc, lực lượng lao động tại nhà của các doanh nghiệp có nhiều sự lựa chọn trong việc sử dụng các phần mềm hỗ trợ.

5 câu hỏi hoàn thiện kế hoạch quản lý nhân sự mùa Covid-19

Ngoài các thiết bị thiết yếu cần có như: điện thoại, máy tính, tai nghe thì TopDev gợi ý một số phần mềm/công cụ kỹ thuật nổi trội như sau: 

5. Thủ tục “cấp tốc” trong công tác nhân sự

Sự mơ hồ là kẻ thù trong bất kỳ tình huống khẩn cấp nào, đó là lý do tại sao bạn nên tập hợp một danh sách các hướng dẫn từng bước cụ phòng ngừa việc nhân viên của bạn không may mắc phải Covid-19 hoặc có tiếp xúc với nguồn dịch bệnh. 

Các hướng dẫn bao gồm:

  • Liên hệ với người quản lý nhân sự để thông báo về kế hoạch di trú của bạn trọng thời gian gần đây.
  • Ghi nhận những tư vấn, lời khuyên của nhà cung cấp bảo hiểm y tế của công ty bạn.
  • Tự kiểm dịch hoặc có kế hoạch phòng dịch tại nhà theo quy trình chung của chính phủ để theo dõi tình trạng sức khỏe của bản thân.

Như đã đề cập, không có một khẳng định khi nào đại dịch coronavirus sẽ kết thúc. Các doanh nghiệp cần được thông báo khi tình hình phát triển và sẵn sàng.

Hãy nhớ rằng một kế hoạch phòng chống đại dịch hiệu quả nên ưu tiên an toàn cho các nhân viên và giảm thiểu sự gián đoạn của quy trình phát triển của tổ chức/doanh nghiệp. Tất cả chúng ta – những nhà quản trị nhân sự và các nhân viên phải luôn sẵn sàng giải quyết những khó khăn mà ngành Nhân sự sắp phải đối mặt.

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

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