Home Blog Page 215

Chọn sếp, đừng chọn việc!

Chọn sếp, đừng chọn việc!

Đừng chỉ chọn công việc. Hãy chọn sếp. Người sếp đầu tiên sẽ là nhân tố có ảnh hưởng lớn tới thành công sự nghiệp của bạn. Sếp không tin tưởng vào bạn sẽ không cho bạn cho cơ hội phát triển.

Trên đây là lời khuyên của tiến sĩ William Raduchel – một đạo diễn, nhà đầu tư và chuyên gia tư vấn chiến lược. Ông từng là giáo sư kinh tế tại đại học Havard, từng điều hành AOL Time Warner, Xerox, McGraw-Hill và nhiều doanh nghiệp khác. Lời khuyên của ông đã khiến rất nhiều người tìm việc (và cả những người đang có việc làm) phải suy nghĩ lại về lý do chọn lựa nơi làm việc của mình và những điều thực sự ảnh hưởng tới thành công sự nghiệp của họ.

Việc này nghe có vẻ khó khăn bởi quy trình tìm việc truyền thống lại diễn ra theo hướng ngược lại: sếp chọn bạn chứ không phải bạn chọn sếp. Thông báo tìm việc không hề đưa ra những chỉ số như “mức độ khó chịu của sếp” hay bất cứ con số nào liên quan. Thường thì bạn chỉ có thể nói chuyện với sếp thông qua buổi phỏng vấn xin việc và quãng thời gian ít ỏi này dường như cũng khó mà giúp bạn đưa ra phán đoán chính xác về con người sếp. Thế nhưng bằng cách tập trung vào sếp, thay vì những tiêu chí đánh giá thông thường khác (như địa điểm làm việc, mức lương, trách nhiệm công việc, cơ hội thăng tiến…) con đường theo đuổi sự nghiệp của bạn sẽ thay đổi và bạn sẽ hạnh phúc khi nhận ra mình chọn đúng người. Không chỉ công việc mà lựa chọn sếp cũng có tầm quan trọng nhiều hơn bạn nghĩ, bởi:

  • Một vị sếp tốt trong 1 công ty bình thường có thể bảo vệ và hỗ trợ bạn.
  • Một vị sếp tồi trong 1 công ty tốt sẽ khiến bạn phát điên và còn hủy hoại bạn.
  • Một vị sếp tốt trong 1 công ty tốt sẽ mở khóa mọi tiềm năng mà bạn có.

Tham khảo các nhà tuyển dụng IT chất lượng tại Topdev

Trong trường hợp đầu tiên, bạn sẽ học hỏi được nhiều hơn và có thể cũng có nhiều cơ hội hơn về sau. Một vị sếp tốt có thể nhận ra tài năng của bạn và phát triển chúng nhưng một vị sếp tồi sẽ chẳng bao giờ nhận ra những gì bạn có thể làm hay trao cơ hội để bạn tự phát triển mình. Lợi ích duy nhất khi làm việc cho 1 vị sếp tồi trong 1 công ty tốt (trường hợp thứ 2) đó là bởi làm việc cho công ty này là cách duy nhất để bạn chuyển sang 1 nơi khác, làm việc với những con người khác, 1 vị sếp khác và đạt được những thành tích tốt nhất cho cả bạn và công ty. Hầu hết mọi người chọn việc vì những lý do như:

  • Mức lương – điều này quan trọng nhưng nó có thể là 1 cái bẫy. Nhiều người kiếm lương ngàn đô nhưng ghét công việc của mình và từ đó, ghét cả cuộc sống của mình. Họ làm việc cùng những đồng nghiệp có thể cũng là những người bị thu hút bởi tiền lương. Nếu nghĩ dài hạn hoặc muốn phát triển sự nghiệp, đừng bao giờ chọn lương là tiêu chí chủ yếu của mình. Đó là phương pháp đánh giá lười biếng nhất và do đó cũng là yếu kém nhất.
  • Công việc cụ thể – nhiều người bị hấp dẫn bởi 1 số dự án, công việc hay vai trò cụ thể. Rồi bạn sẽ nhận ra rằng những dự án “hot” không chắc đã mang lại môi trường làm việc năng suất hay vui vẻ. Trong khi làm những công việc này (và ngay cả khi học hỏi được điều gì đó) sự nghiệp dài hạn của bạn lại phải nhận hậu quả. Có rất nhiều người có tầm nhìn dài hạn, chấp nhận làm việc với những người quản lý tốt hơn là chọn những dự án “hot”, nhờ đó mà họ có thể thăng tiến như cách mà sếp của họ đã làm.
  • Chức vụ nghề nghiệp – ngay cả khi bạn phải làm việc như 1 thực tập sinh, nếu bạn có tài năng và làm việc chăm chỉ thì 1 người sếp tốt cũng sẽ nhận ra khả năng của bạn và đưa bạn lên vị trí xứng đáng hơn. Ngay cả khi không có vị trí nào khuyết cho bạn, một người sếp tốt cũng sẽ có một mạng lưới quan hệ rộng lớn và giúp đặt bạn ở đúng nơi bạn nên ở. Một người sếp giỏi sẽ biết ai nên làm việc ở đâu. Theo đuổi những chức vụ nghề nghiệp và bỏ mất 1 vị sếp tốt có thể là 1 cái bẫy cho bạn, họ sẽ không bao giờ cho bạn rời vị trí đó cho dù bạn có phát triển ra sao.

Lựa chọn được 1 vị sếp tốt cũng đòi hỏi phải có mạng lưới quan hệ rộng lớn. Bạn cần hỏi bạn bè trong ngành xem có sếp nào như bạn cần. Việc này có thể mất thời gian nghiên cứu và tìm kiếm thông tin nhưng biết được ai trong ngành là 1 vị sếp tốt và theo đuổi họ thì bạn sẽ có được tài sản quý giá nhất cho sự nghiệp lâu dài của mình. Nếu đã nghĩ tới 1 hay 2 công ty thì hãy thử tìm hiểu xem có vị sếp nào thuộc chức năng công việc của bạn hay không.

Càng ít kinh nghiệm thì bạn càng khó chọn sếp nhưng điều này cũng không sao. Hãy tìm hiểu về mức độ luân chuyển nội bộ trong công ty xem mọi người có thường xuyên chuyển vị trí làm việc, hay có luân chuyển nhân sự giữa các nhóm hay không. Nếu có thì sau khi được nhận công việc, mục tiêu của bạn là đặt ra những việc cần làm để có được cơ hội làm việc với sếp mà mình muốn.

Nguồn: Applancer Careers

Đâu là hướng đi tốt nhất để tạo 1 Messenger Bot?

Đâu là hướng đi tốt nhất để tạo 1 Messenger Bot
Đã hơn 1 năm kể từ khi Facebook chính thức cho ra mắt Chatbot API trên Messenger, tạo ra một bước phát triển mới. Sau một thời gian tìm hiểu, các lập trình viên đã cùng nhau đặt ra một câu hỏi “Đâu là hướng đi tốt nhất để tạo 1 Messenger Bot?”Và dưới đây là một vài câu trả lời được xem là đáng giá nhất được ghi nhận lại trên Quora:

User Kubra Zengin – Product Development

“Bằng cách Iterating! Iterating! Iterating! Cách duy nhất để có bot tuyệt vời, bạn cần phải lặp lại bot dựa trên các số liệu và dữ liệu.

Dưới đây là một số bước sau:

  1. Ý tưởng bot – Giai đoạn nghiên cứu

Giai đoạn ý tưởng là cuộc thảo luận bao gồm khám phá những ý tưởng làm thế nào để giải quyết vấn đề trên bot của bạn. Các bot makers có thể tiến hành nghiên cứu với các đối tượng mục tiêu dựa trên tiêu chí, cuộc phỏng vấn với các bên liên quan, chạy thử nghiệm ý tưởng trong bối cảnh của chương trình của họ.

2. Sáng tạo bot – Giai đoạn xây dựng

Giai đoạn sáng tạo là phần phác thảo các thiết kế. Dựa trên danh sách tính cách bot của bạn, cải thiện các giải pháp và nhận được nền tảng vững chắc của bot.

3. Thử nghiệm bot – Giai đoạn học tập

Sau khi khởi động các bot, giai đoạn học tập được bắt đầu. Các kết quả thu thập dữ liệu rất quan trọng để tạo ra các mô hình có ý nghĩa. Sau khi tạo mẫu thử nghiệm MVP, giai đoạn này có thể thực hiện sau khi thu thập cả dữ liệu phân tích và dữ liệu nghiên cứu. Bạn có thể dùng Botanalytics | Conversational Analytics cho đầu ra dữ liệu của bạn.

4. Iterating – Giai đoạn nâng cao

Đây là giai đoạn cuối cùng cho bot của bạn. Tất cả các bước trên được dùng cho giai đoạn nâng cao này. Đây là giai đoạn thể hiện tất cả khả năng ra bên ngoài và xây dựng dữ liệu dựa trên quan điểm nhanh và nhạy. Thêm giải pháp sáng tạo vào từng bước. Cuối cùng, tất cả mọi thứ sẽ giải quyết được vấn đề của người dùng và tạo nên một cuộc hội thoại thú vi.

Tham khảo thêm các vị trí tuyển dụng IT lương cao tại đây

User Keyu – Chatbots Developer

“Phát triển chương trình cho Facebook Messenger hay bất kì nền tảng Messenger nào khác có 3 bước chính”

1. Thiết kế

Suy nghĩ về các hội thoại khác nhau trong cuộc nói chuyện của người dùng với bot của bạn. Bạn cần xác định điều gì sẽ xảy ra với người dùng. Bạn phải xác định dòng chảy và từ khoá của hội thoại và trả lời chúng bằng bot của bạn. Đây là bước định hình cho bot của bạn.

2. Phát triển

Sau khi quyết định dòng chảy và từ khoá, chúng ta sẽ bắt đầu phát triển các bot. Có rất nhiều nền tảng phát triển hỗ trợ bạn trong việc này. Trong một số nền tảng này, bạn không cần biết code và có thể xây dựng chat bot một cách nhanh chóng. Và trong một số nền tảng khác, bạn phải code và kiến thức kỹ thuật. Dựa trên nhu cầu sử dụng của bạn mà sẽ đưa ra được cách tiếp cận tốt nhất để xây dựng bot.

3. Làm bot thông minh hơn

Khi bạn đã phát triển bot và bắt đầu nói chuyện với người dùng, bạn có thể làm cho bot của mình dễ hiểu và thông minh bằng cách tích hợp công cụ NLU/NLP với bot của bạn. Nhiều công ty đang cung cấp các công cụ miễn phí, hãy sử dụng chúng.

4. Giữ lại người dùng

Sau khi tung ra chatbot của bạn, sử dụng công cụ Analytics để biết thêm về cuộc nói chuyện thông thường giữa người dùng và bot, tính năng hữu ích nhất trong bot của bạn, lưu lượng bot và sử dụng thông báo đẩy để cập nhật thông tin và giữ người dùng của bạn.

Tip cho bạn: Publish bot của bạn trên nhiều stores khác nhau để tiếp cận được nhiều khách hàng hơn.”

Kỹ năng xây dựng thương hiệu cho người bắt đầu tìm việc

Kỹ năng xây dựng thương hiệu cho người bắt đầu tìm việc

Đây là bài thứ 2 trong loạt bài kỹ năng của Huyền Chip. Mình dành rất nhiều thời gian và công sức viết loạt bài này vì mình tin rằng những kỹ năng này là thực sự cần thiết cho các bạn trẻ. Mình hy vọng các bạn chịu khó dành thời gian đọc.

Hôm nay mình tham gia một buổi hội thảo về việc tuyển dụng ở các công ty lớn. Các quản lý thừa nhận rằng mỗi khi nhận được hồ sơ ứng tuyển, họ sẽ kiểm tra thương hiệu của người này bằng hai cách. Thứ nhất là tìm kiếm thông tin về người đó trên mạng. Thứ hai là hỏi trực tiếp những người biết ứng cử viên này. Thông tin trên mạng và những gì những người xung quanh nói về bạn tạo nên thương hiệu cá nhân của bạn. Thương hiệu cá nhân tốt hay xấu nhiều khi trở thành yếu tố quyết định để bạn có được cuộc phỏng vấn cho công việc mơ ước hay không.

Mỗi khi nói chuyện với các bạn trẻ Việt Nam, mình thấy ngạc nhiên là rất nhiều bạn than thở tìm việc vất vả thế này thế kia nhưng lại rất thờ ơ với việc xây dựng thương hiệu cá nhân. Résumé của họ rất lem nhem, thậm chí nhiều người còn không có résumé. Họ không có sự hiện diện chuyên nghiệp nào trên mạng — gõ tên của họ lên mạng sẽ chỉ thấy một số bức ảnh kỳ cục trên Facebook hay một số lời bình phẩm nhăng nhít trên các diễn đàn, hoặc không có gì. Nếu hỏi có ai có thể nói tốt đẹp về năng lực của họ — không có ai. Là người tham gia vào thị trường lao động, bạn không cần xây dựng thương hiệu đến mức nổi tiếng, nhưng bạn sẽ cần có thương hiệu đủ tốt để người mua hàng (nhà tuyển dụng) chú ý đến bạn.

Mình may mắn là ý thức về thương hiệu cá nhân từ rất sớm. Mình biết, thương hiệu cá nhân của mình tốt hay xấu là một điều gây tranh cãi. Nhưng từ khía cạnh công việc, thương hiệu cá nhân của mình khá thành công. Mình từ quê lên Hà Nội học cấp 3, không quen biết ai, trong ba năm học cấp 3 ấy, mình đã xây dựng thương hiệu cá nhân đủ để được nhận vào nhiều công ty lớn như Báo Mới (nay thuộc VNG), VCCorp, Cốc Cốc.

Khi sang Mỹ, mình đã phải xây dựng thương hiệu cá nhân lại từ đầu. Sau ba năm, mình đã có thương hiệu cá nhân đủ để thường xuyên nhận được lời mời phỏng vấn từ các công ty lớn như Google, Facebook, Netflix cũng như nhiều công ty khởi nghiệp. Hiện tại, mình làm nghiên cứu trí tuệ nhân tạo ở Netflix.

Quá trình xây dựng thương hiệu cá nhân suốt 10 năm qua đã dạy cho mình rất nhiều điều. Hôm nay, mình muốn chia sẻ những kinh nghiệm mình thu thập được với các bạn.

1. Viết một résumé chuyên nghiệp

Một trong những thứ đầu tiên nhà tuyển dụng nhìn thấy là résumé. Có một résumé chuyên nghiệp, hay ít nhất là không phản cảm, là vô cùng quan trọng.

Ngày trước ở Việt Nam, mình hay nhầm lẫn résumé với CV. Résumé là bản tóm tắt kinh nghiệm, quá trình học tập, năng lực bản thân. Résumé thường chỉ dài một đến hai trang, nhưng mình thực sự tha thiết mong các bạn chỉ nên giữ résumé của mình ở một trang thôi. Đến cả những thường thành công với ti tỉ công việc như Elon Musk cũng vẫn có thể giữ résumé ở mức một trang nữa là dân đen như mình.

CV là viết tắt của curriculum vitae, cụm từ tiếng Latin dịch nôm na là quá trình sống. CV có thể bao gồm tất tần tật chi tiết những kinh nghiệm học tập, làm việc, thành tích của bạn.

Các công ty tuyển dụng thường sẽ muốn xem résumé của bạn vì không ai có thời gian đọc CV dài ngoằng. Bản thân mình thì chưa bao giờ viết CV, cũng chưa có công ty nào từng hỏi mình gửi CV. Nhưng mình thấy các giáo sư của mình thường có CV liệt kê dài ngoằng những bài báo khoa học họ đã đăng cũng như những giải thưởng của họ.

Khả năng viết một résumé súc tích, dễ hiểu phản ánh năng lực làm việc của bạn. Có nhiều để viết résumé, nhưng nó thường sẽ bao gồm những phần sau:

  • Mục đích: Bạn đang tìm gì — công việc toàn thời gian, bán thời gian, thực tập — trong ngành gì, vào khoảng thời gian nào.
  • Thông tin liên lạc: số điện thoại, email, trang web cá nhân (nếu có, và mình khuyên các bạn nên có) hoặc nơi mà nhà tuyển dụng có thể tìm hiểu thêm thông tin về sự nghiệp của bạn.
  • Thông tin giáo dục: ngành nghề, trường học, năm tốt nghiệp. Nếu điểm phẩy của bạn cao thì đưa vào. Nhưng thường thì nếu bạn đã đi làm một thời gian thì chẳng ai quan tâm đến điểm phẩy của bạn cả.
  • Kinh nghiệm làm việc: Khoảng 3 – 6 kinh nghiệm làm việc trước đây của bạn. Nó có thể là vị trí quản lý trong một câu lạc bộ sinh viên, kinh nghiệm thực tập, tổ chức sự kiện. Để có thêm chi tiết, bạn có thể đọc phần Làm những điều giúp ích cho résumé của bạn.
  • Dự án cá nhân: Những dự án mà bạn làm trong thời gian rảnh rỗi. Nó thể hiện niềm đam mê và tinh thần khởi xướng dẫn đầu của bạn. Bạn có thể đọc phần Làm những điều giúp cho ích résumé của bạn để biết thêm chi tiết.
  • Giải thưởng (nếu có): Nó có thể bao gồm thành tích học tập, công tác, hay giải thưởng các cuộc thi, hackathon.
  • Các môn học liên quan (tuỳ trường hợp): Nếu bạn có ít kinh nghiệm liên quan đến công việc bạn đang ứng tuyển, bạn có thể liệt kê những môn học giúp ích cho công việc mà bạn đã học.
  • Kỹ năng và sở thích: Bạn có thể liệt kê những kỹ năng mình có, ví dụ nếu là lập trình viên, bạn có thể liệt kê những ngôn ngữ lập trình bạn thành thạo, những framework bạn quen thuộc, hay nếu bạn làm marketing thì có thể liệt kê những công cụ marketing bạn dùng như A/B testing, Google Analytics.
  • References: Danh sách hai người có thể chứng thực cho năng lực làm việc của bạn.

Đây là link đến résumé cũ của mình để mọi người có thể tham khảo. Mình sẽ phân tích một số điểm ở résumé của mình để các bạn có thể áp dụng vào résumé của các bạn.

Mình không có phần mục đích vì đây là résumé chung chung đưa lên làm hàng, chứ mình chưa dùng nó để nộp đơn vào đâu.

Trong phần giáo dục, mình chỉ đưa thông tin bằng đại học và thạc sĩ của mình mà không đưa thông tin cấp 3 vì hai lý do. Thứ nhất, mình nghĩ đại học và thạc sĩ là đủ rồi. Thứ hai, chả ai ở Mỹ quan tâm đến một trường cấp 3 ở Việt Nam cả. Nếu bạn là sinh viên đại học ở Việt Nam và theo học một trường cấp 3 tốt tốt một tí, thì bạn có thể đưa thông tin về trường cấp 3 của bạn vào.

Phần kinh nghiệm làm việc của mình có đến 7 vị trí. Mình thấy nó hơi dài, nên mình đang tính sẽ bỏ bớt đi một kinh nghiệm. Bạn đọc bài này nếu có lời khuyên nên bỏ kinh nghiệm nào, xin hãy comment ở dưới. Mình tò mò muốn biết kinh nghiệm nào các bạn coi là quan trọng, cái nào là không quan trọng.

Mình vẫn còn phần Relevant Coursework, những môn học liên quan, vì mình có nó từ hồi làm résumé năm đầu. Mình đang nghĩ vì phần kinh nghiệm của mình đã khá dài, mình sẽ bỏ phần này đi.

Mình không có phần references vì khi gửi résumé, mình hoặc sẽ gửi kèm references trong cover letter, hoặc bảo là sẽ gửi references nếu người tuyển dụng quan tâm.

2. Làm những điều giúp ích cho résumé của bạn

Một điều mình hay nghe bạn bè mình nói bên này là: “Mặc dù tao không thích nó lắm nhưng nó sẽ rất tốt cho résumé của tao” hay “Công việc này không trả tiền nhưng nó sẽ rất tốt cho résumé của tao.” Sẽ thật tuyệt vời nếu những điều bạn thích làm cũng sẽ trả bạn nhiều tiền lại giúp ích cho résumé của bạn, nhưng không phải lúc nào cuộc sống cũng hoàn hảo như thế. Khi mình còn trẻ, chưa có nhiều cái để khoe trên résumé, mình sẽ phải chịu khó làm những việc mình không thích, hay làm không công.

2a. Tham gia các câu lạc bộ sinh viên

Một cách dễ dàng để sinh viên có kinh nghiệm cho vào résumé là tham gia các câu lạc bộ sinh viên, trong hoặc ngoài trường. Câu lạc bộ là gì thực sự không quan trọng. Bạn có thể tham gia câu lạc bộ khởi nghiệp, marketing, tranh biện, thám hiểm vũ trụ, lập trình, thậm chí hiphop, trà đạo, tung hứng, bất cứ cái gì mà bạn thích. Nếu không tìm được câu lạc bộ bạn yêu thích, hãy thành lập câu lạc bộ của chính bạn. Ở Việt Nam mình có quá trời cơ hội để thành lập câu lạc bộ, có lợi không chỉ cho bản thân bạn mà còn cho những người quan tâm đến chủ đề đấy. Hồi học cấp 3, mình thành lập Free Hugs Vietnam — tổ chức ôm tự do! Mọi người cứ nghĩ ôm ấp linh tinh thì ích lợi gì cho công việc, nhưng tổ chức này đã dạy cho mình rất nhiều kỹ năng: tuyển thành viên, duy trì thành viên, tổ chức sự kiện, quảng bá sự kiện, xin tài trợ, … Với Free Hugs Vietnam, mình nộp đơn tham gia một hội thảo ở Malaysia, được tài trợ sang đấy, gây ấn tượng với một diễn giả, và ông mời mình sang đó làm việc khi mình mới học xong cấp 3. Anh chàng Jaime trong cuốn sách về Stanford của mình nhận được lời mời nói chuyện ở NASA và vô số công ty khác là nhờ sự tham gia của anh chàng trong câu lạc bộ thám hiểm vũ trụ.

Trong câu lạc bộ, bạn cần thể hiện năng lực lãnh đạo. Bạn có thể tham gia vào ví trí quản lý, đề xuất phương hướng hoạt động, tổ chức sự kiện, tham gia thi đấu. Nếu sự kiện bạn tổ chức có đến vài trăm người tham gia hay bạn thắng giải gì đó thì càng tốt. Nhưng bạn đừng tham lam làm ba bốn câu lạc bộ một lúc. Khi đọc résumé, mình đánh giá cao những ai có lòng kiên trì và trung thành với đam mê của mình. Người đó tham gia một câu lạc bộ hay một dự án thôi nhưng đóng góp to lớn cho sự thành công của câu lạc bộ hay dự án đó.

2b. Chọn việc vì kỹ năng, thay vì tiền

Điều thứ hai là làm những công việc sinh viên mà bạn biết sẽ cho bạn những kỹ năng cần thiết để hấp dẫn nhà tuyển dụng cho công việc mơ ước của bạn. Các công việc đó có thể là trợ giảng, tình nguyện viên với các tổ chức quốc tế, cộng tác với các báo, làm quản trị ở các diễn đàn chuyên nghiệp. Những công việc này trả lương thấp, thậm chí không trả lương, nhưng sẽ giúp bạn làm quen với môi trường làm việc chuyên nghiệp, giúp bạn xây dựng mối quan hệ, và giúp bạn làm đẹp résumé. Ví dụ, hồi học cấp 3, mình quan tâm đến tài chính nên tham gia làm biên tập cho saga.vn, diễn đàn cho những người khởi nghiệp. Mình học được rất nhiều ở đây, và các anh chị trong Saga giúp mình viết bài đăng trên tạp chí Thị Trường Chứng Khoán khi mình vẫn còn đang là con bé học cấp 3.

Khi mới sang Mỹ, bắt đầu tham gia vào ngành khoa học máy tính, mình nhận ra một điều rằng các công ty bên này rất thích tuyển người làm section leader (trợ giảng) cho một lớp lập trình căn bản trong trường. Họ tin rằng section leader phải hiểu rất rõ các lý thuyết cơ bản, có kỹ năng debug tốt, có khả năng liên lạc tốt. Yêu cầu làm section leader chỉ là học xong lớp căn bản đó. Mình học lớp đó, nộp đơn, và được nhận. Bạn bè mình nhiều người chê công việc trả lương thấp, nhưng với mình, lương thực sự không quan trọng. Mình làm công việc đó vì mình biết nó dạy cho mình nhiều kỹ năng cần thiết và làm đẹp cho résumé của mình. Nhờ công việc đó, mình đã nhận được lời mời phỏng vấn từ cả Google, Facebook, và Microsoft.

Mình đọc trên mạng thấy nhiều bạn mới ra trường đòi lương thế này thế kia mới làm việc. Mình không có vấn đề gì với việc người ứng tuyển đòi lương cao. Thị trường lao động là một thị trường, thuận mua vừa bán. Nhưng mình nghĩ với những bạn mới ra trường, mục tiêu các bạn hướng tới không nên là tiền, mà nên là kỹ năng. Một khi bạn đã thu thập đủ những kỹ năng cần thiết cho công việc mơ ước của bạn, bạn sẽ kiếm được nhiều tiền hơn mức 6-7 triệu/tháng.

2c. Làm những dự án cá nhân

Trong thời gian rảnh rỗi, thay vì ngồi trà đá hay than thở “chán thế”, bạn có thể dành thời gian làm những dự án nhỏ cho riêng bạn. Nếu những dự án này liên quan đến công việc mơ ước của bạn thì càng tốt. Nhưng thường thì dự án nào, miễn là bạn dành thời gian và công sức cho nó, đều có thể dạy cho bạn nhiều kỹ năng.

Vậy bạn có thể làm dự án gì? Trời ơi, vô số ý tưởng. Bạn thích gì thì làm điều đấy. Ví dụ, nếu bạn muốn trở thành nhà báo, bạn có thể có một dự án phỏng vấn những người có nghề nghiệp kỳ lạ. Nếu bạn muốn trở thành kỹ sư thông tin (data scientist), bạn có thể lên Kaggle tham gia các cuộc thi trên đó. Nếu quan tâm đến văn hoá, bạn có thể có dự án tìm hiểu các loại bánh ở Việt Nam. Anh bạn mình thích chơi các trò chơi trí tuệ đã tự mình thiết kế một trò chơi mới. Hồi học cấp 2, mình có một dự án trao đổi sách giáo khoa: bạn có thể quyên góp bộ sách giáo khoa năm trước của mình để đổi lấy bộ sách giáo khoa năm học tiếp theo của bạn. Lên cấp 3, mình làm dự án quyên góp tiền mua bánh trung thu cho trẻ em đường phố.

Các bạn có thể nhờ bạn bè mình cùng nghĩ ra ý tưởng rồi chọn ý tưởng thú vị nhất để thực hiện.

2d. Thương hiệu ăn theo

Mình không thích điều này, nhưng thực tế là nhiều nhà tuyển dụng vẫn đánh giá ứng cử viên dựa vào các mác. Một số trường đại học có giá hơn những trường còn lại, một số công ty cũng có giá hơn những công ty còn lại. Nhiều bạn bè mình vào làm Google không phải vì họ thích làm việc với nhà khổng lồ này, mà vì họ biết, một khi đã có mác Google, họ có thể lựa chọn làm việc ở nhiều công ty lớn khác.

Mình hiểu là không phải ai cũng có cơ hội vào làm Google. Mình muốn chỉ ra rằng các bạn nên ý thức một chút về thương hiệu của tổ chức mà bạn chọn tham gia: trường bạn học, giáo sư bạn làm việc cùng, công ty bạn thực tập. Những thương hiệu đó có thể sẽ giúp ích cho thương hiệu cá nhân của bạn.

3. Xây dựng sự hiện diện trên mạng

Không phải công ty nào cũng thừa nhận điều này, nhưng khả năng nhà tuyển dụng tìm kiếm thông tin về bạn trên mạng là hoàn toàn có thể. Bạn cần xây dựng sự diện diện chuyên nghiệp trên mạng của bạn để thương hiệu cá nhân của bạn trở nên hấp dẫn hơn với nhà tuyển dụng.

Trang đầu tiên bạn nên có là LinkedIn. Đây có thể là trang đầu tiên nhà tuyển dụng tìm đến để biết thêm thông tin về bạn. LinkedIn là mạng xã hội cho người tuyển dụng và người tìm việc. Bạn có trang cá nhân của bạn, khá giống như résumé, nhưng cho bạn nhiều đất hơn. Nhiều người có thể nói dối trên résumé, nhưng LinkedIn là một cái công khai, rất ít người dám liều lĩnh khai gian đến đó. Nó cũng là công cụ để bạn mở rộng mối quan hệ. Bạn có thể xem mối quan hệ giữa bạn và người bạn muốn kết nối, ví dụ, hai người có một mối quan hệ chung và nhờ mối quan hệ chung đó giới thiệu bạn với người bạn muốn kết nối.

Nhiều công ty đăng tuyển dụng trên LinkedIn, bạn có thể ứng tuyển dễ dàng với hồ sơ LinkedIn của mình.

Ngoài LinkedIn là cái tối thiểu nhất ra, kênh trên mạng của bạn tuỳ thuộc vào ngành nghề bạn hướng tới. Nếu bạn là nhà thiết kế hay hoạ sĩ, Behance là một trang bạn nên biết. Với người lập trình, GitHub vô cùng quan trọng. Các cây bút có thể chú ý đến Medium, Goodreads, hoặc tạo blog. Tương tự, sẽ có các trang khác nhau cho nhiếp ảnh gia, kiến trúc sư, người khởi nghiệp.

Nếu bạn muốn có một trang với tất tần tất thông tin về sự nghiệp của bạn, bạn có thể tạo một trang web cá nhân. Tạo một trang web cá nhân khá đơn giản và hoàn toàn miễn phí nếu bạn muốn – bạn thường chỉ trả tiền nếu bạn muốn có domain riêng. Domain riêng chỉ tổn khoảng $10/năm. Mình nói nó không khó vì mình đã có website riêng từ hồi học cấp 3, khi mà mình còn rất nghèo, nói tiếng Anh vẫn rất dở, và không biết lập trình.

Bạn cần phải ý thức rằng bất cứ thông tin gì bạn đưa lên mạng có thể sẽ được sử dụng để chống lại trong quá trình tuyển dụng. Không có gì bạn đưa lên mạng là mang tính cá nhân cả, và không có gì có thể đảm bảo rằng không ai biết bạn làm gì trên mạng. Bạn nghĩ rằng một bình luận không đâu vào đâu trên YouTube hay VOZ sẽ chẳng ảnh hưởng đến ai, nhưng bạn không bao giờ biết được rằng liệu nhà tuyển dụng tương lai có đọc được cái đấy hay không. Mình từ lâu đã không có tài khoản trên các diễn đàn, cũng như ngừng đưa các bức ảnh ăn chơi lên Facebook hay Instagram. Nó vừa giúp mình tiết kiệm thời gian, vừa giúp cho sự hiện diện trên mạng của mình “sạch” hơn.

Sau đây là ví dụ về một số sự hiện diện trên mạng của mình.

Là người tham gia vào thị trường lao động, dĩ nhiên mình có LinkedIn. Mỗi tuần, tên của mình xuất hiện trong khoảng gần 300 tìm kiếm. Một tháng, LinkedIn của mình có khoảng 300 – 400 người xem. Mình nhận được rất nhiều lời mời phỏng vấn từ LinkedIn.

kỹ sư khoa học máy tính, mình đầu tư vào GitHub. Một repo của mình có 1.8k stars (khá cao theo tiêu chuẩn GitHub) và được fork hơn 700 lần. Mình cũng nhận được khá nhiều thư từ những người thú vị qua GitHub.

Là nhà văn, mình bắt đầu đầu tư vào Goodreads của mình. Goodreads liệt kê các cuốn sách mình đã viết, nhưng mình cũng dùng nó để theo sát quá trình đọc của mình. Mỗi khi đọc cuốn sách nào, mình viết nhận xét về cuốn sách đó. Goodreads cho phép mình đọc nhận xét các cuốn sách khác, và giúp mình chọn sách mình muốn đọc.

Mình dùng Twitter chủ yếu để theo dõi những người làm trong ngành mình quan tâm và đọc tin họ đưa, chứ bản thân ít đưa tin.

Trang dạng diễn đàn duy nhất mình tham gia là Quora — nơi mà mình đọc nhiều hơn là tham gia trả lời. Quora là một cộng đồng khá tốt với sự tham gia của rất nhiều chuyên gia. Các câu hỏi bạn đưa ra ở đây thường nhận được những câu trả lời nghiêm túc từ các chuyên gia đầu ngành.

Trước đây, mình có trang web cá nhân (huyenchip.com), nhưng gần đây đã thấy nó không cần thiết. Mình có giữ blog learn365project.com, ý tưởng là mỗi ngày mình học một cái gì đó mới và viết về điều đó.

Nguồn: FB Huyen Chip

Font chữ cho Lập Trình Viên Và xu hướng ligature trong code font

Font chữ cho Lập Trình Viên Và xu hướng ligature trong code font

Bạn có biết trình soạn code của mình đang dùng font chữ gì không? Ít người quan tâm đến điều này nhưng việc lựa chọn font chữ cho code editor cũng ảnh hưởng ít nhiều đến hiệu suất công việc của lập trình viên vì bạn phải nhìn những dòng code nhiều giờ trong một ngày làm việc.

Sau nhiều năm làm việc với nhiều code editor và font khác nhau, tôi rút ra được một số đặc điểm của một font chữ tốt dành cho trình soạn code như sau:

  • Monospace: tất cả các ký tự và khoảng trắng đều cùng một cỡ, điều này cho phép canh cột và lề dễ dàng và code dễ đọc hơn với những đoạn logic lặp lại. Các font mặc định cho code editor và terminal đều là monospace.
  • Dễ dàng phân biệt các ký tự Il1i, 0Oo, CG: có nhiều font monospace hiển thị các ký tự kể trên rất giống nhau, khiến cho việc đọc code khó khăn hơn. Với tiêu chí này, tôi đã loại một số font monospace khá phổ biến như Courier New, Noto Mono, Droid Sans Mono…
  • Các ký tự đặc biệt cho cú pháp phải rõ, dễ đọc() [] {} =+-<>:;,."'
  • Và riêng đối với người Việt mình, thì font cho code cũng cần hỗ trợ tiếng Việt Unicode để hiển thị các chuỗi văn bản hoặc ghi chú bằng tiếng Việt (nếu có). Tiêu chí này cũng loại khá nhiều font mono đẹp và phổ biến khác như: Ubuntu Mono, Menlo, Operator Mono… Nếu bạn không lo vấn đề tiếng Việt, bạn có thể tìm và thử các font kể trên.

Sau đây tôi sẽ liệt kê một số font tiêu biểu cho code editor đáp ứng tất cả các tiêu chí trên:

Consolas

Font này không miễn phí nhưng có sẵn trong Windows hoặc được cài theo bộ Microsoft Office.

Font chữ cho Lập Trình Viên Và xu hướng ligature trong code font

Font Consolas hiển thị trên Sublime Text kích cỡ 15px

Monaco

Font này có sẵn trên macOS.

Font chữ cho Lập Trình Viên Và xu hướng ligature trong code font

Font Monaco hiển thị trên Sublime Text kích cỡ 15px

Roboto Mono

Font monospace của bộ Roboto, font mặc định cho HĐH Android và material design. Download font tại đây.

Font chữ cho Lập Trình Viên Và xu hướng ligature trong code font

Font Roboto Mono (Regular) hiển thị trên Sublime Text kích cỡ 15px

SF Mono

Font SF Mono dùng để hiển thị code bên trong XCode 8+. Bạn có thể download và dùng cho mục đích cá nhân tại trang github này.

Font chữ cho Lập Trình Viên Và xu hướng ligature trong code font

Font SF Mono (Regular) hiển thị trên Sublime Text kích cỡ 15px

Source Code Pro

Font monospace được dựng bởi Adobe dành riêng cho việc hiển thị code nên rất dễ đọc và tròn trịa. Đây là font yêu thích nhất của tôi. Download font tại đây.

Font chữ cho Lập Trình Viên Và xu hướng ligature trong code font

Font Source Code Pro (Regular) hiển thị trên Sublime Text kích cỡ 15px

Space Mono

Font monospace được dựng bởi Colophon Foundry cho Google Fonts. Font này có dáng chữ khá lạ và mang hơi hướng mỹ thuật hơn là cho code. Có thể download tại đây.

Font chữ cho Lập Trình Viên Và xu hướng ligature trong code font

Font Space Mono hiển thị trên Sublime Text kích cỡ 15px

Xu hướng code font mới: Programming Ligature (nối chữ)

Ligature: đây là hiện tượng nối nhiều chữ thành một xuất hiện cùng với kỹ thuật in ấn trong một số ngôn ngữ tự nhiên. Trong thời đại số hóa, ligature cũng được mô phỏng lại (chủ yếu là vì lý do mỹ thuật) thông qua một số font chữ có hỗ trợ. Ligature cũng đã được hỗ trợ trên các trình duyệt hiện đại và đặc biệt là từ IE 10 trở về sau.

ligatureVí dụ ligature

Các ngôn ngữ lập trình sử dụng rất nhiều biểu tượng và toán tử tuy nhiên chúng thường được tổ hợp từ nhiều ký tự đơn giản có sẵn trên bàn phím (VD. >=====>!==…). Điều này bắt buộc người đọc code phải có một quá trình giải mã những tổ hợp ký tự đó thành biểu tượng toán mà chúng đang mô phỏng. (“≥”, “≡”, “⇒”, “≢”)

Một số font code mới đây đã bắt đầu hỗ trợ ligature cho tổ hợp các ký tự toán tử và ký hiệu giúp cho việc hiển thị chúng trực quan hơn. Trong số đó là bộ font Fira Code được dựng với rất nhiều tổ hợp ligature cho lập trình.

Font chữ cho Lập Trình Viên Và xu hướng ligature trong code font

Font Fira Code và ligature

Tuy nhiên Fira Code (và cả Fira Mono mà nó dựa trên) không có các ký tự tiếng Việt Unicode. Để khắc phục, bạn có thể sử dụng một font khác làm fallback khá giống Fira Code đó là Roboto Mono.

Hiện nay đã có một số code editor hỗ trợ ligature, trong đó có VSCode và Atom. Rất tiếc là Sublime Text 3 chưa hỗ trợ, và tính năng này đang được đặt hàng cho nhà phát triển ST3.

Sau khi cài Fira Code vào hệ thống, với VSCode, cần cài đặt các settings sau để bật ligature và font Fira Code với Roboto Mono làm fallback:

{
    "editor.fontFamily": "Fira Code, Roboto Mono, monospace",
    "editor.fontLigatures": true
}

Xem thêm:

Nguồn: int3ractive.com

Xem ngay những tin đăng tuyển dụng IT mới nhất trên TopDev

Top 10 công cụ Agile software tốt nhất 2022

Top 10 công cụ Agile software tốt nhất
Top 10 công cụ Agile software tốt nhất

Dưới đây là tổng hợp 10 công cụ Agile (Agile Software Development) hữu ích trong phát triển phần mềm cho bạn.

10. Jira Software (Project management)

Các tính năng chính của JIRA

JIRA nhìn có vẻ rất hiện đại nhưng nó khá phức tạp, chỉ phù hợp với developer có kinh nghiệm, có một UI lởm đồng thời việc học và customize rất khó. Ngoài ra, customization với Jira cũng khá là tốn kém.

  • Khả năng tích hợp: Bởi vì có rất nhiều người dùng tới Jira, nên nhiều sản phẩm được tích hợp sẵn với Jira. Everhour sử dụng Jira cho việc time track tất cả các issues cũng như viết report.
  • Customizable workflows: Tạo ra custom workflows với nhiều qui mô khác nhau phù hợp cho yêu cầu của từng giai đoạn như teams build, test, và release software.
  • Dashboards linh hoạt: Tạo ra chế độ xem cá nhân cho Jira. Chia sẻ dashboards để track project status, tạo report cũng như theo dõi team wallboards.

TOP các việc làm agile hấp dẫn, việc IT chất nhất

9. Trello – Agile instrument (Project management)

Đây là program với visual ấn tượng nhất. Bạn có thể thấy rõ tasks của mình là gì, mức độ ưu tiên và các thành viên liên quan.

Trello khá đơn giản và thiếu nhiều tính năng hữu ích như: không có roadmaps, không có reporting, thiếu backlog charts, và tầm nhìn của dự án khá là nghèo nàn. Nó cũng không hỗ trợ Scrum, phiên bản Kanban thì thiếu swimlanes, WIP bị hạn chế.

8. Aha.io (Project management)

Có nhiều project management tools tuyệt vời được nêu ra trong bài viết này. Nhưng nếu bạn muốn lập trình ra những software tuyệt vời thì bạn sẽ cần những product management tool đa năng hơn như Aha!

Sau khi 2 công ty cuối cùng của Aha được mua lại bởi Aruba Networks và Citrix, Aha mong muốn thay đổi bộ mặt của product và engineering managers, thay vì phải sử dụng những project management tools nghèo nàn.

7. Bamboo (Continuous integration)

Bamboo là một CI server được dùng bởi nhiều team software khác nhau trên toàn thế giới để tự động hóa quá trình quản lí release cho app và software. Nhờ đó mà nhóm sẽ có được một streamlined pipeline của các build khác nhau. Bamboo cho phép developer tự động hóa quá trình build và test nhằm có thêm thời gian cho việc cải thiện sản phẩm. Mobile developers có thể  tự động deploy apps lên Apple Store hoặc Google Play.

Các tính năng chính:

  • Dùng Bamboo với stack ưa thích của bạn, bao gồm Docker, AWS, và S3;
  • Custom deployment projects nhằm theo dõi lịch sử của từng phiên bản được release
  • Fix nhiều bugs nặng nhanh chóng nhờ vào custom agents  
  • Outline chi tiết lịch sử code của bạn trước khi deploy, nhằm giúp bạn hiểu rõ thêm về tiến triển của project
  • Tương thích với Bitbucket và JIRA cho ra một Trải nghiệm CI tuyệt vời
  • Với per-environment permissions, developers và QA có thể deploy đến environments của mình theo nhu cầu trong khi quá trình production vẫn còn locked-down.

Xem thêm các tin đăng việc làm software developer trên TopDev

6. TeamCity (CI/CD)

Một CI server đã có tuổi, đến từ phòng nghiên cứu của công ty JetBrains. Được biết đến bởi làng công nghệ toàn thế giới, các sản phẩm của JetBrains như WebStorm và ReSharper  được sự đón chào nồng nhiệt từ các developers.

TeamCity cung cấp tất cả các tính năng trong phiên bản miễn phí, thế nhưng bạn sẽ bị giới hạn với chỉ 20 configurations và 3 build agents. Mặc khác, bạn cũng cần phải bỏ tiền ra mua build agents và configurations.

TeamCity còn chạy được trên đa platforms khác nhau và có hỗ trợ cho nhiều tool và framework.  Ngoài ra, JetBrains cũng hợp tác với các nhóm developer khác nhau nhằm tạo ra những plugins vô cùng hữu ích.

Mặc dù được tạo ra nhằm giải quyết vấn đề cho Java, TeamCity lại có hỗ trợ cho .NET tốt nhất trong số các tool được liệt kê trong bài viết này. Ngoài ra enterprise packages cũng có nhiều gói khác nhau tùy vào số agents.

Đánh giá: Nhìn tổng quát, TeamCity thật sự là khá tuyệt nhưng do nó phức tạp lại mắc tiền nên chỉ phù hợp với doanh nghiệp hơn là cá nhân.

5. Cicle Ci (CI/CD)

CircleCI cung cấp môt nền tảng cho platform nhằm integration và delivery, giúp cho hàng ngàn team, trên toàn thế giới, release code của mình qua build automation, test automation,và một quá trình deployment. Với cách thức tiếp cận hiện đại, phù hợp với nhu cầu của các software teams, bạn có thể tin tưởng vào CircleCI sẽ giúp cải thiện hiệu năng, với qui mô nhỏ lớn khác nhau.

Tính năng chính:

  • Create an account, add a project, and start building. The platform can grab custom settings from your code directly
  • Custom integration with Maven, Gradle, and other top-notch build tools
  • Using Django, Nose, RSpec, and countless others, CircleCI will do a stellar job at testing your code, while you’re busy shipping your next product
  • Flawless integration with AWS, Heroku, Google Cloud, and others
  • CircleCI automatically uses language-specific tools like rvm and virtualenv to ensure dependencies are installed into an isolated environment

4. GitLab (CI/CD)

Với sự phát triển nhanh chóng từ code management platform cho các developer. Nó cung cấp tools cho issue management, code views, continuous integration và deployment, tất cả đều nằm gọn trong một dashboard duy nhất. Từ giai đoạn thai nghén ý tưởng cho đến phát triển thành sản phẩm, với GitLab, bạn sẽ có được góc nhìn từ trên cao, rõ ràng và chi tiết hơn về hướng project của bạn sẽ phát triển như thế nào. GitLab đưa các pre-built packages cho Linux distributions, quá trình cài đặt sẽ diễn ra chỉ trong vòng vài phút, với một UI thân thiện, kèm theo đó là tài liệu vô cùng chi tiết.

Tính năng chính:

  • Integrated directly into the GitLab workflow
  • Add additional machines to scale your tests for performance
  • CMD build scripts allow you to program them in any language
  • Custom version tests to check branches individually
  • Manual deployment, and effortless rollback capabilities

3. Travis CI (CI/CD)

CI platform với khả năng tự động hóa quá trình software testing và deploy app. Nó được tạo ra như một platform để integrates với GitHub projects để bạn có thể thoải mái test code của mình. Với những khách hàng như Facebook, Mozilla, Twitter, Heroku, và những hãng khác nữa, Travis CI là một những integration tools đứng đầu của thị trường.

Những tính năng chính:

  • Miễn phí cho các open source projected trên GitHub
  • Rất đơn giản, chỉ cần sign up, thêm một project và bạn đã có thể bắt đầu test.
  • Hỗ trợ đa ngôn ngữ để bạn có thể code dễ dàng trên mọi phiên bản
  • Automated pull request verification
  • Hoạt động được với Email, Slack, HipChat và nhiều ứng dụng khác nhằm gửi notifications dễ dàng hơn
  • Extended API và CMD tools dành cho custom management

2. Codeship (CI/CD)

Là một Hosted continuous integration platform, tập trung vào hiệu năng, tốc độ và đơn giản hóa. Team của bạn có thể dùng Codeship để test, build và deploy trực tiếp từ Github project. Nó cũng tương thích với cả Bitbucket. Codeship có các tính năng kết hợp với  integration và delivery để code của bạn có thể deploy đúng sau khi test automation hoàn thành.

Các tính năng chính:

  • One-click signup cho GitHub, GitLab, và Bitbucket
  • Cực kì dễ customizable với native support cho Docker
  • Cấu trúc vô cùng hiệu quả với khả năng theo dõi và scale theo yêu cầu của bạn
  • Hệ quản lí config file đơn giản, giúp bạn làm việc nhanh hơn
  • UI tối giản cho setting up  

1. Jenkins (CI/CD)

Jenkins chính là open-source project số một dành cho automate project của bạn. Với hàng ngàn plugins cho bạn thoải mái lựa chọn, Jenkins có thể giúp team tự động hóa mọi task vốn sẽ tốn kém rất nhiều thời gian cho quá trình phát triển của project. Jenkins thường được dùng cho tạo project, chạy test, phát hiện bug, phân tích code và project deploy.

Các tính năng chính:

  • Jenkins hoạt động như một CI server độc lập, hoặc bạn có thể biến nó thành continuous delivery platform  dành cho bất kì project nào của mình.
  • Pre-built packages cho Unix, Windows,và OS X bảo đảm việc cài đặt diễn ra dễ dàng.
  • Một web interface để có thể configure server của bạn nhanh chóng
  • Custom plugins dành cho build và source code management, administrative tasks, user interface, và platforms
  • Có khả năng deploy khắp mạng lưới network của các máy, cải thiện hiệu năng của build và test.
  • Cộng đồng lớn với các hãng công nghệ khổng lồ chung tay phát triển

Nguồn: topdev.vn via Codecamp

Tại sao nhà tuyển dụng nên chọn bạn mà không phải là các ứng viên khác?

Tại sao nhà tuyển dụng nên chọn bạn mà không phải là các ứng viên khác?

Khi đi xin việc, chúng ta thường được hỏi: “Tại sao chúng tôi nên chọn bạn mà không phải là một người khác?”. Đây là một dạng câu hỏi để tìm hiểu những điểm mạnh của các ứng viên. Nếu bạn không biết các đối thủ của mình là ai thì đây là một câu hỏi để bạn bộc lộ được tính cách và khả năng của mình. Nếu bạn thể hiện tốt đồng nghĩa bạn đã biết thể hiện điểm mạnh, điểm yếu của bản thân và tạo ra cơ hội để trở thành ứng viên phù hợp nhất cho vị trí ứng tuyển.

1) Doanh nghiệp tuyển dụng để giải quyết những vấn đề trong công ty

Trong phỏng vấn, người tuyển dụng có thể đòi hỏi và yêu cầu rất nhiều từ ứng viên. Bạn cần tìm hiểu liệu công việc có cung cấp được những mong muốn mà bạn cần để phát triển nghề nghiệp, các yêu cầu tài chính trong khi người quản lý tuyển dụng đang cố thuê một người để giải quyết những vấn đề cho công ty họ.

Tất nhiên mục tiêu cuối cùng của một buổi phỏng vấn việc làm là tìm được một người để giải quyết những vấn đề của doanh nghiệp. Những vấn đề đó có thể đơn giản như: đảm bảo cho công ty đạt được các mục tiêu về tài chính. Hoặc có thể là một vấn đề phức tạp hơn như tổ chức đang trong quá trình tái cơ cấu thì đó sẽ là làm công ty phát triển, hoặc đảm bảo vị thế của doanh nghiệp trên thị trường. Dù trong bất kỳ trường hợp nào, bạn phải tìm ra vấn đề đó là gì, và chỉ ra rằng bạn có thể giải quyết vấn đề đó tốt hơn bất cứ ứng viên nào.

2) So sánh CV với bảng mô tả công việc

Để có một câu trả lời hiệu quả, bước đầu tiên bạn cần phân tích cẩn thận yêu cầu các yêu cầu của công việc.

Xem lại những tin quảng cảo về công việc và tìm kiếm các từ khóa mô tả vai trò. Kiểm tra lại bảng mô tả công việc trên trang web của doanh nghiệp vì thông tin trên đó có thể nhiều hơn và tích hợp cho bạn tiếp cận.

Bạn nên làm quen với bản mô tả công việc trước khi xin việc làm. Bằng cách đó bạn có thể điều chỉnh hồ sơ và thư giới thiệu sao cho phù hợp nhất với những gì công ty đang tìm kiếm.

3) Liệt kê những yêu cầu mà người tuyển dụng cần

Nếu người tuyển dụng đã cung cấp một danh sách chi tiết các yêu cầu và những điều họ quan tâm trong bảng mô tả công việc thì bạn có thể thực hiện các bước tiếp theo. Nếu chưa có, bạn hãy tìm kiếm công việc đó trên các trang web tuyển dụng bằng những từ khóa tương tự. Đặc biệt mạng xã hội LinkedIn rất hữu ích. Xem hồ sơ các nhân viên hiện tại của công ty cũng là cách để bạn thấy được những kỹ năng và thành tích mà công ty quan tâm. Sau đó, tìm kiếm hồ sơ của các thành viên có chức danh tương tự ở những công ty khác, để xem những gì áp dụng cho vị trí đó nói chung trên toàn thị trường. Một cách khác để hiểu rõ hơn sở thích của người sử dụng lao động là nói chuyện, tìm lời khuyên từ các chuyên gia trong lĩnh vực để có được cái nhìn của họ về những gì họ cần để có được thành công trong vị trí đó.

4) Liệt kê những kỹ năng mà công việc cần

Hãy tạo một danh sách những bằng cấp, yêu cầu tiên quyết cho công việc mà bạn đang ứng tuyển. Với mỗi yêu cầu trong danh sách, hãy xem lại những kinh nghiệm bạn có, những công việc tình nguyện đã làm và quá trình học, từ đó đưa ra những dẫn chứng phù hợp cho công việc bạn đang nộp.

Nếu bạn đưa ra được một ví dụ chứng minh cách bạn đã sử dụng điểm mạnh đó trong công việc, cuộc sống, bạn sẽ gây ấn tượng hơn với nhà tuyển dụng. Khi chuẩn bị cho buổi phỏng vấn, bạn hãy tự thực hành trả lời các câu hỏi để thể hiện bản thân tốt nhất.

5) Đưa ra lý do tại sao bạn nên nhận việc

Chuẩn bị để chia sẻ lại những kinh nghiệm, dự án hoặc thách thức, cùng với những hành động mà bạn thực hiện để thể hiện tài sản và các kết quả tích cực. Tài sản của bạn có thể là kỹ năng, kiến thức hoặc chuyên môn, phẩm chất cá nhân hoặc các lĩnh vực có liên quan của kinh nghiệm.

Chọn từ 5 đến 7 điểm mạnh tương ứng với yêu cầu công việc và sử dụng những điểm này làm cốt lõi cho câu trả lời của bạn về những gì làm nổi bật bạn với các ứng viên khác.

Bạn có thể thêm một vài tính cách đặc biệt khác mà thường giúp bạn thành công trong công việc và chúng sẽ giúp bạn gây ấn tượng với người phỏng vấn.

Tham khảo thêm các nhà tuyển dụng HOT tại đây

Cloud Devops quan trọng như thế nào?

devops1

Ngày nay tính linh hoạt và khả năng thích ứng là rất quan trọng trong môi trường CNTT. Thực tế đã chứng minh dù là trong bất kỳ lĩnh vực nào thì hiệu quả sản phẩm cũng là yếu tố quyết định đến khả năng cạnh tranh của doanh nghiệp trên thị trường. Kết quả là, một số công ty đã bỏ qua các phương pháp truyền thống và bắt đầu sử dụng công nghệ điện toán đám mây và kỹ thuật số để tạo ra sản phẩm cuối cùng ổn định và hiệu quả hơn. Khác với  cách di chuyển Cloud trước đây, đã có một sự thay đổi trong cách ứng dụng đang được phát triển. Bài viết này sẽ chứng minh DevOps và cloud là một kết hợp hoàn hảo.

Trước khi DevOps

Cơ sở hạ tầng, triển khai ứng dụng và cập nhật là một trong những vấn đề lớn cho bất kỳ vòng đời phát triển nào. Nếu bạn có thể giải quyết những quy trình này một cách hợp lý tôi nghĩ bạn có thể đối mặt với những yêu cầu không ngừng thay đổi của khách hàng một cách dễ dàng. Đầu tư vào phát triển cơ sở hạ tầng tốn kém và cồng kềnh những năm trở lại đây đã hoàn toàn bị thay thế bởi điện toán đám mây.

Có 1 điều khá thú vị là điện toán đám mây không chỉ cung cấp cơ sở hạ tầng một cách dễ dàng với giá cả phải chăng mà còn giảm chi phí bảo trì cơ sở hạ tầng. Chỉ với một vài cú nhấp chuột, cơ sở hạ tầng cơ bản của bạn đã có thể hoạt động. Trước đây một khi lập trình viên làm việc với module, họ phải commit code của họ vào các trình quản quản lý source. Điều này có nghĩa là việc built ứng dụng không thể hoàn thành cho đến khi các lập trình viên khác đã hoàn tất viết code cho mô-đun của họ.

Sau khi hoàn thành toàn bộ code căn bản, mọi thứ đã được bàn giao cho nhóm tester và cuối cùng mới cho ra sản phẩm.

Quá trình từ phát triển sản phẩm đến sản xuất, toàn bộ chu kỳ tốn rất nhiều thời gian do phải lặp đi, lặp lại các lỗi kỹ thuật. Thêm vào đó, nhóm vận hành và nhóm phát triển chưa bao giờ ngồi xuống cùng nhau đưa ra quyết định.

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

Những thách thức đáng kể mà ngành CNTT gặp phải khi phát triển nhanh là:

  • Sự không thống nhất giữa các môi trường Dev và Ops
  • Hạn chế thời gian cho các bản phát hành thường xuyên
  • Triển khai chậm giữa hai đội làm giảm hiệu suất tổng thể
  • Khó khăn khi quản lý nhiều cấu hình và phiên bản ứng dụng
  • Nguy cơ lỗi cao hơn do can thiệp bằng phương pháp thủ công
  • Chi phí cao hơn
  Top 5 câu hỏi phỏng vấn Devops Engineer thường gặp và cách trả lời

Sau khi Cloud DevOps

Cá nhân tôi nghĩ rằng DevOps không phải là một công cụ cũng không phải là một công nghệ. Đó là một nền văn hóa có tổ chức nhằm tạo thuận lợi cho truyền thông, hợp tác và hội nhập hiệu quả giữa các nhóm phát triển và nhóm vận hành sản phẩm. Trong trường hợp này, công việc của developer và operational không được phân biệt tác bạch, rõ ràng mà cùng hợp lại với nhau để đẩy nhanh quá trình và tạo ra ít lỗi hơn.

Với việc thông qua một số công cụ phần mềm mã nguồn mở thông minh liên quan đến kiểm soát code, tích hợp liên tục và quản lý cấu hình. Hiện tại, có một vài công cụ dựa vào các thành phần phân phối, Cloud DevOps cung cấp nhiều lợi ích đáng kể. Thực tế, Cloud DevOps cung cấp một cơ sở hạ tầng có khả năng mở rộng cho một công ty phát triển ứng dụng phần mềm.

  Làm thế nào để tìm được những "nhân tài" DevOps phù hợp nhất?

Lợi ích:

Quá trình thống nhất-toàn bộ vòng đời, tức là từ lúc phát triển sản phẩm đến lúc đưa vào hoạt động có thể được xem như là một quá trình từ đầu đến cuối. Điều này có nghĩa là các nhà phát triển không còn cần đợi các nhóm tester kiểm tra code trước khi triển khai ứng dụng trong môi trường họ mong muốn.

  • Tự động hóa-ít cơ hội sai sót, nhất quán, phân phối phần mềm nhanh
  • Tập trung vào sự ổn định và thời gian hoạt động-Cải thiện trải nghiệm của khách hàng
  • Hợp tác nhiều hơn– các vấn đề phát sinh giữa các nhóm đã được giải quyết nhanh chóng và dứt khoát
  • Service Visualization – phát triển kích thích/ song song
  • Phát triển nhanh nhẹn – Cloud DevOps hòa hợp tốt với Agile và cung cấp một sự hỗ trợ tuyệt vời để đạt được những mục tiêu ngay lập tức.

Kết luận

Cloud đã trở thành xu hướng mới cho hầu hết các lĩnh vực kỹ thuật cũng như phi kỹ thuật. Ngày nay áp dụng kỹ thuật số và công nghệ để phát triển landscape, cloud và DevOps được kết hợp chặc chẽ với nhau.

Nguồn: topdev.vn via scotch.io

Tham khảo các tin đăng tuyển dụng IT mới nhất trên TopDev

12 Packages và Libraries của Go cực kì mạnh mẽ mà bạn cần phải biết

Go la một ngôn ngữ lập trình vô cùng tuyệt vời và tiềm năng, với phong cách đơn giản hóa. Được thể hiện khá rõ với standard library, vốn chứa tất cả mọi thứ cần thiết, nhưng không hề dư thừa.

Thật may, Go có một cộng đồng khá sôi động với nhiều libraries của “third-party” được chia sẻ tại đây. Trong bài hướng dẫn này, tôi sẽ giới thiệu cho bạn 12 package và libraries tốt nhất của Go. Trải dài từ qui mô nhỏ thích hợp cho mọi project cho đến các hệ thống xử lí cực lớn và phức tạp.

Awesome Go

Trước khi nhảy vào tìm hiểu về libraries, tôi muốn giới thiệu các bạn về Awesome Go, một list danh sách các Go libraries và những nguồn khác, khá chính xác và luôn được cập nhật thường xuyên. Nên hãy bỏ công vào xem nhé.

Golang-Set

Go có arrays, slices và maps, nhưng nó lại không có một set data structure. bạn có thể bước trước một set với một map của bools, nhưng nó vẫn sẽ luôn tốt hơn nếu ta có data type thật với operations đúng. Đó chính là mục đích của golang-set. Sau đây là một ví dụ tạo ra một set mới, thêm items và testing cho membership:

package main
 
import (
    "fmt"
    "github.com/deckarep/golang-set"
)
 
 
func main() {
    basicColors := mapset.NewSet()
    basicColors.Add("Red")
    basicColors.Add("Blue")
    basicColors.Add("Green")
 
    if basicColors.Contains("Green") {
        fmt.Println("Yay! 'Green' is a basic color")
    } else {
        fmt.Println("What a disappointment! 'Green' is not a basic color")
    }
 
 
    if basicColors.Contains("Yellow") {
        fmt.Println("Yay! 'Yellow' is a basic color")
    } else {
        fmt.Println("What a disappointment! 'Yellow' is not a basic color")
    }
}
 
Output:
 
Yay! 'Green' is a basic color
What a disappointment! 'Yellow' is not a basic color

Lưu ý rằng do package  có tên là “mapset”. Ngoài mấy tính năng cơ bản ra, bạn có thể thực hiện được tất cả các loại set operations như union, intersection, và difference. Bạn cũng lặp được set các giá trị:

package main
 
import (
    "fmt"
    "github.com/deckarep/golang-set"
)
 
 
func main() {
    basicColors := mapset.NewSet()
    basicColors.Add("Red")
    basicColors.Add("Blue")
    basicColors.Add("Green")
 
    otherColors := mapset.NewSetFromSlice([]interface{}{"Orange", "Yellow", "Indigo", "Violet"})
    rainbowColors := basicColors.Union(otherColors)
 
    for color := range rainbowColors.Iterator().C {
        fmt.Println(color)
    }
}

Color

Hãy tiếp tục với color theme. Khi bạn đang viết command-line programs, việc có thể highlight những messages quan trọng, hay phân biệt giữa errors, successes, và warnings là cực kì hữu ích.

color package cho bạn khả năng thêm nhiều màu sắc khác nhau cho chương trình của mình. Nó dùng ANSII escape codes và supports cả hệ điều hành Windows. Sau đây là một ví dụ đơn giản:

package main
 
import (
    "github.com/fatih/color"
)
 
func main() {
    color.Red("Roses are red")
    color.Blue("Violets are blue")
}

Color package hỗ trợ tính năng trộn và kết hợp màu với màu của background, style như bold hoặc italic, dùng màu với non-color output.

package main
 
import (
    "github.com/fatih/color"
    "fmt"
)
 
func main() {
    minion := color.New(color.FgBlack).Add(color.BgYellow).Add(color.Bold)
    minion.Println("Minion says: banana!!!!!!")
 
    m := minion.PrintlnFunc()
    m("I want another banana!!!!!")
 
    slantedRed := color.New(color.FgRed, color.BgWhite, color.Italic).SprintFunc()
    fmt.Println("I've made a huge", slantedRed("mistake"))
}

Color package còn có những tính năng hữu ích khác mà bạn nên khám phá thêm.

Now

Now là mộ package khá đơn giản với tính năng cung cấp một wrapper cho standard time package và nó rất dễ dùng với ngày và thời gian khác nhau xung quanh thời điểm hiện tại.

Ví dụ như bạn có thể bắt đầu với thời điểm hiện tại hoặc tại cuối ngày chủ nhật cho đến thời điểm hiện tại. Sau đây là cách dùng cho thời điểm là “ngay bây giờ”:

package main
 
import (
    "github.com/jinzhu/now"
    "fmt"
)
 
func main() {
 
    fmt.Println("All the beginnings...")
    fmt.Println(now.BeginningOfMinute())
    fmt.Println(now.BeginningOfHour())
    fmt.Println(now.BeginningOfDay())
    fmt.Println(now.BeginningOfWeek())
    fmt.Println(now.BeginningOfMonth())
    fmt.Println(now.BeginningOfQuarter())
    fmt.Println(now.BeginningOfYear())
 
}
 
Output:
 
All the beginnings...
2017-06-04 16:59:00 -0700 PDT
2017-06-04 16:00:00 -0700 PDT
2017-06-04 00:00:00 -0700 PDT
2017-06-04 00:00:00 -0700 PDT
2017-06-01 00:00:00 -0700 PDT
2017-04-01 00:00:00 -0700 PDT
2016-12-31 23:00:00 -0800 PST

Bạn còn có thể parse thời gian và thêm vào format của riêng bạn.  Now type sẽ in vào  time.Time, nên bạn có thể dùng tất cả cách thức  time.Time trực tiếp lên  Now objects.

Gen

gen tool tạo ra code cho bạn – chính xác là chúng cho ra code thuộc type-aware với tính năng giảm bớt khoảng cách không có templates hoặc generics trong Go.

Bạn cần chú thích types của mình với comment đặc biệt. cũng như các gen generates source files mà bạn dùng trong project của mình. Sau đây là một cách để dùng annotated type:

// +gen slice:"Where,Count,GroupBy[int]"
type Person struct {
    Name string
    Age int
}

Chạy gen sẽ tạo ra  person_slice.go:

// Generated by: gen
// TypeWriter: slice
// Directive: +gen on Person
 
package main
 
// PersonSlice is a slice of type Person. Use it where you would use []Person.
type PersonSlice []Person
 
// Where returns a new PersonSlice whose elements return true for func. See: http://clipperhouse.github.io/gen/#Where
func (rcv PersonSlice) Where(fn func(Person) bool) (result PersonSlice) {
    for _, v := range rcv {
        if fn(v) {
            result = append(result, v)
        }
    }
    return result
}
 
// Count gives the number elements of PersonSlice that return true for the passed func. See: http://clipperhouse.github.io/gen/#Count
func (rcv PersonSlice) Count(fn func(Person) bool) (result int) {
    for _, v := range rcv {
        if fn(v) {
            result++
        }
    }
    return
}
 
// GroupByInt groups elements into a map keyed by int. See: http://clipperhouse.github.io/gen/#GroupBy
func (rcv PersonSlice) GroupByInt(fn func(Person) int) map[int]PersonSlice {
    result := make(map[int]PersonSlice)
    for _, v := range rcv {
        key := fn(v)
        result[key] = append(result[key], v)
    }
    return result
}

 

Code sẽ cung cấp những phương thức tương tự như LINQ để vận hành trên PersonSlice type. Nó khá dễ hiểu cũng như dễ lưu trữ.

Bạn có thể dùng nó với cách sau: Trong main function, một  PersonSlice đã được defined.  age() function chọn ra tuổi thích hợp trong  Person argument của nó.  GroupByInt() function được tạo ra và nó sẽ lấy giá trị của age() function và trả về với kết quả là nhóm những người với độ tuổi giống nhau:

package main
 
import (
    "fmt"
)
 
// +gen slice:"Where,Count,GroupBy[int]"
type Person struct {
    Name string
    Age int
}
 
func age(p Person) int {
    return p.Age
}
 
func main() {
    people := PersonSlice {
        {"Jim", 34},
        {"Jane", 23},
        {"Kyle", 23},
    }
 
    groupedByAge := people.GroupByInt(age)
 
    fmt.Println(groupedByAge)
}
 
 
Output:
 
map[34:[{Jim 34}] 23:[{Jane 23} {Kyle 23}]]

Gorm

Go được biết tới với khả năng cực kì mạnh mẽ. Lập trình Database cũng không phải là ngoại lệ. Phần lớn các DB libraries dành cho Go vẫn còn khá đơn sơ. Gorm mang tới object-relational mapping  cho Go với những tính năng như:

  • Associations (Has One, Has Many, Belongs To, Many To Many, Polymorphism)
  • Callbacks (Before/After Create/Save/Update/Delete/Find)
  • Preloading (eager loading)
  • Transactions
  • Composite Primary Key
  • SQL Builder
  • Auto Migrations
  • Logger
  • Mở rộng được, viết Plugins dựa trên GORM callbacks

Nhưng nó không phải là làm được hết mọi thứ. Nếu bạn chuyển qua từ Python thì đừng mong chờ vào SQLAlchemy. Sau đây là cách dùng Gorm với sqlite. Lưu ý  gorm.Model được đặt trong Product struct.

package main
 
import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/sqlite"
)
 
type Product struct {
  gorm.Model
  Code string
  Price uint
}
 
func main() {
  db, err := gorm.Open("sqlite3", "test.db")
  if err != nil {
    panic("failed to connect database")
  }
  defer db.Close()
 
  // Migrate the schema
  db.AutoMigrate(&Product{})
 
  // Create
  db.Create(&Product{Code: "L1212", Price: 1000})
 
  // Read
  var product Product
  db.First(&product, 1) // find product with id 1
  db.First(&product, "code = ?", "L1212")
 
  // Update - update product's price to 2000
  db.Model(&product).Update("Price", 2000)
 
  // Delete - delete product
  db.Delete(&product)

 

Goose

Một trong những tasks quan trọng nhất khi làm việc với relational databases là quản lí schema. Modifying DB schema được xem là thay đổi khá đáng sợ đối với nhiều người. goose package  cho phép bạn thực hiện các thay đổi với schema và cả di chuyển dữ liệu nếu cần. Bạn có thể  goose up và  goose down để di chuyển về trước hoặc lui lại. Nhưng nhớ là đừng để data của bạn bị mất hoặc corrupted.

Goose hoạt động bằng cách phân biệt schema ra từng phiên bản và dùng các files tùy theo từng schema. Các files đó có thể là SQL commands hoặc Go commands. Sau đây là một ví dụ SQL migration file thêm một table mới:

-- +goose Up
CREATE TABLE person (
    id int NOT NULL,
    name text,
    age int,
    PRIMARY KEY(id)
);
 
-- +goose Down
DROP TABLE person;

 -- +goose up & -- +goose down comment sẽ cho goose biết nên upgrade hay downgrade  schema.

Glide

Glide là một package manager dành cho Go. Với  GOPATH, bạn có thể sẽ có nhiều chương trình bị xung đột dependencies. Giải pháp cho vấn đề trên là cho từng program quản lí vendor directory của package dependencies. Đây chính là lúc Glide thể hiện sức mạnh của nó.

Một vài tính năng nổi bật của Glide:

  • Support versioning packages bao gồm Semantic Versioning 2.0.0 support.
  • Support aliasing packages (e.g. để làm với Github).
  • Remove the need for munging import statements.
  • Tương thích với toàn bộ go tools.
  • Support tất cả VCS tools được Go supports (git, bzr, hg, svn).
  • Support custom local và global plugins.
  • Repository caching và data caching để cải thiện hiệu năng.
  • Flatten dependencies, giải quyết việc khác phiên bản và tránh đưa vào một package nhiều lần.
  • Quản lí và cài đặt dependencies theo yêu cầu trong version control system.

Các dependencies  sẽ được lưu trữ trong glide.yaml, và glide cung cấp một số commands để quản lí dependencies:

create, init       Initialize a new project, creating a 
                   glide.yaml file
config-wizard, cw  Wizard that makes optional suggestions 
                   to improve config in a glide.yaml file.
get                Install one or more packages into 
                   `vendor/` and add dependency to 
                   glide.yaml.
remove, rm         Remove a package from the glide.yaml 
                   file, and regenerate the lock file.
import             Import files from other dependency 
                   management systems.
name               Print the name of this project.
novendor, nv       List all non-vendor paths in a 
                   directory.
rebuild            Rebuild ('go build') the dependencies
install, i         Install a project's dependencies
update, up         Update a project's dependencies
tree               (Deprecated) Tree prints the 
                   dependencies of this project as a tree.
list               List prints all dependencies that the 
                   present code references.
info               Info prints information about this 
                   project
cache-clear, cc    Clears the Glide cache.
about              Learn about Glide
mirror             Manage mirrors
help, h            Shows a list of commands or help for 
                   one command

Ginkgo

Ginkgo là một BDD (Behavior Driven Development) testing framework. Nó cho phép bạn viết các bài tests trong một syntax tương tự như English mà người xem dù có ít kinh nghiệm vẫn có thể hiểu được cũng như kiểm tra nó có phù hợp với yêu cầu của họ không.

Một số developers cũng rất thích test kiểu này. Nó được tích hợp với Go’s built-in testing package và thường được kết hợp với Gomega. Sau đây là một ví dụ với Ginkgo + Gomega test:

actual, err := foo()
Ω(err).Should(BeNil())
Ω(actual).ShouldNot(BeNil())
Ω(actual.result).Should(Equal(100))

Etcd

Etcd là distributed Key-Value store rất đáng tin cậy. Server được implemented vào Go, và Go client tương tác với nó thông qua gRPC.

Etcd tập trung vào những điều sau:

  • Đơn giản: Thiết kế gọn, user-facing API (gRPC).
  • An toàn: automatic TLS vớioptional client cert authentication.
  • Nhanh: benchmarked 10,000 writes/sec.
  • Tin cậy: được Distributed sử dụng Raft.

Sau đây là một ví dụ với kết nối server, thêm và lấy giá trị, bao gồm timeouts và cleanup.

func test_get() {
    cli, err := clientv3.New(clientv3.Config{
        Endpoints:   endpoints,
        DialTimeout: dialTimeout,
    })
    if err != nil {
        log.Fatal(err)
    }
    defer cli.Close()
 
    _, err = cli.Put(context.TODO(), "foo", "bar")
    if err != nil {
        log.Fatal(err)
    }
 
    ctx, cancel := context.WithTimeout(context.Background(), 
                                       requestTimeout)
    resp, err := cli.Get(ctx, "foo")
    cancel()
    if err != nil {
        log.Fatal(err)
    }
    for _, ev := range resp.Kvs {
        fmt.Printf("%s : %s\n", ev.Key, ev.Value)
    }
    // Output: foo : bar
}

NSQ

NSQ là một distributed queue. Tôi từng dùng nó cho primary building block của distributed systems với qui mô lớn. NSQ thật sự rất tuyệt vời những tính năng như:

  • Hỗ trợ distributed topologies với no SPOF.
  • Horizontally scalable (không cần brokers, dể dàng thêm nodes vào cluster).
  • Low-latency push based message delivery (performance).
  • Kết hợp load-balanced và multicast style message routing.
  • Cực kì mạnh mẽ với streaming (high-throughput) và job oriented (low-throughput) workloads.
  • Primarily in-memory
  • Runtime discovery service cho consumers để tìm producers (nsqlookupd).
  • Transport layer security (TLS).
  • Data format agnostic.
  • Ít dependencies (dễ deploy) và một default configuration dễ dùng.
  • TCP protocol supporting client libraries cực kì tối giản với nhiều ngôn ngữ khác nhau.
  • HTTP interface cho stats, admin actions, và producers ( không cần client library để publish).
  • Integrates với statsd cho real-time instrumentation.
  • Robust cluster administration interface (nsqadmin).

Sau đây là cách chúng ta đưa message tới NSQ:

package main
 
import (
  "github.com/bitly/go-nsq"
)
 
func main() {
  config := nsq.NewConfig()
  p, _ := nsq.NewProducer("127.0.0.1:4150", config)
 
  p.Publish("topic", []byte("message"))
  p.Stop()
}

Còn dưới đây là cách consume:

package main
 
import (
  "sync"
  "fmt"
  "github.com/bitly/go-nsq"
)
 
func main() {
  wg := &sync.WaitGroup{}
  wg.Add(1)
 
  config := nsq.NewConfig()
  q, _ := nsq.NewConsumer("topic", "channel", config)
  handler := nsq.HandlerFunc(func(message *nsq.Message) error {
      fmt.Printf("Got a message: %v", message)
      wg.Done()
      return nil
  })
  q.AddHandler(handler)
  q.ConnectToNSQD("127.0.0.1:4150")
  wg.Wait()
}

Docker

Bạn có thể không hề biết về Docker vốn được tích hợp trong Go. Bạn thường không dùng Docker trong Code của mình, tuy vậy Docker vẫn được xem là một Go project lớn và khá thành công.

Kubernetes

Kubernetes là open-source container orchestration platform dành cho cloud-native applications. Có thể nói cũng là một con quái vật distributed system được tích hợp vào Go. Tôi có viết một cuốn sách  Mastering Kubernetes, giải thích khá cận kẽ những thế mạnh của Kubernetes. Đến từ một Go developer, tôi nghĩ rằng Kubernetes cực kì linh hoạt, cho phép bạn mở rộng cũng như customize với plugins.

Lời kết  

Go là một ngôn ngữ lập trình tuyệt vời. Với phong cách thiết kế tối giản và thân thiện với người dùng. Kèm theo đó library của Go không qua deep như những ngôn ngữ khác.

Mặt khác, cộng đồng Go được xem là một trong những community tích cực trong thế giới lập trình, cung cấp cho bạn rất nhiều library chất lượng để sử dụng cho project của mình.

Nguồn: code.tutplus.com

Single page app không hề tệ như bạn nghĩ

Tôi vừa đọc qua một bài viết nói về những vấn đề thường thấy với Single Page App. Là một lập trình viên lâu năm về React và AngularJS, tôi hiểu một số lí do mà anh ấy đưa ra. Để làm ra một SPA tốt là chuyện không hề dễ dàng gì. Với lợi thế trong việc tạo ra trải nghiệm tuyệt vời cho user nhưng đồng thời đòi hỏi rất nhiều công sức.

Sau đây là một số lí do nhiều người không thích SPA:

  • Có quá nhiều SPA framework để chọn và mỗi framework lại có một ecosystem riêng khiến cho bạn phải suy nghĩ rất kĩ về lựa chọn của mình
  • Đòi hỏi nhiều công sức để làm UX tốt
  • Yêu cầu nhiều developer để làm một dự án. Chỉ có backend developer thì SPA sẽ không bao giờ được hoàn chỉnh
  • Bạn phải lên kế hoạch rất kĩ lưỡng cho cấu trúc app
  • Phần lớn các SPA đều khá kén SEO trừ khi bạn có áp dụng server-side rendering vốn không phải là chuyện nhỏ

Nhưng SPA cũng có rất nhiều lợi ích cho End-User:

  • Thời gian loading ngắn hơn. SPA .
  • Ajax request thêm data và update cho hệ tương tác người dùng. Trong khi, website truyền thống phải reload mọi thứ cứ sau mỗi lần click.
  • App của bạn xử lí nhanh hơn. Khi user làm bất cứ hành động nào, app sẽ ngay lập tức update. Trong một số trường hợp, bạn sẽ phải áp dụng một spinner để giúp user hiểu rằng app đang xử lí và phản ứng lại yêu cầu của user.
  • Frontend và backend hoàn toàn cách biệt nhau nên bảo trì app trở nên dễ hơn..
  • Giúp các frontend developer phát triển và tích lũy kinh nghiệm

Câu hỏi được đặt ra lúc này là khi nào thì ta nên dùng SPA?

Nếu website của bạn rất đơn giản, ví dụ như chỉ cần hiện thị thông tin và bạn cần SEO để tăng lượt vào xem thì SPA là không cần thiết bởi WordPress website là đủ rồi. Khi tạo ra blog của mình, tôi đắn đo giữa React hoặc WordPress và cuối cùng thì chọn WordPress bởi dù sao thì blog cũng khá đơn giản. Chỉ cần cài một cái theme là đã có ngay rồi.

Về SPA, hãy tự hỏi bản thân: Lần cuối cùng mà bạn xài Gmail classic (phiên bản chậm chạp của gmail) là khi nào? Từng click đều khá đắt giá. Và nó mất tới vài giây chỉ để reload lại toàn bộ website.

Như vậy, nếu website của bạn có nhiều tương tác khác nhau thì SPA là một lựa chọn tuyệt vời. Có rất nhiều ứng dụng từ SPA: chat app, CRM, online file manager, travel planning… Vì thế mà bạn phải dùng đúng loại tool tùy vào tình huống. Đã là 2017 nên các tool lập trình SPA đã được cải thiện. Cá nhân tôi vẫn thích lập trình app bằng React và AngularJS. Sau đây là một số nguyên nhân tôi thích React:

  • Mọi thứ trên màn hình của bạn đều là component. Mà Components thì dễ phát triển và bảo trì.
  • Bạn có thể tránh được việc CSS bị xung đột với style libraries như StyledComponent hoặc CSSModules
  • Hot reloading giúp bạn update app mà không cần reload nó lại.
  • GraphQL là một công cụ thần thánh cho data fetching, tôi tin nó sẽ thay thế REST.
  • Javascript càng ngày mạnh mẽ hơn trong những năm gần đây. ES6 và ES7 giúp cải thiện hiệu năng làm việc của các developer hơn.

Nếu lần sau, có ai hỏi bạn về SPA thì hãy giải thích cho họ lúc nào thích hợp nên xài SPA cũng như những app nào thì nên dùng tới SPA.

Nguồn: blog.topdev.vn via Nam Tran via Codecamp

Cách thức hoạt động của JavaScript: V8 engine và 5 mẹo tối ưu hóa

Bài này sẽ đi sâu vào các phần V8 JavaScript engine của Google. Tôi sẽ cung cấp một số mẹo nhỏ về cách viết code JavaScript tốt hơn – đạt hiệu suất hơn mà nhóm phát triển của chúng tôi tại SessionStack thực hiện khi xây dựng sản phẩm.

Tổng quan

Một JavaScript engine là chương trình hoặc là interpreter (trình thông dịch) thực thi code JavaScript. Một JavaScript engine có thể được thực hiện như một trình thông dịch tiêu chuẩn, hoặc compiler (trình biên dịch) phù hợp để biên dịch JavaScript thành bytecode trong một số hình thức.

Đây là danh sách các dự án phổ biến đang triển khai JavaScript engine:

  • V8 — mã nguồn mở, được phát triển bởi Google, viết bằng C ++
  • Rhino — Được quản lý bởi Mozilla, mã nguồn mở được phát triển hoàn toàn bằng Java
  • SpiderMonkey — Công cụ JavaScript đầu tiên, được sự hỗ trợ của Netscape Navigator, và ngày hôm nay thuộc quyền sử dụng của Firefox
  • JavaScriptCore — mã nguồn mở, được biết đến là Nitro và do Apple phát triển cho Safari
  • KJS — engine của KDE được phát triển bởi Harri Porten cho trình duyệt web KDEproject’s Konqueror
  • Chakra (JScript9) — Internet Explorer
  • Chakra (JavaScript) — Microsoft Edge
  • Nashorn, mã nguồn mở như là một phần của OpenJDK, được viết bởi Oracle Java Languages và Tool Group
  • JerryScript —Là một công cụ nhẹ cho Internet of Things.

Tại sao V8 Engine được tạo ra?

V8 Engine được xây dựng bởi Google là mã nguồn mở và được viết bằng C ++. Công cụ này được sử dụng trong Google Chrome. Tuy nhiên, khác với phần còn lại của engine, V8 cũng được sử dụng phổ biến cho Node.js.

V8 lần đầu tiên được thiết kế để tăng hiệu suất việc thực hiện JavaScript bên trong các trình duyệt web. Để tối ưu hóa tốc độ, V8 chuyển code JavaScript thành machine code thay vì sử dụng một interpreter. Nó biên dịch code JavaScript vào machine code khi thi hành bằng cách sử dụng trình biên dịch JIT (Just-In-Time) như rất nhiều công cụ JavaScript hiện đại như SpiderMonkey hay Rhino (Mozilla). Sự khác biệt chính ở đây là V8 không tạo ra code bytecode hoặc bất kỳ code trung gian nào.

Tham khảo thông tin tuyển dụng JavaScript Hồ Chí Minh dành cho bạn!

V8 từng có 2 trình biên dịch

Trước khi phiên bản 5.9 của V8 xuất hiện (phát hành đầu năm nay), engine đã sử dụng hai trình biên dịch:

  • full-codegen  – một trình biên dịch đơn giản và tạo ra code đơn giản và tương đối chậm.
  • Crankshaft  – trình biên dịch phức tạp hơn (Just-In-Time) tối ưu hóa việc tạo racode hiệu quả hơn.

V8 Engine cũng sử dụng một số threads internally:

  • thread chính thực hiện những gì bạn đang mong đợi: lấy code của bạn, biên dịch nó và sau đó thực hiện nó
  • Ngoài ra còn có một luồng riêng biệt để biên soạn, do đó các luồng chính có thể tiếp tục thực hiện trong khi tối ưu hóa code
  • Một luồng Profiler sẽ cho biết thời gian chạy trên các methods mà chúng ta dành nhiều thời gian để Crankshaft để có thể tối ưu hóa chúng
  • Một vài luồng để xử lý quét Garbage Collector

Khi thực hiện code JavaScript lần đầu tiên, V8 thúc đẩy full-codegen trực tiếp chuyển code Javascript thành machine code mà không cần chuyển đổi. Điều này cho phép nó bắt đầu thực hiện machine code rất nhanh. Lưu ý rằng V8 không sử dụng bytecode trung gian bằng cách này loại bỏ sự cần thiết của interpreter

Khi code của bạn đã chạy một thời gian, luồng profiler đã tập hợp đủ dữ liệu để cho biết phương pháp nào nên được tối ưu hóa.

Tiếp theo, tối ưu hóa Crankshaft được thực hiện ở 1 luồng khác. Mục đích để dịch cú pháp JavaScript thành single-assignment (SSA) được gọi là Hydrogen và cố gắng tối ưu hóa đồ thị Hydro. Hầu hết các tối ưu hóa được thực hiện ở mức này.

Inlining

Tối ưu hóa đầu tiên là inlining càng nhiều code càng tốt. Inlining là quá trình thay thế một call site (dòng code nơi chức năng được gọi) với phần thân của hàm được gọi. Bước này cho phép tối ưu hóa sau có ý nghĩa hơn.

Hidden class

JavaScript là một ngôn ngữ dựa trên nguyên mẫu: không có các class và các object được tạo ra bằng cách sử dụng quá trình nhân bản. JavaScript cũng là một ngôn ngữ lập trình động, có nghĩa là các thuộc tính có thể dễ dàng thêm hoặc xoá khỏi một object sau khi nó được khởi tạo.

Hầu hết các trình biên dịch JavaScript sử dụng các cấu trúc giống như từ điển (dựa trên chức năng hash) để lưu trữ vị trí các giá trị thuộc tính đối tượng trong bộ nhớ. Cấu trúc này làm cho việc lấy giá trị của một thuộc tính trong JavaScript phức tạp hơn nhiều so với các ngôn ngữ lập trình non-dynamic như: Java hay C #. Trong Java, tất cả các thuộc tính của đối tượng được xác định bởi một bố cục cố định trước khi biên dịch và không thể tự động thêm hoặc xoá khi chạy. Kết quả là các giá trị thuộc tính (hoặc các trỏ tới các thuộc tính đó) có thể được lưu trữ dưới dạng một bộ nhớ đệm bổ sung liên tục. Độ dài của offset có thể dễ dàng được xác định dựa trên loại thuộc tính, trong khi điều này là không thể trong JavaScript khi mà chương trình đang chạy.

Vì sử dụng dictionaries để tìm vị trí của các thuộc tính đối tượng trong bộ nhớ là rất không hiệu quả, V8 sử dụng một phương pháp khác thay thế: hidden classes. Các hidden classes có chức năng tương tự như object layout, ( class) được sử dụng như trong Java ngoại trừ các class được tạo ra trong thời gian chạy. Bây giờ, chúng ta hãy xem những gì nó thực sự như thế nào:

function Point(x, y) {
    this.x = x;
    this.y = y;
}
var p1 = new Point(1, 2);

Khi “invocation Point (1, 2)” mới xảy ra, V8 sẽ tạo ra một hidden classes gọi là “C0”.

Không có thuộc tính nào được xác định cho Point, vì vậy “C0” trống.

Khi câu lệnh đầu tiên “this.x = x” được thực hiện (bên trong hàm “Point”), V8 sẽ tạo ra một hidden classes thứ nhì gọi là “C1” dựa trên “C0”. “C1” mô tả vị trí trong bộ nhớ (tương đối so với con trỏ đối tượng) nơi có thể tìm thấy thuộc tính x. Trong trường hợp này, “x” được lưu trữ tại offset 0, có nghĩa là khi xem một đối tượng điểm trong bộ nhớ như một bộ đệm liên tục, lần bù đầu tiên sẽ tương ứng với thuộc tính “x”. V8 sẽ cập nhật “C0” với một “class transition” trong đó nếu một thuộc tính “x” được thêm vào một đối tượng điểm, nên hidden classes chuyển từ “C0” thành “C1”. Hidden classes cho đối tượng bên dưới bây giờ là “C1”.

Quá trình này được lặp lại khi câu lệnh “this.y = y” được thực hiện (một lần nữa, bên trong chức năng Point, sau câu lệnh “this.x = x”).

Một hidden classes mới được gọi là “C2” được tạo ra, sự chuyển đổi class được thêm vào “C1” cho biết nếu một thuộc tính “y” được thêm vào một đối tượng Point (đã chứa thuộc tính “x”), thì hidden classes sẽ thay đổi thành “C2”, và hidden classes của đối tượng được cập nhật thành “C2”.

Các chuyển tiếp hidden classes phụ thuộc vào thứ tự thuộc tính được thêm vào một đối tượng. Hãy xem đoạn code dưới đây:

function Point(x, y) {
    this.x = x;
    this.y = y;
}
var p1 = new Point(1, 2);
p1.a = 5;
p1.b = 6;
var p2 = new Point(3, 4);
p2.b = 7;
p2.a = 8;

Bây giờ, bạn sẽ giả định rằng đối với cả p1 và p2 thì các hidden classes và transitions sẽ được sử dụng. Vâng, không thực sự. Đối với “p1”, đầu tiên thuộc tính “a” sẽ được thêm vào và thuộc tính “b”. Tuy nhiên, đối với “p2”,  đầu tiên “b” đang được chỉ định, tiếp theo là “a”. Do đó, “p1” và “p2” kết thúc với các hidden classes khác nhau do kết quả của các transitions khác nhau. Trong những trường hợp này, tốt hơn là nên khởi tạo các thuộc tính động theo cùng thứ tự sao cho các hidden classes có thể được sử dụng lại.

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

Inline caching

V8 tận dụng lợi thế kỹ thuật khác để tối ưu hóa các ngôn ngữ đánh máy được gọi là inline caching. Inline caching dựa trên quan sát rằng các repeated calls lặp lại với cùng một phương pháp có xu hướng xảy ra trên cùng một loại đối tượng. Một giải thích sâu về Inline caching có thể được tìm thấy ở đây.

Chúng ta sẽ tiếp xúc với khái niệm chung về inline caching (trong trường hợp bạn không có thời gian để tìm hiểu sâu hơn).

Làm thế nào nó hoạt động? V8 duy trì một bộ nhớ cache của loại đối tượng đã được truyền như là một tham số trong các calls gần nhất và sử dụng thông tin này để tạo ra một giả định về loại đối tượng sẽ được truyền như một tham số trong tương lai. Nếu V8 có thể tạo ra một giả định tốt về loại đối tượng nó có thể bỏ qua quá trình tìm ra cách truy cập các thuộc tính của đối tượng, và thay vào đó, sử dụng các thông tin được lưu trữ từ các tra cứu trước đó tới đối tượng trong các hidden classes.

Vậy các khái niệm về hidden classes và inline caching có liên quan như thế nào? Bất cứ khi nào một phương thức được gọi trên một đối tượng cụ thể, V8 phải thực hiện một tra cứu đến hidden classes của đối tượng đó để xác định độ offset cho việc truy cập một thuộc tính cụ thể. Sau hai call thành công của cùng phương pháp đến cùng một hidden classes, V8 bỏ qua việc tra cứu hidden classes và đơn giản chỉ thêm offset vào chính con trỏ của đối tượng. Đối với tất cả các call trong tương lai của phương pháp đó,  V8 giả định rằng hidden classes không thay đổi và nhảy trực tiếp vào địa chỉ bộ nhớ cho một thuộc tính cụ thể bằng cách sử dụng các hiệu số được lưu trữ từ các tra cứu trước đó. Điều này làm tăng tốc độ thực hiện.

Đây cũng là lý do tại sao Inline caching quan trọng đến nỗi các đối tượng cùng loại chia sẻ các hidden classes. Nếu bạn tạo hai đối tượng cùng loại và với các hidden classes khác nhau (như chúng ta đã làm trong ví dụ trước đó), V8 sẽ không thể sử dụng bộ nhớ đệm nội tuyến bởi vì mặc dù hai đối tượng cùng loại, các lớp ẩn tương ứng của chúng Gán các hiệu số khác nhau cho thuộc tính của chúng.

Biên soạn machine code

Một khi biểu đồ Hydrogen được tối ưu, Crankshaft giảm nó xuống mức thấp hơn là Lithium. Hầu hết việc thực hiện Lithium là kiến trúc cụ thể. Đăng ký phân bổ sẽ xảy ra ở giai đoạn này.

Cuối cùng, Lithium được biên dịch thành machine code. Sau đó, cái được gọi là OSR: on-stack thay thế. Trước khi chúng tôi bắt đầu biên dịch và tối ưu hoá một phương pháp chạy lâu dài, chúng tôi có thể chạy nó. V8 sẽ không quên những gì nó đã thực hiện và chỉ thực sự bắt đầu lại với phiên bản được tối ưu hóa. Nó sẽ chuyển đổi tất cả những gì chúng ta có (stack, register) để có thể chuyển sang phiên bản được tối ưu hóa ở giữa thực thi. Đây là một nhiệm vụ rất phức tạp, lưu ý rằng trong số các tối ưu hóa khác, V8 đã inlined code ban đầu V8 không phải là engine  duy nhất có khả năng làm việc đó.

Có những biện pháp bảo vệ được gọi là khước từ để thực hiện việc chuyển đổi ngược lại và quay trở lại code không được tối ưu hoá trong trường hợp giả định rằng engine đã thực hiện không còn đúng nữa.

Tổng hợp file rác

Để tổng hợp file rác, V8 sử dụng cách tiếp cận thế hệ tiếp theo bằng việc đánh dấu và quét để làm sạch thế hệ cũ. Giai đoạn đánh dấu là để kết thúc việc thực hiện JavaScript. Để kiểm soát chi phí của GC và làm cho việc thực hiện ổn định hơn, V8 sử dụng đánh dấu thay vì đi bộ toàn bộ đống, cố gắng đánh dấu mọi đối tượng có thể, nó chỉ đánh dầu một phần của hệ thống, sau đó khôi phục lại việc thực hiện bình thường. GC tiếp theo sẽ tiếp tục đi đến các heap trước khi dừng lại. Điều này cho phép tạm dừng rất ngắn so với quá trình thực hiện bình thường. Như đã đề cập ở trên, giai đoạn quét được xử lý bởi các luồng riêng biệt.

Ignition và TurboFan

Với việc phát hành V8 5.9 sớm hơn vào năm 2017, một đường dẫn thực hiện mới đã được giới thiệu. Đường dẫn mới này đạt được những cải tiến về hiệu năng lớn hơn và tiết kiệm đáng kể bộ nhớ trong các ứng dụng JavaScript thực.

Các đường dẫn thực hiện mới được xây dựng trên đầu trang của Ignition, V8’s interpreter, và TurboFan, trình biên dịch tối ưu hóa mới nhất của V8.

Bạn có thể kiểm tra bài đăng blog từ nhóm V8 về chủ đề ở đây.

Kể từ phiên bản 5.9 của V8 ra đời, phiên bản Vende và Crankshaft (công nghệ đã phục vụ V8 từ năm 2010) đã không còn được sử dụng bởi V8 vì việc thực hiện JavaScript vì V8 đã phải vật lộn để theo kịp các tính năng ngôn ngữ JavaScript mới và cac tối ưu hóa cần thiết cho các tính năng này.

Điều này có nghĩa là V8 tổng thể sẽ có kiến trúc đơn giản hơn và có thể duy trì được nhiều kiến trúc hơn nữa.

Những cải tiến này mới chỉ là sự khởi đầu. Ignition và TurboFan mở đường cho những tối ưu hóa tiếp theo sẽ làm tăng hiệu suất của JavaScript và giảm dấu chân của V8 trong cả Chrome và Node.js trong những năm tới.

Cuối cùng, đây là một số mẹo và thủ thuật về cách viết tốt nhất, tối ưu hóa, JavaScript tốt hơn. Nó được bắt nguồn từ nội dung ở trên, tuy nhiên, đây là một bản tóm tắt ngắn gọn hơn.

Làm thế nào để viết JavaScript tối ưu hóa

  1. Thứ tự các thuộc tính của đối tượng: Các thuộc tính đối tượng của bạn được sắp xếp theo thứ tự nhất định để các hidden classes, tối ưu hóa code, có thể được chia sẻ.
  2.  Thuộc tính dynamic: Thêm vào một đối tượng sau khi instantiation sẽ buộc phải thay đổi một hidden classes sẽ làm chậm bất kỳ phương pháp đã được tối ưu hóa cho lớp ẩn trước đó. Thay vào đó, gán tất cả thuộc tính của đối tượng trong hàm tạo của nó.
  3. Các method: code thực hiện cùng một phương pháp lặp đi lặp lại sẽ chạy nhanh hơn code thực hiện nhiều phương pháp khác nhau chỉ một lần (do Inline caching).
  4. Arrays: Tránh các mảng rời rạc mà các phím không phải là các số tăng dần. Mảng rời rạc không có các phần tử bên trong là các hash table. Các yếu tố trong các mảng như vậy dễ truy cập hơn. Ngoài ra, cố gắng tránh phân bổ mảng lớn. Nó tốt hơn để phát triển. Cuối cùng, không xóa các phần tử trong mảng. Nó làm cho các phím thưa thớt.
  5. Tagged values: V8 đại diện cho các đối tượng và số với 32 bit. Nó sử dụng một chút để biết nếu nó là một đối tượng (flag = 1) hoặc một số nguyên (flag = 0) gọi là SMI (SMall Integer) vì 31 bit của nó. Sau đó, nếu một giá trị số lớn hơn 31 bit, V8 sẽ trở thành hộp số, biến nó thành một đôi và tạo ra một đối tượng mới để đưa số vào bên trong. Hãy thử sử dụng 31 bit ký số bất cứ khi nào có thể để tránh các hoạt động boxing vào một đối tượng JS.

Từ thực tiễn công việc của chúng tôi tại SessionStack thực hiện theo những cách này để viết code JavaScript tối ưu hóa cao. Lý do là khi bạn tích hợp SessionStack vào ứng dụng web của mình, nó bắt đầu ghi lại mọi thứ: thay đổi DOM , UI, JavaScript exceptions, stack traces, failed network requests, và debug messages.

Với SessionStack, bạn có thể reply các vấn đề trong ứng dụng web của mình dưới dạng video và xem mọi thứ đã xảy ra với người dùng của bạn. Và tất cả điều này xảy ra mà không ảnh hưởng đến hiệu suất ứng dụng web của bạn.

Có một kế hoạch cho phép bạn bắt đầu miễn phí.

Nguồn: Techtalk via Sessionstack

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

Các CEO hàng đầu nước Mỹ tiết lộ điều cần làm ở tuổi 20 để có sự nghiệp thành công

Nếu bạn muốn điều hành một đế chế kinh doanh một ngày nào đó, bạn cần phải bắt đầu xây dựng một nền tảng sự nghiệp thành công cho chính mình rất sớm.

Dưới đây là chia sẻ về bí quyết thành công từ độ tuổi 20 của các CEO (giám đốc điều hành) đương nhiệm cũng như các cựu CEO của các doanh nghiệp nằm trong Top Fortune 500 tại Mỹ.

CEO Oath Tim Armstrong khuyên các con sống luôn đúng với bản thân và thành thật với người khác.

Các CEO hàng đầu nước Mỹ tiết lộ điều cần làm ở tuổi 20 để có sự nghiệp thành công - Ảnh 1.

Tim Armstrong, CEO của Oath, người phụ trách Yahoo và AOL dưới trướng Verizon. Trước khi làm việc tại Oath và AOL, Armstrong từng là một lãnh đạo cấp cao tại Google. Ảnh: Scott Legato/Getty.

Tim Armstrong luôn đề cao sự thành thật với bản thân và những người xung quanh.

Ông cũng xây dựng một đội ngũ cố vấn từ 5-8 người không làm việc trong công ty để nghe họ chỉ ra những sai lầm và cho ông lời khuyên từ họ. Đó là các ông nhìn nhận một cách trung thực nhất về bản thân và dám đối mặt với những sai lầm để khắc phục ngay lập tức. Cách làm này cũng được ông khuyến khích đội ngũ nhân viên, đặc biệt là nhân viên trẻ làm theo.

John Sculley, cựu CEO và Chủ tịch của Pepsi, nói rằng hãy luôn suy nghĩ giống như một doanh nhân và luôn tìm kiếm một cách tốt hơn để làm việc.

Các CEO hàng đầu nước Mỹ tiết lộ điều cần làm ở tuổi 20 để có sự nghiệp thành công - Ảnh 2.

Ảnh: Stringer/Getty

John Sculley cho biết ông vẫn luôn là một người rất tò mò. Dù làm việc trong các nhà máy đóng chai, đặt lại kệ ở siêu thị, mua bán, nói chuyện với các nhà máy đóng chai khác của Pepsi ông vẫn luôn quan sát, suy nghĩ, đặt câu hỏi “tại sao nó lại được thực hiện theo cách này?”.

“Tôi nghĩ rằng mặc dù tôi không biết nhiều về từ “doanh nhân” vào thời điểm đó, nhưng tôi biết chính xác những đặc điểm mà tôi cần tìm kiếm để trở thành một doanh nhân thực sự giỏi để lãnh đạo công ty”, ông nói. Thực tế, bạn cần có một tư duy ham học hỏi, và luôn tìm kiếm những cách tốt hơn để làm điều gì đó, và bây giờ với công nghệ hiện đại giúp biến mọi thứ thành có thể, bạn càng cần phải tìm ra cách làm thế nào để chúng ta có thể biến mọi thứ thành có thể.

Và trên hết, để làm tốt bất cứ điều gì, tất cả cần bắt đầu với một niềm đam mê, tìm ra cách giải quyết một vấn đề theo cách mà chưa bao giờ được giải quyết trước đó, và chỉ có một nền tảng đạo đức tốt thì mới có thể duy trì được điều đó liên tục.

Drew Houston, CEO Dropbox, người đã xây dựng được công ty trị giá 10 tỷ USD ở độ tuổi 20, cho rằng sẽ không bao giờ là quá sớm để bắt đầu và bạn nên biết mình muốn làm gì trong 5 năm nữa.

Các CEO hàng đầu nước Mỹ tiết lộ điều cần làm ở tuổi 20 để có sự nghiệp thành công - Ảnh 3.

 Ảnh: Business Insider

Drew Houston cho rằng những ai muốn thành công thì nên bắt đầu khởi nghiệp từ sớm và không ngừng tự đặt ra câu hỏi: Một, hai hay năm năm sau mình sẽ học được những gì và làm được những gì? Bởi theo vị CEO trẻ này:

Thứ nhất, không ai sinh ra đã là một CEO. Đây là một vị trí cần phải có nhiều thời gian và trải nghiệm mới đạt được.

Thứ hai, tất cả mọi thứ đều phải học. “Tôi bắt đầu chỉ là một người thiên về mặt kỹ thuật. Tôi không có kinh nghiệm kinh doanh thực sự. Tôi đã phải tìm kiếm trên Amazon các cụm từ “bán hàng”, “tiếp thị” hoặc “chiến lược” và chỉ mua những cuốn sách được đánh giá cao nhất liên quan đến các từ khóa này để đọc”, Drew Houston cho biết.

Drew Houston cũng cho rằng, mọi người nên đặt tầm nhìn cao hơn về những gì muốn làm, nhưng đồng thời cũng phải kiên nhẫn. “Nó giống như chơi nhạc cụ. Bạn sẽ không bỗng chốc trở thành người nổi tiếng hay sẽ không thể cải thiện kỹ năng chỉ trong ngày một ngày hai mà phải mất nhiều năm. Ít nhất là trong năm năm sau, bạn sẽ thực sự ngạc nhiên về mức độ bạn cải thiện của bản thân”, Drew Houston nói.

Sheryl Sandberg, COO (Giám đốc vận hành) của Facebook nói rằng điều quan trọng là phải chấp nhận rủi ro và tìm một công ty có khả năng phát triển như một con tàu tên lửa.

Các CEO hàng đầu nước Mỹ tiết lộ điều cần làm ở tuổi 20 để có sự nghiệp thành công - Ảnh 4.

Ảnh: Richard Drew/AP

Sheryl Sandberg cho rằng, một điều đáng để suy nghĩ là nếu bạn ở độ tuổi 20 và đặc biệt bạn là phụ nữ bạn nên tham gia vào cộng đồng “Lean In”. Hiện cộng đồng này có 33.000 thành viên trên khắp thế giới và mỗi tuần có thêm khoảng 100 người gia nhập. Cộng đồng này sẽ giúp cung cấp cho phụ nữ một tầm nhìn rõ ràng về mục tiêu của họ và để các thành viên hỗ trợ lẫn nhau.

Bản thân Sheryl Sandberg cũng là một thành viên của cộng đồng này và bà cho biết sẽ góp phần hỗ trợ những người phụ nữ khác có thể theo đuổi công việc mà họ yêu thích cũng như tạo cho họ những công việc rõ ràng. Theo bà, với phụ nữ, ước mơ lớn là điều thực sự quan trọng.

Steve Ballmer, cựu CEO Microsoft nói rằng hãy tìm ra một điều gì đó bạn đam mê – điều mà có thể làm cho bạn muốn sống để làm việc.

Các CEO hàng đầu nước Mỹ tiết lộ điều cần làm ở tuổi 20 để có sự nghiệp thành công - Ảnh 5.

 Ảnh: Mike Windle/Getty

Thứ nhất, Steve Ballmer cho rằng điều quan trọng nhất để thành công là tìm ra được đam mê của bản thân. “Con trai tôi nói với tôi điều này: “Bố, có những người sống để làm việc và có những người làm việc để sống. Và tôi tôn trọng cả hai kiểu người điều đó. Nhưng nếu bạn đang cố gắng để có được một sự nghiệp, bạn sẽ có một chút động lực sống để làm việc hơn khi bạn làm việc để sống. Vì vậy, điều quan trọng nhất vẫn là đam mê”, ông nói.

Thứ hai, khi thực hiện một công việc khó khăn, suy nghĩ và tư duy tốt là điều then chốt nhưng cũng cũng cần phải có may mắn. “Tôi biết Microsoft là một công ty tài năng. Chúng tôi có những người rất tài năng. Tôi chắc chắn nhận thấy tôi đã làm việc chăm chỉ và có một số ý tưởng tốt, cũng như Bill Gates và Paul Allen. Nhưng nếu ai nói rằng may mắn không liên quan đến thành công của chúng tôi thì tôi phủ nhận. Rõ ràng chúng tôi đã gặp một số may mắn”, ông cho biết thêm.

Dan Schulman, CEO PayPal nói rằng không ai thay thế cho bạn khi công việc khó khăn nhưng bạn sẽ thành công hơn nếu có các đồng nghiệp luôn ở bên cạnh và được bạn tán dương về thành tích của họ.

Các CEO hàng đầu nước Mỹ tiết lộ điều cần làm ở tuổi 20 để có sự nghiệp thành công - Ảnh 6.

 Ảnh: AP

Dan Schulman cho biết khi ông khởi đầu sự nghiệp tại AT & T, gia đình ông đã gặp một bi kịch. Khi đó chị gái ông mất và ông vẫn phải dẫn dắt một đội ngũ nhân viên lớn. Ông đã phải mất một khoảng thời gian rất khó khăn để vượt qua. Tuy nhiên, khi tôi trở lại, ông nhận ra rằng nhân viên của ông đã thực sự luôn ở bên cạnh ông, và ông nhận ra rằng những gì mà cả đội ngũ đã hoàn thành là hoàn toàn dựa vào những gì họ đã làm. Ngay sau đó, ông đã không ngần ngại thưởng lớn cho họ.

“Tôi nghĩ rằng những gì tôi học được ở đó là tạo ra sự tín nhiệm để ngày càng thu hút những người khác gia nhập vào đội ngũ của mình bởi vì họ thực sự muốn là một phần của đội và họ biết rằng đó là một đội ngũ sẽ làm việc cùng nhau – không một ai ra đi. Để cố gắng lấy tín được sự tín nhiệm của người khác, các nhà lãnh đạo có nhiều cách, nhưng quan trọng là phải có tầm nhìn thực tế và tạo được niềm hy vọng. Nếu bạn có những nhân viên tuyệt vời xung quanh bạn và họ biết rằng những gì họ làm sẽ được công nhận, thì bạn có thể tạo nên một tập thể cực kỳ mạnh mẽ”, ông nói.

3 sai lầm các iOS Developers thường mắc phải

3 sai lầm các iOS Developers thường mắc phải

Lập trình ra một  iOS app vốn là điều không hề dễ dàng, vì thế cũng dễ hiểu các developer luôn muốn rút gọn các bước để có thể hoàn thành chúng một cách nhanh chóng. Nhưng một app thành công thì sẽ tồn tại một thời gian dài – nói cách khác, các developer vẫn phải fix bug, cải thiện tính năng và code nhiều nữa.

Trong bài viết này, tôi sẽ nói về 3 điều mà các iOS developer nên biết để giúp cho quá trình được gọn gàng và nhanh chóng hơn.

200+ cơ hội code iOS hấp dẫn đang chờ bạn gõ cửa

Đừng xem thường Constants (Hằng số)

Khá nhiều người tin rằng variables luôn tốt hơn constants bởi sự linh hoạt của nó, thế nhưng nếu có cơ hội thì bạn hãy ưu tiên sử dụng constants trước. Tại sao lại thế? Đó là bởi một số lợi ích của nó:

Dễ đọc

Một trong những điều tuyệt với nhất của constants là chúng rất dễ đọc. Hãy thử với một ví dụ sau: bạn cần phải viết một app về kinh doanh. Bạn cần phải thêm tỉ lệ mức thuế ở 8.75%, nhưng khi các developer vào xem thì họ sẽ không hiểu con số trên là gì.

Giả sử có một Developer tên là Trung, Trung tham gia vào team của bạn và đọc code của app. Do ở nước của Trung không hề có khái niệm gì về thuế nên Trung chả hiểu còn số 8.75% có vai trò như thế nào.

Do đó nếu bạn để giá trị của thuế là một variable  thì rất có thể Trung do vô tình không biết và tự ý sửa thì nó có khả năng gây ra hậu quả nghiêm trọng. Chỉ cần thay đổi keyword từ  var thành let thì compiler sẽ thông báo cho Trung biết rằng giá trị 8.75% là không thay đổi được và anh sẽ hiểu rằng đó là chủ ý của bạn khi không muốn nó bị đụng vào.

Giá trị tham khảo

let khá tiện lợi khi cho phép bạn ám chỉ một giá trị nhất định. Thí dụ như bạn muốn sơn một màu bất kì. Thay vì cứ phải Copy-paste lại từng cái thì với constant, bạn chỉ việc đơn giản là nói ra màu mình muốn sơn là gì.

Nhờ đó mà khi bạn muốn thay màu sơn, thì chỉ cần thay đổi giá trị của constant và chúng sẽ tự động cập nhật.

Class hay Struct Instantiation

Khi bạn tạo ra một singleton, thì ta cũng phải đụng tới class. Thông thường, bạn sẽ phải khai báo  static let trong class declaration. Sau đó bạn phải đặt tên cho constant và chỉ định nó tới một class và dùng xuyên suốt app.

Mặt khác, nếu bạn muốn tạo ra một class nhanh chóng, với ViewController.swift, bạn sẽ tạo ra constant và chỉ định nó tới class bạn muốn, với một giá trị tham khảo, quá trình trên sẽ diễn ra nhanh chóng.

Có thể thấy, sử dụng constant cho ta rất nhiều lợi ích. Chúng giúp code dễ đọc hơn, để lưu trữ các giá trị bất biến, và không hề vô dụng như bạn đã nghỉ.

Đừng mở Optionals sai cách

Optionals là những tính năng rất mạnh mẽ của Swift. Chúng đều là những types như  int và String, được chú thích bởi dấu chấm hỏi sau type declaration. Nếu bạn muốn khai báo một variable là optional string, bạn sẽ viết như sau:

var someVariable: String?

Compiler lúc này sẽ tự hiểu rằng hoặc nó có giá trị hoặc là không. String? và String là hoàn toàn khác nhau.

Optionals cũng như những hộp quà vậy, chúng có thể chứa những món quà giá trị hoặc không có gì cả. Để biết được chúng có gì ta sẽ phải mở những hộp quà đó ra.  

Cách sai

“Cố xé” nó ra

Hành động đó còn được gọi là Bang Operator. Đừng có xài nó! Việc cố mở một variables chẳng bao là ý tưởng tốt cả. Nếu giá trị của một value bạn đang cố mở là nil (không có giá trị), thì ngay lập tức app sẽ crash. Hãy thử nhìn vào dòng code sau đây:

var someVariable: String?
var somethingElse: String = "hello"
 
func setupApp() {
    self.somethingElse = self.someVariable!
}

Trong trường hợp trên, app sẽ crash bởi ta chưa hề defined được một giá trị cho  someVariable, và ta cũng đang muốn chỉ định nó đến một variable của một loại  String. Như vậy nó khiến cho optionals bị mất đi ý nghĩa bởi nó vốn là để giúp chúng ta không bị những trường hợp này.

Vậy chúng ta hãy nhìn vào cách làm đúng trong tình huống trên:

Cách đúng

Optional Binding
Đây là một trong những cách thức phổ biến nhất dành cho optionals. Với cách này, bạn chỉ cần chỉ định một giá trị optional đến constant bằng `if`. Nếu optional có thể mở thì compiler se được đóng, và lúc đó bạn có thể dùng constant đã được tạo ra. Còn nếu không thì tức là bạn đã ở trong trường hợp `else` và sẽ chả có gì xảy ra.

 

var someVariable: String?
var somethingElse: String = "hello"
 
func setupApp() {
    if let theThing = someVariable {
        self.somethingElse = self.someVariable!
    } else {
        print("error")
    }
}

Dựa theo ví dụ lúc nãy, nhưng với optional binding. Thay vì bị crash thì compiler chỉ thông báo là “error” hay lỗi.

Optional Chaining

Một cách thông dụng khác là Optional Chaining. Đây là một phương pháp khá hay để tránh việc optional không có giá trị mà lại khá ngắn với chỉ một dòng code. Bởi khi đó nó sẽ ngay lập tức ngừng execute.

 

var someClass: SomeClass? = SomeClass()
var somethingElse: String?
 
func setupApp() {
    self.somethingElse = someClass?.createString()
}

Hiểu một cách đơn giản thì nếu someClass có giá trị là nil thì cả dòng code đó sẽ bị bỏ qua và giá trị của  somethingElse sẽ là nil. Còn nếu có giá trị thật thì nó như bên optional binding, sẽ được chỉ đạo đến variable  somethingElse và tất nhiên là app không bị crash.

Nil Coalescing

Tương tự như Optional Chaining bởi nó khá ngắn gọn nhưng bạn phải cung cấp default  hoặc cách xử lí cho tình huống “else”:

var someVariable: String?
var somethingElse: String = "hello"
 
func setupApp() {
    self.somethingElse = someVariable ?? "error"
}

 

Nhìn thì có vẻ khá thần bí nhưng nó chỉ đơn giản là nếu statement  ở bên trái có một giá trị, thì sẽ được dùng. Còn nếu là nil thì default statement sẽ được dùng. Cần lưu ý là statement bên phải không được là nil hay optional.

Đừng bỏ qua cấu trúc của code

Một lỗi thường gặp của các developer là không quan tâm bảo đảm sao cho cấu trúc code được bền vững, gọn gàng và dễ bảo trì. Có rất nhiều cứ cố nhồi nhét code vào  ViewController classes, Khiến cho việc thay đổi cũng như debug trở nên khó khăn hơn.

Vì thế mà bạn cần phải có cách thiết kế cấu trúc code thật tốt và luôn theo kĩ từng bước.

Chúng ta có 2 model thường được các iOS developer dùng, đó là:

MVC (Model-View-Controller)

MVC sẽ chia code của bạn thành 3 phần: model, view, controller

  • Model: chính là data của app. Nó bao gồm các reusable structures và class chỉ dành cho data của app. nó không hề có ảnh hưởng hay liên quan tới view hay cách hiển thị thông tin tới người dùng.
  • View: chịu trách nhiệm cho việc hiển thị data cho user và cả user interaction. Không hề liên quan tới việc xử lí data hoặc một số view đặc biệt, nó chỉ là reusable class có thể được dùng nhiều lần mà không cần phải lặp đi lặp lại code.
  • Controller: là sếp sòng. Nó vận chuyển data tới model, rùi gửi tới view để hiển thị lên cho người dùng. ViewController.swift chính là một controller, nó tiếp nhận input và sửa model tùy theo yêu cầu.

Có khá nhiều phiên bản khác nhau như  MVVM MVP. Tuy nhiên cách thức hoạt động thì vẫn tương tự nhau.

Hãy thử tìm hểu một phương pháp cấu trúc khác cũng thông dụng không kém, nó là:

Singletons

Singleton là một instance đơn của một class luôn hiện diện mọi lúc trong bộ nhớ. Vậy khi bạn lập trình ra một app có kết nối với một database. Bạn cần có một nơi để lưu trữ toàn bộ data service connections. Đây chính là lúc singletons tỏa sáng, đoạn code dưới đây sẽ cho bạn cách viết ra một singleton:

 

// Declaration
class DataService {
    static var shared = DataService()
     
    func createUser() {
    }
}
 
// Call-site
DataService.shared.createUser()

Nếu bạn theo đúng những bước trên, app của bạn sẽ dễ bảo trì cũng như viết debug cũng trở nên dễ thở hơn rất nhiều.

Lời kết

Qua bài viết này, chúng ta đã thấy rõ 3 sai lầm các iOS app developer thường mắc phải. Chúng trông có vẻ là cách thức tốt nhưng thực chất chỉ làm mọi thứ rối rắm hơn.

Hãy luôn nhớ rằng, lập trình một app chỉ là một phần của project. Bạn còn phải fix bug, thêm tính năng và chia sẻ code với các developer khác. Hãy luôn dùng constants, đừng áp dụng optional sai và có một model cấu trúc rõ ràng, lập trình app và bảo trì nó sẽ trở nên dễ dàng hơn rất nhiều.

Nguồn: Topdev via Tutsplus

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

Làm sao giải quyết nỗi đau của các nhà tuyển dụng IT?

Làm sao giải quyết nỗi đau của các nhà tuyển dụng IT

Tôi có vài cơ hội được trò chuyện cùng anh Nguyễn Hữu Bình – CEO của Applancer, đơn vị chủ quản Website tuyển dụng lập trình viên TopDev.vn. Mặc dù xuất phát điểm là sinh viên khoa Kế toán Kiểm Toán – trường đại học kinh tế, nhưng niềm đam mê lập trình quá lớn nên phần lớn thời gian anh dành cho nó, và gắn bó với nó đến nay cũng hơn 15 năm. Ấn tượng của tôi về anh là người cởi mở, nhiệt huyết, đam mê và có nhiều trăn trở với ngành lập trình Việt Nam hiện nay.

Với kinh nghiệm hơn 15 năm hoạt động trong ngành lập trình, kinh qua rất nhiều vị trí từ cấp thấp cho tới quản lý cấp cao, anh Bình hiểu khá rõ về góc nhìn của cả 2 đối tượng là lập trình viên cũng như nhà tuyển dụng lập trình.

Theo anh, các nhà tuyển dụng trên thị trường hiện đang làm gì để thu hút các nhân tài về phía công ty của mình?

Một tech event chia sẻ công nghệ đến cộng đồng lập trình là một trong các cách employer branding tốt

Hầu hết các công ty công nghệ hiện nay luôn có xu hướng cạnh tranh nhau về mặt lương bổng để tìm kiếm và mời các lập trình viên giỏi nhất đầu quân vào tổ chức của mình. Họ sẵn sàng chi trả mức lương hấp dẫn, thậm chí là “phá giá” cốt chỉ để thu hút lập trình viên tài năng. Một số các công ty công nghệ sẵn lòng trả mức lương cao hơn so với thị trường và cam kết tăng tới 20% lương cho các ứng viên có 2 năm kinh nghiệm đi kèm với đó là các phúc lợi ưu đãi khác. Điều này cũng xuất phát từ thực tế là chúng ta đang cần đến 350.000 nhân lực IT đến cuối năm 2018 nhưng thị trường hiện tại chỉ mới đáp ứng được 200.000 kĩ sư.

Nhưng, có một vấn đề là cũng như trong thương mại điện tử cạnh tranh về giá là con đường dẫn tới bế tắc.

Anh có thể nói rõ hơn về điểm này? Giải pháp nào sẽ giúp cho các nhà tuyển dụng tránh đi vào lối mòn?

Có một sai lầm mà đa phần nhà tuyển dụng thường mắc phải là không quan tâm tới Employer Branding. Hãy tưởng tượng nó như là một trò chơi câu cá vậy, bạn phải thả thính để thu hút sự chú ý của đàn cá, và sau đó mới thả mồi có móc câu xuống đám thính. Employer Branding chính là việc thả thính, gây sự chú ý, còn việc bạn đăng tuyển chính là hành động thả mồi câu xuống, Employer Branding sẽ giúp cho việc đăng tuyển của bạn đạt hiệu quả.

Nhưng sự thật lương và các phúc lợi xã hội có phải là quan tâm hàng đầu của lập trình viên? Và đâu là những thứ thật sự hấp dẫn các lập trình viên?

Câu trả lời là Không. Trong quá khứ, tôi từng nhiều lần nhảy việc, và điều đầu tiên tôi nghĩ đến khi lựa chọn công ty là công ty có bài toán phù hợp với chuyên môn và sở trường của mình, sau đó đến việc tôi có thể học hỏi hoặc nhận được sự giúp đỡ của chuyên gia từ công ty đó, và cuối cùng mới cân nhắc mức lương và đãi ngộ. Tôi tiếp cận được nhà tuyển dụng thông qua việc họ cử chuyên gia đến chia sẻ tại các sự kiện, họ đưa ra hết mọi thứ liên quan đến công nghệ họ đang theo đuổi.

Điều này cũng hoàn toàn trùng khớp với Báo cáo Lương, Phúc lợi và Xu hướng ngành IT quý 1,2/2017 mà TopDev đã khảo sát trên 5500 ứng viên, 150 nhà tuyển dụng và hơn 70000 dữ liệu việc làm. Theo đó, bài toán giữ chân nhân tài của các doanh nghiệp vẫn còn lắm khó khăn, khi mà có tới 42% lập trình được hỏi muốn nhảy việc: 35% không hài lòng với mức lương hiện tại, trong khi phần còn lại thì không hài lòng với phúc lợi của công ty và sự thiếu hụt những chính sách đào tạo giúp họ có thể nâng cao trình độ chuyên môn.

Từ đây, tôi thấy được cơ hội của mình và cũng không e ngại khi ứng tuyển vì tôi cảm nhận được tinh thần cởi mở của họ, họ cũng xuất hiện khắp nơi trên các công đồng công nghệ, các senior của họ len lỏi khắp nơi bằng các bài blog và các câu trả lời về kỹ thuật cho những lập trình viên đang gặp vấn đề. Đó cũng là một trong những case study hợp khá thành công về employer branding.

Anh có thể cho biết thêm một số cách các nhà tuyển dụng có thể lấy điểm trong mắt ứng viên?

Sự thật là đối với lập trình viên, lương và đãi ngộ chưa phải là yếu tố hàng đầu ảnh hưởng tới quyết định đầu quân vào 1 công ty (tất nhiên nó vẫn là một trong các yếu tố quan trọng) để có thể thu hút được ứng viên, cần tạo niềm tin cho ứng viên, ngay cả khi họ chưa có ý định nghỉ việc… để tuyển được ứng viên tài năng nhà tuyển dụng cần thực hiện một chiến lược tuyển dụng dài hạn, để khi họ muốn nhảy việc, thì công ty bạn chính là nơi họ nghĩ đến đầu tiên. Đảm bảo được nguồn nhân sự, bạn sẽ vẫn phải tốn chi phí nhất định, nhưng rõ ràng nó sẽ phát huy hiệu quả hơn là đợi thiếu người rồi mới vội vàng đăng tuyển.

Đa phần các lập trình viên quan tâm nhiều đến chính sách, môi trường công nghệ và văn hoá công ty

Vậy anh có thể tóm tắt những vấn đề bất cập của việc tuyển dụng trong ngành lập trình là gì?

Hiện nay vấn đề nhân sự trong ngành lập trình vẫn còn tồn tại bất cập khi mà lập trình viên chưa có nhiều thông tin về công nghệ, sản phẩm, văn hóa của doanh nghiệp, trong khi đó doanh nghiệp thì khi thiếu người mới đăng tuyển và than trời vì thiếu nhân lực, còn sinh viên ra trường thiếu việc làm”. Sai lầm lớn nhất khiến nhà tuyển dụng không tìm được ứng viên tài năng, cốt lõi nằm ở khâu xây dựng thương hiệu nhà tuyển dụngEmployer Branding.

Chính vì vậy, chúng tôi không chỉ đơn thuần là việc kết nối giữa nhà tuyển dụng với lập trình viên tài năng mà cá nhân tôi còn mong muốn cung cấp một giải pháp tuyển dụng toàn diện cho doanh nghiệp, hỗ trợ doanh nghiệp tối đa, nhanh chóng tìm được các ứng viên phù hợp. Hiện nay, chúng tôi đang là công ty đầu tiên sử dụng các gói Search CV trong lĩnh vực IT.  Việc cung cấp các gói Search CV phù hợp với nhu cầu tuyển dụng của doanh nghiệp, đi kèm với đó là các hỗ trợ : tư vấn, hỗ trợ dài hạn, Employer Branding. Có thể sẽ phải mất công liên hệ, hỏi thăm, chia sẻ và chăm sóc mối quan hệ với ứng viên tiềm năng một thời gian thì mới có kết quả. Tuy nhiên, trong tương lai đây là một chiến lược đảm bảo nguồn nhân lực IT dài hạn ngay từ hôm nay, sau này bạn sẽ phải tốn nhiều chi phí và công sức hơn trong việc cạnh tranh ứng viên với các doanh nghiệp khác.

Cảm ơn anh về những chia sẻ của mình. Cũng xin chúc mừng TopDev bước vào năm thứ 3, Hy vọng cộng đồng lập trình Topdev sẽ luôn phát triển vững mạnh.

“AI giờ đã được bình chọn là xu hướng của tương lai, sao developer mình còn chưa tận dụng điều đó?”

“AI giờ đã được bình chọn là xu hướng của tương lai, sao developer mình còn chưa tận dụng điều đó?”

AI – một trong những câu chuyện được bàn tán khắp các mặt báo từ đầu 2017 đến nay, đã chính thức trở thành xu hướng công nghệ không thể “tránh” được. TopDev đã có buổi gặp gỡ xoay quanh “hành trang” AI mà lập trình viên cần có với anh Nguyễn Thiên Bảo – Tiến sỹ Khoa học máy tính. Với kinh nghiệm hơn 10 năm làm việc tại nước ngoài, sự nghiệp trên đà thăng tiến nhưng anh vẫn quyết định trở về Việt Nam làm việc, giảng dạy, và hiện đang đảm nhiệm chức vụ Giám đốc của Công ty HBB Solutions, một trong những startups đang nắm trong tay những dịch vụ AI (Artificial Intelligence – Trí tuệ nhân tạo)  đầu tiên trên thị trường.

1/ Anh có thể giới thiệu một chút về HBB Solutions, về những định hướng, hình ảnh chung của công ty?

Công ty HBB Solutions được thành lập hơn một năm, vào giữa tháng 8 năm 2016. HBB chuyên cung cấp các dịch vụ về thiết kế Web, Mobile app, hỗ trợ khách hàng trong những dịch vụ làm content, quản trị website, marketing, v.v… Nổi bật của HBB chính là việc tích hợp Trí tuệ nhân tạo vào các sản phẩm Web, Mobile app của công ty. Như các trang mạng đã đưa tin thì Trí tuệ nhân tạo đang trở thành từ khóa cực nóng và được dự đoán là xu hướng không thể tránh khỏi của cuộc cách mạng công nghiệp lần thứ 4. Tuy nhiên, việc ứng dụng Trí tuệ nhân tạo còn khá xa lạ tại Việt Nam.

Điều đó thể hiện ở việc đầu tư Trí tuệ nhân tạo vào các dự án tại Việt Nam còn rất hạn chế. E ngại lớn nhất từ phía các nhà đầu tư là việc hiểu rõ về công nghệ để có thể áp dụng vào các dự án. Đó cũng chính là lý do mà HBB Solutions muốn phát triển một vườn ươm về AI để giúp đỡ các nhà đầu tư trong và ngoài nước cũng như các công ty khởi nghiệp tiềm năng tại Việt Nam. Những trợ lý ảo  mà HBB Solutions cung cấp cho khách hàng có thể làm việc  toàn thời gian 24/7, giúp tăng năng suất lao động và giảm thiểu chi phí cho doanh nghiệp cũng như xóa bỏ rào cản ngôn ngữ trong việc giúp đỡ tìm hiểu nhu cầu của từng vị khách một cách toàn diện, hiệu quả, mang lại trải nghiệm khác biệt dành cho khách hàng.

2/ Hiện tại Artificial Intelligence (AI) là một trend khá hot và các bạn lập trình viên đang muốn biết cách để học và phát triển kĩ năng của mình về AI, anh có thể chia sẻ thêm về phương hướng cho các bạn ấy không?

Theo tạp chí Forbes, dẫn đầu những xu hướng ảnh hưởng đến bộ mặt IT trong tương lai chính là AI và tiếp sau đó là Machine Learning, Big Data, IoT, Blockchain. Ở nhiều nước phát triển, việc AI được áp dụng trong công việc đã dần trở nên khá bình thường. Nhưng ở Việt Nam, tiềm năng của AI thì nhiều người nhìn thấy, nhưng việc ứng dụng AI thì lại khá hiếm hoi. Ngay cả những ông lớn như trong ngành IT tại thị trường Việt Nam như TMA, FPT, … hầu như cũng tập trung chủ yếu vào outsourcing. Việc chuyên về AI, tạo ra những ứng dụng AI thực sự thì hiếm người thực hiện. Gần đây, để bắt kịp xu thế, tập đoàn Viettel đã bắt đầu nghiên cứu về AI, sau đó FPT cũng thiết lập bộ phận nghiên cứu Công nghệ 4.0.

Nhìn lại, lập trình viên Việt Nam thực sự giỏi, cần cù, siêng năng và tư duy toán học rất cao nhưng lại không phát huy được thế mạnh đó. Các bạn làm những vị trí mà tất cả các lập trình viên khác trên thế giới đều có thể làm, dẫn đến việc cạnh tranh gay gắt trong thời kỳ toàn cầu hóa. Ngược lại, AI giờ đã được bình chọn là xu hướng của tương lai thì sao mình lại không tận dụng?

Với các bạn Lập trình viên, khi đến với AI các bạn sẽ có nhiều điều lợi ích. Thứ nhất, các bạn có thể cải thiện cuộc sống vì mức lương lập trình phát triển AI rất cao. Thứ hai, vởi việc ứng dụng AI, cuộc sống của chúng ta sẽ có nhiều tiện ích hơn, giúp cho các doanh nghiệp có cơ hội cạnh tranh cao hơn. Thứ ba, về chuyên môn, các bạn sẽ thực sự bắt kịp, và hòa nhập nền công nghệ tiên tiến của thế giới

Hãy tìm tòi, nghiên cứu những bài viết về AI, luyện tập những thuật toán, công thức viết code từ cơ bản đến nâng cao. Tích cực học thêm tiếng Anh chuyên ngành để có thể tìm hiểu được các tài liệu nước ngoài. Những khóa học online của các trường đại học về công nghệ có uy tín hiện nay trên thế giời là những địa chỉ đáng tin cậy cho các bạn.

3/ Anh có thể nói thêm về một vài dự án tâm đắc của công ty cũng như bài học rút ra được từ những project đó?

Do một vài lý do, xin phép không thể tiết lộ thông tin về dự án cho đến khi nào khách hàng phát hành sản phẩm của họ. Vì vậy mình chỉ có thể chia sẻ một cách khái quát. Chẳng hạn trước đây bạn phải tìm kiếm một sản phẩm nào đó bằng tay, thì giờ đây nhờ kỹ thuật nhận dạng lời nói,  bạn có thể dễ dàng và nhanh chóng tìm kiếm tự động các sản phẩm vừa ý. Đây chính là tính năng mới mà HBB Solutions đang áp dụng vào lĩnh vực bất động sản. Ví dụ như trong trường hợp bạn muốn tìm kiếm một căn nhà nào đó, phần mềm này cũng sẽ thu lại lời nói của bạn, tự động giúp bạn dò tìm bản đồ và chỉ đường cho bạn.

Một ứng dụng khác tương tự như Grab hay Uber, tận dụng tính năng kinh tế chia sẻ, tức là việc kết nối trực tiếp giữa người dùng và người thực hiện công việc việc mà không phải qua một phía trung gian, nhờ đó người dùng không phải trả tiền nhiều mà người trực tiếp thực hiện dịch vụ sẽ nhận được mức thù lao cao hơn. HBB Solutions cũng có một ứng dụng thông minh tương tự, dùng để kết nối giữa người chủ nhà và người giúp việc, một dịch vụ mà bạn có thể tuyển người giúp việc ở bất cứ nơi nào. HBB Solutions đã tích hợp kỹ thuật nhận diện khuôn mặt vào sản phẩm nhằm hỗ trợ xác thực nhân thân của người giúp việc một cách thông minh và chính xác.

Kỹ thuật nhận diện khuôn mặt (Face Recognition) được xây dựng bằng cách sử dụng các thuật toán trong Thị giác máy tính (Computer Vision), chạy trên nền tảng Azure của Microsoft, giúp người giúp việc cũng như chủ nhà dễ dàng xác minh thông tin của nhau. Bất ngờ hơn trong lúc HBB đang triển khai thực hiện dự án này, thì vào tháng 07/2017, Microsoft đã cho ra đời bộ công cụ CNTK (Computational Network Toolkit), phục vụ cho việc nghiên cứu trí tuệ nhân tạo. Đặc biệt, CNTK được khẳng định là rất tiềm năng cho các ứng dụng như Uber để xác minh danh tính của tài xế. Điều này chứng tỏ HBB Solutions đã nhanh chóng bắt kịp xu thế ứng dụng các công nghệ mới trên thế giới.

4/ Trong quá trình ứng dụng AI thì không biết mình có gặp những khó khăn nào không?

Làm sao có thể đưa ứng dụng trí tuệ nhân tạo đến gần hơn với các doanh nghiệp là một trăn trở khó khăn lớn nhất. Khắp nơi trên thế giới, AI đã chứng tỏ vị thế và sức mạnh trong mọi lĩnh vực, nhưng ở Việt Nam, chúng ta vẫn chậm chân với ứng dụng này do chưa hiểu rõ về AI, về sức mạnh và hiệu quả mà AI có thể mang lại trong kinh doanh. Do vậy, HBB Solutions phải từng bước giúp mọi người thấy rõ và định hướng thị trường, từ đó mới mong có thể góp phần phát triển ứng dụng AI trong sản xuất kinh doanh.

Khó khăn trước mắt là quá trình tuyển dụng. HBB Solutions cần các bạn có kiến thức cơ bản về AI với khả năng học hỏi cao thì mới bắt kịp tiến độ dự án. Khi là thành viên của HBB Solutions, các bạn phải có sự sáng tạo vì ứng dụng AI vào thực tế là một đề tài còn rất mới. Với những vấn đề như Nhận diện khuôn mặt (Face recognition), Nhận dạng giọng nói (Speech recognition), hệ thống chatbot tự động với các thuật toán phức tạp tùy thuộc quy mô, các bạn sẽ phải tìm hiểu và nghiên cứu để tìm ra giải pháp. Vì vậy, với công ty, quá trình tuyển dụng, tìm kiếm những tài năng phù hợp là một vấn đề lớn.

5/ Khi ứng tuyển vào các vị trí liên quan đến AI, các bạn cần phải có kiến thức về AI, bằng cấp hay background như thế nào anh?

Thật ra, khi nói về đào tạo AI ở Việt Nam, hiện tại mới chỉ đếm trên đầu ngón tay với một số trường như ĐH Bách Khoa, ĐH Khoa học Tự nhiên, ĐH Công nghệ Thông tin; ở phía Bắc có ĐH Công nghệ, ĐH Bách Khoa, … nhưng việc giảng dạy và đạo tạo mới chỉ dừng ở giới thiệu về Trí tuệ nhân tạo chứ chưa thực sự nhấn mạnh đến việc ứng dụng. Nhìn chung, các trường đa phần đào tạo để các bạn để trở thành lập trình viên, số ít còn lại mới về nghiên cứu, tìm tòi, trong khi AI lại thiên về R&D hơn.

Điều này đòi hỏi các bạn phải thật sự có niềm đam mê với AI thì mới có thể đi cùng với bọn mình. HBB Solutions cũng xác định các bạn hầu hết chưa hề có kinh nghiệm làm các dự án về AI, nên công ty chỉ đánh giá kiến thức nền chung và khả năng suy luận logic. Phần này sẽ được kiểm tra và đánh giá qua quá trình phỏng vấn. Tất nhiên sau một thời gian làm việc tại công ty, cũng có một vài bạn thấy không phù hợp với AI nên đã chuyển sang công vị trí, kéo theo công tác tuyển dụng diễn ra liên tục, thường xuyên. Nói chung, để làm được AI, các bạn cần phải rất vững thuật toán và suy luận logic; còn về ngôn ngữ lập trình thì chỉ cần 3 đến 6 tháng là các bạn đã có thể nắm bắt.

6/ Vậy không biết văn hóa làm việc của HBB Solutions như thế nào? Khi làm về AI, ắt hẳn sẽ gặp trường hợp khối lượng công việc rất nhiều, không biết công ty mình có những chính sách như thế nào?

Công ty tạo điều kiện thuận lợi, thoải mái nhất cho các bạn tự do và sáng tạo nhằm nâng cao tính hiệu quả trong công việc. Vì vậy, công ty theo hướng “Tây hoá” môi trường làm việc như: thoải mái không đồng phục, cafe, trái cây mỗi ngày vào buổi trưa để các bạn xả stress, tán gẫu, trao đổi với nhau về công việc lẫn cuộc sống. Các bạn có một môi trường làm việc năng động, trẻ trung. Ngoài ra còn có những hoạt động vui chơi cuối tuần, teambuilding. Công ty thường xuyên tổ chức buổi sinh nhật chung để mọi người thắt chặt mối quan hệ hơn.

Điểm đặc biệt là HBB Solutions hạn chế OT (tăng ca) và không khuyến khích các bạn OT thường, giúp các bạn có thêm thời gian tự do làm những việc khác.
Môi trường làm việc thoải mái cũng đến từ mong muốn đồng hành lâu dài cùng các bạn, cũng như thúc đẩy sự sáng tạo trong công việc. Đến công sở với tâm thế thoải mái như đi café với bạn bè, không hề áp lực. Tuy thoải mái nhưng deadline thì phải đúng hẹn với khách hàng. Các leader, quản lý dự án, thậm chí cả CEO luôn hổ trợ, trao đổi, và theo dõi sát sao tiến độ để đảm bảo tính hiệu quả của công việc.

7/ Anh có thể chia sẻ thêm về định hướng tương lai của HBB Solutions không?

Tương tự như câu slogan “Better Technology, Better Life”, HBB Solutions đã và đang cố gắng tạo ra những dịch vụ tốt nhất để phục vụ cho khách hàng. Với mục tiêu có thể đưa AI ứng dụng vào cuộc sống không chỉ trong nước mà còn cả khu vực và trên thế giới. Việc ứng dụng AI còn khá mới mẻ đối với thị trường Việt nam, và HBB Solutions hiện vẫn là người đi những bước đầu tiên với nỗ lực phát gây dựng và phát triển tiềm lực AI nước nhà.

Tuy nhiên chắc chắn trong vài năm tới, thị trường Việt Nam sẽ bắt đầu xuất hiện các đối thủ cạnh tranh. Công ty cần phải phải tận dụng thế mạnh của người tiên phong và khẳng định vị trí của mình bằng cách làm cho 100% khách hàng dùng dịch vụ của mình phải hài lòng. Nhờ đó, khi nhắc đến sản phẩm có mang tính AI, các đối tác trong và ngoài nước, không chỉ Việt Nam mà ngay cả Đông Nam Á, cũng sẽ nhắc đến HBB Solutions như một phản xạ tự nhiên.

Muốn như vậy, công ty rất cần nguồn nhân lực chất lượng hiểu biết về công nghệ thông tin và có đam mê với AI. Để làm việc đó, HBB Solutions sẽ kết hợp với các trường Đại học trong và ngoài nước, thành lập các trung tâm đào tạo nghiên cứu chuyên về AI, Machine Learning, …, tổ chức các lớp đào tạo ngắn hạn, mời các giáo sư, CEOs nhiều kinh nghiệm đến trao đổi, chia sẻ. Những hoạt động này trước mắt sẽ tạo nguồn nhân lực nhằm phục vụ cho công ty, sau đó về lâu dài là nhằm xây dựng cộng đồng AI lớn mạnh tại Việt Nam.

8/ Được biết HBB Solutions là startup, không biết trong quá trình khởi nghiệp, anh có bài học nào muốn chia sẻ đến người đọc?

Bài học đầu tiên đó là nhân lực. Mình phải xây dựng đội ngũ nhân lực có trình độ “cứng” và có kinh nghiệm. Công ty thời gian đầu phải dành thời gian tuyển và đào tạo các bạn Leader, Manager cho các bộ phận khác nhau như Marketing, Sale, Dev, v.v… Đây là quá trình rất khó khăn vì nhiều bạn có kinh nghiệm, và rất giỏi nhưng lại không phù hợp với văn hóa công ty, không phù hợp với mục tiêu đề ra là sản phẩm phải có ứng dụng AI. Vấn đề khác nữa là về mức lương. Vì là công ty start-up nên HBB Solutions không thể nào đáp ứng mức lương cao. Trong khi đó những bạn trẻ ngành công nghệ thông tin lại hay thay đổi, mức lương tăng theo cao nên công ty phải cân nhắc rất kĩ và đòi hỏi cao theo yêu cầu.

Bài học thứ tiếp theo là quy trình. Khi công ty phát triển, sẽ có rất nhiều quy trình cần đưa ra, áp dụng và liên tục update để phù hợp với yêu cầu của khách hàng. Mỗi yêu cầu của khách hàng là những đặc tính rất riêng trong kinh doanh của họ. Do vậy, mọi quy trình xử lý đều phải kĩ lưỡng và chi li, những thuật toán phải chính xác đến từng chi tiết. Với việc lấy phương châm “Better Technology – Better Life” làm kim chỉ nam, HBB Solutions luôn phải tự làm khó mình, chỉn chu đến từng đơn vị, chi tiết sản phẩm. Đây là cách mà HBB Solutions tôn trọng và làm hài lòng khách hàng của mình.

9/ Đối với CV các bạn muốn vào làm vị trí AI, đâu là điểm gây ấn tượng với anh đầu tiên?

Như mình đã nói ở trên, AI thực sự rất khó, chỉ những người giỏi và có niềm đam mê với AI mới đủ sức theo đuổi. Mặt khác, công việc tại Việt Nam cho những bạn theo học AI cũng khá ít ỏi so với các bạn học những chuyên ngành khác. Hai điều này làm cho số người biết và làm về AI đã ít, còn ít hơn. Vậy cơ sở nào để HBB Solutions lựa chọn cho mình những ứng viên phù hợp nhằm xây dựng một đội ngũ chuyên về AI thực sự? Thứ nhất là về kiến thức nền, HBB Solutions sẽ xem xét kĩ phần kiến thức toán và thuật toán của ứng viên. Những phần này trong các trường đào tạo chuyên ngành Công nghệ thông tin đều được giảng dạy kỹ lưỡng và bài bản. Và đây cũng là nền tảng để giúp sinh viên phát triển thêm nữa sau khi ra trường. Vì vậy các ứng viên của HBB Solutions cần phải đáp ứng đủ tiêu chí này.

Ngoài ra các ứng viên cũng cần có sự nắm bắt nhất định về các sự kiện IT hay công nghệ gần đây trên thế giới. Điều này cho thấy ứng viên có niềm đam mê đối với ngành mình theo đuổi. Phần kiến thức này sẽ được kiểm tra và đánh giá qua quá trình phỏng vấn trực tiếp.

Điều cuối cùng mà HBB Solutions rất quan tâm là tiếp là nhân cách và thái độ làm việc. Thái độ và nhân cách là một yếu tố khá quan trọng trong việc tuyển lựa nhân viên của HBB Solutions bởi vì bất kỳ công ty nào muốn xây dựng một đội ngũ nhân viên tốt, chuyên nghiệp, đều luôn xem xét tiêu chí này. Nhân cách  thể hiện qua việc các bạn ấy chuẩn bị CV có kĩ lưỡng, cụ thể, thờii gian các bạn có gắn bó với công ty cũ… Thái độ làm việc được đánh giá qua việc các bạn có hòa đồng cùng các đồng nghiệp khác trong công ty, có khả năng chịu khó tìm tòi và học hỏi cái mới, có trách nhiệm với công việc hay không, …

Cảm ơn anh đã dành thời gian chia sẻ với TopDev.

Nhà tuyển dụng xem gì trên trang mạng xã hội của bạn?

Nhà tuyển dụng xem gì trên trang mạng xã hội của bạn

Bạn vừa mới có một buổi vui chơi hoành tráng cùng đám bạn thân, bạn muốn khoe điều đó với 964 người bạn của mình trên Facebook bằng những bức ảnh selfie. Bạn nghĩ rằng mình xứng đáng có được một chút thời gian giải lao sau những giờ làm việc căng thẳng, bạn muốn chia sẻ điều đó trên trang mạng xã hội của mình: facebook, zalo, instagram,….

60% nhà tuyển dụng tiết lộ rằng họ dùng các trang mạng xã hội để tìm hiểu về các ứng viên tìm việc. Điều này có nghĩa là gì – và khả năng được tuyển dụng của bạn là bao nhiêu? Bạn có thể sẽ không muốn nhấn nút “Public” nếu biết được những điều này về các nhà tuyển dụng.

Họ có thể đang dõi theo bạn.

Theo khảo sát mới nhất về cu hướng thị trường tuyển dụng trên các trang truyền thông xã hội của hơn 2.000 nhà tuyển dụng, các chuyên gia nhân sự và hơn 3.000 nhân viên toàn thời gian của Hoa Kỳ trên CareerBuilder cho thấy: 60% nhà tuyển dụng tiết lộ rằng họ sử dụng các trang web mạng xã hội để nghiên cứu các ứng viên. Con số này đã tăng một cách đáng kể từ 52% so với năm trước, 22% trong năm 2008 và 11% vào năm 2006 (khi cuộc điều tra được tiến hành đầu tiên). Ngoài ra, 59% nhà tuyển dụng sử dụng công cụ tìm kiếm để nghiên cứu các ứng viên so với 51% vào năm ngoái.

Và nếu những CON SỐ trên chưa đủ để làm bạn giật mình, thì hãy suy nghĩ theo hướng này: Số lượng nhà tuyển dụng sử dụng các công cụ mạng xã hội để sàng lọc ứng viên đã tăng 500% so với thập kỉ trước. Đúng rồi, bạn không đọc nhầm đâu: 500% so với thập kỉ trước.

49% các nhà tuyển dụng sử dụng mạng xã hội để sàng lọc ứng viên cho biết họ đã tìm thấy những thông tin quyết định không tuyển ứng viên đó. Sau đây là nội dung khiến nhà tuyển dụng có ấn tượng không tốt với bạn:

  • Hình ảnh khêu gợi, video hoặc thông tin không phù hợp – 46%
  • Thông tin về việc uống rượu hoặc sử dụng chất kích thích – 43%
  • Những câu bình luận phân biệt đối xử liên quan đến chủng tộc, tôn giáo, giới tính… – 33%
  • Nói xấu công ty cũ hoặc nhân viên đã từng làm việc chung – 31%
  • Kỹ năng giao tiếp kém – 29%

Nói một cách rõ ràng, hầu hết các nhà tuyển dụng không cố ý tìm kiếm điểm xấu của ứng viên (chỉ có 21% nhà tuyển dụng nói rằng họ xem các mạng truyền thông để tìm kiếm lí do không thuê ứng viên đó)

Các nhà tuyển dụng trong lĩnh vực công nghệ thông tin và bán hàng là những người hầu hết tìm kiếm thông tin của các ứng viên thông qua các trang mạng xã hội, ở mức 76% và 65% tương ứng.

Vì vậy, đây chính là thời điểm để chỉnh sửa lại các trang mạng xã hội của bạn.

Số lượng các nhà tuyển dụng tìm kiếm thông tin của các ứng viên ngày càng tăng. Đây chính là một cơ hội tuyệt vời cho bạn để làm nổi bật lên những điểm mạnh của mình và sử dụng chúng như một công cụ để giúp bạn có thể ghi điểm với nhà tuyển dụng. Những trang mạng xã hội trực tuyến là công cụ hoàn hảo để tạo sự khác biệt giữa bạn với những ứng viên khác và nó cũng chính là công cụ giúp nhà tuyển dụng có được nhiều thông tin hơn là một hồ sơ xin việc. Hãy bổ sung thêm một số thông tin về kinh nghiệm làm việc của bạn như: dạy kèm học sinh lớp năm 3 buổi/tuần, hoặc cộng tác viên tổ chức sự kiện? Hãy nhấn mạnh điều đó trong hồ sơ trực tuyến của bạn.

“Các công cụ như Facebook và Twitter cho phép nhà tuyển dụng có được một cái nhìn tổng quan về các ứng viên hơn là những thông tin được cung cấp trong hồ sơ xin việc.” Rosemary HAEFNER, giám đốc nguồn nhân lực của CareerBuilder cho biết.

Theo khảo sát, có đến 60 % nhà tuyển dụng hiện đang sử dụng các trang mạng xã hội để sàng lọc ứng viên. Đối với một số ngành nghề đặc thù, hồ sơ xin việc không đủ để thể hiện hết về một ứng viên, vì vậy mạng xã hội tiết lộ thêm một số thông tin còn thiếu khiến nhà tuyển dụng có cái nhìn khách quan hơn khi tuyển dụng.

30% muốn xem người khác đang nói những gì về các ứng viên của họ.

Thậm chí nhiều người cho rằng bạn nên dùng mạng xã hội như một bản hồ sơ tìm việc mở rộng: 41% nhà tuyển dụng nói rằng khả năng để họ phỏng vấn ứng viên là khá ít nếu họ không thể tìm thấy thông tin về ứng viên trên mạng xã hội – tăng 6% so với năm ngoái.

Vậy nhà tuyển dụng muốn xem những gì?

  • Hồ sơ lí lịch của ứng viên phù hợp với yêu cầu công việc– 44%
  • Trang thông tin của ứng viên trình bày một cách chuyên nghiệp – 44%
  • Tính cách của ứng viên phù hợp với văn hóa công ty – 43%
  • Ứng viên thể hiện sự quan tâm đối với công việc ứng tuyển – 40%
  • Ứng viên có kỹ năng giao tiếp tốt – 36%

Duy trì trang xã hội của bạn một cách chuyên nghiệp.

Đừng xem việc giữ cho trang cá nhân của bạn chuyên nghiệp như một thỏa thuận trong thời gian ngắn, thay vào đó, những hình ảnh chuyên nghiệp của bạn cần được bảo trì và chăm sóc thường xuyên. Bạn sẽ không rời khỏi nhà mà không mặc đồ lót sạch sẽ, phải không?. Tương tự như vậy, bạn không nên để hồ sơ “bẩn” của bạn trên tất cả các trang web.

41% nhà tuyển dụng nói rằng họ sử dụng các trang mạng xã hội để nghiên cứu các nhân viên hiện tại, gần một phần ba (32%) nói rằng họ sử dụng công cụ tìm kiếm để kiểm tra về lao động hiện có, và hơn một phần tư (26%) cho biết họ đã tìm thấy nội dung trực tuyến làm cho nhận viên đó phải bị sa thải.

Nhà tuyển dụng thường xuyên xem xét cả ứng cử viên và nhân viên hiện tại, vì nhiều lý do. Bằng cách kiểm soát những dấu chân của bạn trên mạng xã hội thật tốt, bạn sẽ đưa mình đến một sự nghiệp thành công.

Nguồn: Applancer Careers

Tiki đã dùng React Native như thế nào?

Tại Tiki, chúng tôi hiện đang phát triển các tính năng mới dành cho Android và iOS app, bằng React Native. Nếu bạn cũng có ý định dùng tới React Native cho project của mình, hay chỉ đơn giản là tò mò về nó – Hãy đọc bài viết này. Qua đây, tôi muốn chia sẻ kinh nghiệm của chúng tôi về RN cũng như bài học rút ra từ nó.

Vì sao lại chọn React Native?

Hot reloading & Live reloading

Chúng rất yêu thích khả năng live reloading trong React Native. Trong những ngôn ngữ lập trình khác, chúng ta phải chờ cho tới khi quá trình compile được hoàn tất, có khi lên tới hơn khoảng ~120 seconds mới xem được kết quả output. Nhưng React Native thì lại cho phép ta modify ứng dụng mà không cần phải recompile nó. JavaScript code được load từ local server trong giai đoạn lập trình, và được tích hợp vào app cùng với những resources khác. Nhờ đó mà giúp rút ngắn thời gian cho UI iterations.

Ngoài ra, React Native còn tích hợp thêm tính năng Hot Reloading. Nó giúp giữ cho app hoạt động bình thường và update/thêm những thay đổi cùng lúc trong thời gian thực. Hiện tại, hot reloading vẫn không thực sự hoạt động hoàn hảo với một số tình huống đặc biệt nhưng với một lần reload lại app thường sẽ giúp fix việc này.

Reusability

Một tính năng tuyệt vời khác của React Native chính là những dòng code chung vốn có thể xài cho cả iOS, và Android platforms. Một ví dụ điển hình như khi bạn dùng React Native’s switch component, nó sẽ render UISwitch trong iOS và Native Switch component trong Android. Với các ứng dụng của Tiki, chúng tôi có tới 80% JavaScript code được dùng cho cả Android và iOS.

Incremental adopting React Native

Chúng tôi bắt đầu dùng nó vào đầu 2016 để phát triển cho các tính năng mới như chọn ra một đặc tính để tìm kiếm sản phẩm.

Do việc chuyển đổi hoàn toàn qua React Native sẽ rất tốn kém và một số tính năng cũng còn cần đến ngôn ngữ lập trình native. Thế nên chúng tôi quyết định hướng đi hybrid app.

Tại sự kiện thường niên của Tiki, gọi là “Dzut Co Hon”, các trang web của công ty sẽ thể hiện thông điệp tri âm tới các khách hàng. Tuy nhiên, tháng 7 vừa rồi, thì sự kiện còn được đưa lên mobile platform. Để tôi miêu tả ngắn gọn về sự kiện này thì cứ vào thời điểm tháng 7 âm lịch, với các quốc gia như Vietnam, China, HongKong, mọi người sẽ cúng đồ vật để và cho đi thức ăn cũng như tiền bạc, với hi vọng cô hồn sẽ không quấy phá công việc và cuộc sống của mình. Còn với Tiki, chúng tôi hạ giá tới 80% nhân dịp trên. Tất cả những gì users cần làm là “tap” và chọn món hàng mình muốn mua, người nhanh nhất sẽ thắng cuộc.

Bởi vì lượng người dùng lên đến 60k trong thời điểm trên, các sự kiện đã được lên lịch trước và không thể thay đổi.

Tuyển dụng lập trình React Native

Các vấn đề chúng tôi gặp phải

Các bản cập nhật được tung ra quá nhiều

React Native vẫn trong giai đoạn phát triển. Có rất nhiều tính năng, và bug fixed trong mỗi bản release. Tuy vậy chúng cũng chứa những thay đổi lớn khiến cho mỗi lần update là app rất dễ bị crash. Trong những trường hợp trên, do có những tính năng đang xài React Native vì thế mà phải bỏ ra rất nhiều thời gian để khắc phục chúng mỗi khi update phiên bản mới.

Page transition vẫn còn chậm

Sau khi nhấn vào nút sign-in, màn hình sẽ hiện ra thời gian và các sản phẩm có trong sự kiện

Khi chúng tôi đưa route đến một navigator, JavaScript sẽ phải render toàn bộ components cần thiết cho screen mới này. Ngoài ra nó còn phải thực hiện page transition cũng ngay trong JS thread đó. Do phải thực hiện cả hai nên việc chuyển đổi giữa các page bị chậm đi. Do đó mà chúng tôi phải lên lịch cho từng hoạt động sử dụng InteractionManager.runAfterInteractions(). Nhờ đó, trước khi transition được diễn ra, tất cả tab-data sẽ được pre-loaded cùng với lists các sản phẩm trong Register Screen . Sau khi transition hoàn thành, ta sẽ chỉ cần tập trung vào render nội dung. Nhờ đó mà trải nghiệm của người dùng trở nên mượt mà hơn.

Tab Layout

Tại Tiki, chúng tôi hiện đang sử dụng một trong những libraries nổi tiếng nhất là react-native-scrollable-tab-view. Vốn là pure javascript implementation. Cách thức hoạt động khá giống với material design pattern với các props ở rộng nhằm có thể điều khiển một cách dễ dàng. Tuy vậy, library này bắt đầu để lộ ra vấn đề về hiệu năng bởi sự phức tạp trong UI của Tiki. Cũng bởi vì là pure JS implementation, nên xuất hiện độ trễ giữa thông tin từ user tới ứng dụng. Do đó, chúng tôi quyết định viết ra phiên bản native RNTabLayout của riêng mình và port nó lên Javascript.

Code cho riêng từng platform

Khi team QA test tính năng countdown, Tiki phát hiện ra một bug khá lạ. iOS đếm nhanh hơn Android. Chúng tôi thử khắc phục bằng thử nghiệm sau

let currentTime1
countDown(10000)
let currentTime2

Kết quả mong đợi là currentTime2 — currentTime1 = 10000 trên cả 2 platform. Thế nhưng chỉ có iOS là ra đúng. Hơn nữa, iOS render list sản phẩm trên nhanh hơn Andoid. Do đó, chúng tôi đã áp dụng một vài mánh khóe

getTimeRemaining(endTimeInMillis) {    
  const platformDelta = Platform.OS == 'ios' ? 1000 : 1600;    
  let diffInMillis = new Date(endTimeInMillis).getTime() -             Date.now() - platformDelta;
...
}

Vấn đề hiệu năng

“Dzut Co Hon” vốn dựa trên Redux. Chúng tôi dự định là khi click vào sản phẩm, màn sẽ ngay lập tức hiển thị tiến độ cũng như thay đổi state ngay khi network call. Tuy vậy, thực tế thì nó sẽ mất một giây hoặc hơn khi có nhiều sản phẩm được chọn. Sau khi điều tra, chúng tôi nhận ra rằng `Reducer` mất rất nhiều thời gian để nhận nhiều dispatched actions  từ ProductComponent. Vì thế Tiki quyết định dùng `setState()` trong `ProductComponent` và bỏ Redux ra khỏi `ProductListComponent`.

Với các app mới của Tiki vốn sử dụng RN 0.42, ListView vẫn gặp vấn đề do sự phức tạp với nhiều view types và tabs.

Bạn có thể thấy nó thật khó chịu khi scrolling. Do đó chúng tôi sẽ convert qua `FlatList` để xem nó như thế nào.

Đối với nhiều tabs với `ViewPager`, khi các tab được loaded, tất cả `ListView` và toàn bộ `Store` sẽ được lưu trữ. `OutOfMemory` thường diễn ra với các thiết bị low-end. Vì thế chúng tôi phải chỉ dữ lại data cần cho những tab đang hoạt động trong `Store`. Data cho các tabs khác sẽ được đưa vào `LocalStorage`. Nói cách khác, những tabs đó sẽ chỉ render duy nhất loading view…

Và khi user trở về các tab đó, thì chúng ta chỉ mất thời gian lấy data từ disk cache và render nó.  

`shouldComponentUpdate()` và `PureComponent` thật sự rất tiện lợi. Khi users slide một banner hay deal thì indicator sẽ được thay đổi. Như vậy, các component “mẹ” hoặc là cả component tree cũng sẽ thay đổi theo và khiến cho hiệu năng bị giảm sút. Đo đó chúng tôi dùng `shouldComponentShouldUpdate()` để bảo đảm các component không liên quan thì không bị thay đổi.

Integration liên tục

Tại Tiki, chúng tôi dùng Jenkins để deploy native apps. Trong khi đó, quá trình deploy React Native cũng muốn áp dụng cách thức như vậy. Với mỗi commit được nhập vào với nhánh staging, test sẽ được chạy và Jenkins sẽ đẩy JS bundle mới nhất lên CodePush server, rồi thông báo cho chúng tôi bằng Slack channel.

Dựa trên một sample, chúng tôi tạo ra một custom CLI tool để chạy `code-push release-react “TikiHome-ios” ios -d “Staging” — des “Jenkins deploy” — dev true -m false -t`. Sau khi nhánh dev thông qua thì code sẽ được xác nhập vào nhánh chính – master branch. Jenkins sẽ chạy tất cả các tests, tạo production target, deploy bundle mới nhất, và cả tạo ra một tag version.

Lời kết

Chúng tôi tin rằng React Native là một framework vô cùng tuyệt vời. Mặc dù nó vẫn còn vài vấn đề, nhưng chúng hoàn toàn bị che lấp bởi vô số các lợi ích mà React Native mang lại. Tiki hoàn toàn hài lòng với lựa chọn của mình – Tất những quyết định trên đã giúp chúng tôi rút ngắn thời gian đi rất nhiều cho việc phát triển các sản phẩm mobile.

Nguồn: topdev.vn via Cuong Le via CodeCamp

Văn hóa cạnh tranh lành mạnh trong doanh nghiệp

Office Professional Occupation Business Corporate Concept

Mọi công ty đều có thể tạo nên một văn hóa canh tranh lành mạnh.Khi làm đúng cách, sự cạnh tranh này có thể tạo ra một đội ngũ thực sự gắn bó, kết nối nhân viên với những mục tiêu ưu tiên của tổ chức và hướng đến một kết quả kinh doanh tốt hơn.

Cạnh tranh nơi công sở luôn là một chủ đề trò chuyện thu hút nhiều ý kiến. Với góc nhìn và kinh nghiệm của một người bán hàng, có thể bạn sẽ nhận ra rằng nó gồm có cả các tác dụng tốt và xấu. Một trong những yêu cầu quan trọng khi cạnh tranh đó chính là tính minh bạch. Nhưng làm thế nào để bạn nhận ra là đang có sự cạnh tranh, trừ khi điều này được công bố? Và đây thường là mấu chốt của vấn đề, bởi các phòng ban trong nhiều công ty thường không có thói quen công khai so sánh kết quả làm việc của nhân viên với các đồng nghiệp khác.

Dưới đây là một vài hướng dẫn bởi đã được xác định là có thể tạo ra sự cạnh tranh lành mạnh tại nơi làm việc:

1. Minh bạch về kết quả

Tác giả bài viết này cực kỳ tin vào hiệu quả của hệ thống ROWE, một tổ chức tư vấn về nguyên tắc quản lý doanh nghiệp, được sáng lập bởi hai người phụ nữ tuyệt vời và đầy cảm hứng, Cali Ressler và Jody Thompson. ROWE được tạo ra bởi niềm tin rằng công việc có thể diễn ra ở bất kỳ nơi nào vào bất cứ lúc nào, chỉ có kết quả của cá nhân mới là điều duy nhất quan trọng khi nói đến hiệu suất. Có rất nhiều điều để viết về triết lý này, tuy nhiên khuyến khích các bạn nên tự mình truy cập vào website của họ để tìm hiểu nhiều hơn.

Bạn sẽ phải quyết định mức độ minh bạch trong tổ chức hoặc nhóm của mình để chuẩn bị. Có nhiều bộ phận sẽ dè dặt với suy nghĩ về việc phải chia sẻ các thông tin về kết quả và hiệu suất làm việc cá nhân. Trong khi đó các quy định và tiêu chuẩn KPI về doanh thu của nhân viên kinh doanh thì hầu như luôn được công bố cho toàn công ty biết. Điều đó là nền tảng cho sự công bằng trong hoạt động bán hàng. Và theo đó, có quan điểm rằng các phòng ban khác cũng nên áp dụng tương tự. Hãy đưa ra những kết quả mà bạn cảm thấy thoải mái chia sẻ cho toàn bộ phận và bắt đầu quá trình cạnh tranh từ đây. Thường xuyên chia sẻ kết quả trong các cuộc họp hoặc cập nhật thông qua các công cụ ứng dụng công nghệ hiện đại.

2. Ghi nhận cả quá trình và kết quả

Hãy theo dõi mọi hoạt động của nhân viên, và đưa ra cho họ những sự phản hồi, khích lệ và ghi nhận ngay trong quá trình làm việc hàng ngày. Trong khi bạn chắc chắn sẽ thưởng cho người có thành tích đứng đầu vào cuối các quý hoặc năm, thì một điều quan trọng không kém là cũng bạn nên ghi nhận công sức cho những người đã luôn làm tốt công việc trong mỗi ngày, mỗi tuần.

Có thể dễ dàng thực hiện điều này bằng cách xác định xem cá nhân nào trong nhóm đã thực hiện các hoạt động tạo ra kết quả tốt như bạn mong đợi. Trong kinh doanh, nó có thể là số lượng các cuộc gọi, email, thư ngỏ và cuộc hẹn được gửi đi. Đó là những hoạt động đảm bảo cho công ty đạt được mục tiêu lâu dài. Và bằng cách ghi nhận những hoạt động này trong từng chặng đường, bạn luôn đảm bảo được rằng sẽ có nhiều nhân viên được công nhận và khen thưởng hơn thay vì chỉ vài người ưu tú nhất. Xác định được các nhiệm vụ hàng ngày dù nhỏ nhất cũng sẽ mang lại kết quả kinh doanh tốt hơn và bắt đầu tạo nên sự cạnh tranh trong công việc.

3. Khen thưởng phải có ý nghĩa tạo động lực

Dù cho đó là động lực xuất phát từ bên trong hay bên ngoài, bạn cần phải gắn việc khen thưởng với những điều có thể thúc đẩy cá nhân người lao động. Một số người rất thích được ngợi khen với toàn công ty về những thành tích “sáng chói” của họ, trong khi một số khác lại cảm thấy “rùng mình” khi nghĩ về viễn cảnh tuyên dương trước tập thể. Phần thưởng hữu hình cũng chỉ khuyến khích được những ai cảm thấy nó có ý nghĩa. Nếu ai đó ghét cà phê thì họ sẽ chẳng có cảm giác gì với một ly Starbucks. Theo kinh nghiệm thì các phần thưởng được ưa thích hàng đầu là sự biểu dương công khai (phi vật chất) và thẻ quà tặng (có giá trị tiền tệ).

Mọi công ty đều có thể tạo nên một văn hóa canh tranh lành mạnh. Giống như bất kỳ mọi thứ khác, nó phải được xây dựng dần dần bằng cách thử và sai. Khi làm đúng cách, sự cạnh tranh này có thể tạo ra một đội ngũ thực sự gắn bó, kết nối nhân viên với những mục tiêu ưu tiên của tổ chức và hướng đến một kết quả kinh doanh tốt hơn.

Nguồn: Applancer Careers via Soap Box

AI và những điều bạn cần phải có trước khi đụng tới AI

Cũng như các công nghệ khác, AI đã thổi bùng lên sự sợ hãi lạc hậu, không bắt kịp với xu thế của các Developer. Và cả cộng đồng về IT đều luôn dõi theo các tin tức về AI hằng ngày. Từ hardware startups cho tới những người khổng lồ công nghệ hay các tổ chức cộng đồng, mọi người đều thi nhau làm và phát triển AI của họ. Và tất nhiên câu hỏi quan trọng vẫn luôn là: “ Cách áp dụng AI và machine learning vào cải thiện hiệu năng công việc của chúng ta”.

Đa phần các công ty vẫn chưa sẵn sàng với AI. Có thể là bởi công ty chỉ mới bắt đầu vào lĩnh vực này, hoặc việc đọc và phân tích dữ liệu đối với họ không quan trọng. Nhưng phần lớn là do cơ sở vật chất không đủ tầm để áp dụng AI và hưởng lợi từ nó.

Là một chuyên gia tư vấn về data science/AI, tôi đã phải nói những điều trên biết bao nhiêu lần, đặc biệt là trong 2 năm vừa qua. Thật sự việc phải nhận ra AI không cần thiết với công ty cũng như là chấp nhận sự thật rằng mình vẫn còn quá yếu. Vậy làm cách nào để thuyết phục họ?

Tôi thường sử dụng phương thức “kim tự tháp” với AI đứng trên đỉnh. Bạn chỉ có thể xây được cái đỉnh nếu có được phần thân và chân, hay nói cách khác là dữ liệu và cơ sở vật chất.   

Nhu cầu tổi thiểu: bạn có thể đếm được không?

Ở chân kim tự tháp, chúng ta có data collection (thu thập dữ liệu). Bạn cần Data gì? và Data nào có sẵn? Nếu sản phẩm có liên quan tới khách hàng, bạn có thu thập được những tương tác từ user chưa? Bởi cuối cùng, với dataset đúng thì những tiến bộ trong machine learning mới có thể đạt được.

Tiếp theo, data di chuyển như thế nào qua khắp hệ thống? Bạn có dòng streams / ETL tốt không? Bạn lưu trữ dữ liệu ở đâu và nó có dễ truy cập và lấy thông tin không? Jay Kreps đã luôn nhấn mạnh rằng, dòng data ổn định và đáng tin cậy mới chính là chìa khóa cho việc sử dụng data một cách hiệu quả.

Chỉ khi data có thể được truy cập thì bạn mới có thể sử dụng và biến đổi nó được, bao gồm ‘data cleaning’, một lĩnh vực khá quan trọng của AI nhưng lại ít người quan tâm tới. Và khi làm về AI, bạn mới nhận ra mình đã bỏ lỡ biết bao nhiêu data, cảm biến của bạn không hề đáng tin cậy, mỗi phiên bản update là lại xuất hiện biết bao nhiêu vấn đề.

Cho đến khi nào bạn có thể khai thác và lọc data một cách hiệu quả nhất thì mới bắt đầu chuyển qua phân tích chúng (hay còn gọi là BI): xác định các metrics khác nhau để theo dõi, sự ảnh hưởng từ nhiều yếu tố khác nhau lên chúng. Vì mục đích của ta là tạo ra AI, những quá trình trên sẽ trở thành những tính năng quan trọng cho machine learning model của bạn. Cũng trong giai đoạn này, bạn có thể bắt đầu chuẩn bị cho training data với các labels khác nhau. Đây cũng là giai đoạn khá thú vị bởi những sự thật được phản ánh từ data.

OK! Anh cuối cùng cũng đếm được rùi! Giờ thì làm gì tiếp?

Và khi đã có training data , bây giờ ta đã có thể làm machine learning rùi đúng không? Tùy vào mục đích của bạn, nếu là để suy đoán churn thì được nhưng nếu có liên quan tới tương tác user thì không. Chúng ta cần có A/B testing và framewor thử nghiệp, thực hiện từng bước một nhằm bảo đảm không gặp phải sai phạm quá lớn và kết quả chính xác nhất có thể. Đây cũng là giai đoạn để bạn dặt ra các baseline đơn giản.

Bạn có thể deploy các thuật toán ML đơn giản (như logistic regression hoặc division), sau đó hãy nghĩ về những dấu hiệu và tính năng có thể ảnh hưởng tới kết quả của bạn. Weather & census data là lựa chọn hàng đầu của tôi. Bởi mặc dù rất là mạnh mẽ, deep learning lại không hề tự động làm những việc trên cho bạn. Việc đưa vào các tính năng mới sẽ giúp cải thiện hiệu năng rất lớn. Vì thế mà bạn cần phải dành nhiều thời gian cho mảng này trước khi vào giai đoạn tiếp theo.

Cuối cùng cũng đụng tới AI!

Bạn đã làm được rùi đấy. Bạn rất khiêm tốn và tài giỏi. data của bạn vừa gọn gàng và sạch sẽ. Dashboards, labels and những tính năng tốt đều có mặt. Bạn cẩn thận trong việc testing và baseline của bạn quá ư là chuẩn. Bạn đã thật sự sẵn sàng. Hãy thoải mái thử tất cả mọi thứ, từ mới nhất cho đến hiện đại nhất. Bạn có thể nhận được sự cái thiện rất lớn hoặc không. Trường hợp tệ nhất thì bạn vẫn học được phương pháp mới, thêm kinh nghiệm và hiểu biết. Còn nếu bạn may mắn thì user, client cũng như công ty của bạn sẽ nhận được rất nhiều lợi ích.

Ủa vậy còn MVPs, Agile, Lean và mấy cái khác thì sao?

Tạo ra AI là một quá trình đầy phức tạp mà bạn sẽ mất rất nhiều thời gian. Cũng giống như khi tạo ra một MVP (minimally viable product), bạn bắt đầu từ một nhánh nhỏ và bảo đảm sản phẩm hoạt động thật tốt trước. Sau đó thì hãy áp dụng model kim tự tháp cũng như mở rộng nó ra. Ví dụ như tại Jawbone, chúng tôi bắt đầu với sleep data và tạo ra kim tự tháp bao gồm instrumentation, ETL, cleaning & organization, label capturing và definitions, metrics. Sau đó chúng tôi tiếp tục phát triển và mở rộng ra. Bài học ở đây là chúng tôi luôn làm kĩ lưỡng và phải bảo đảm sản phẩm chính vẫn luôn được hoạt động tốt trước khi đụng tới AI.

Nguồn: Topdev via Hackernoon

Theo IT mà không cập nhật công nghệ, liệu bạn có đang lạc hậu so với phần còn lại?

Việc cập nhật thông tin, tin tức mới là việc vô cùng quan trọng đối với một người học lập trình nói riêng và người học CNTT nói chung, giúp bạn có những góc nhìn mới, định hướng được những hướng đi tương lai.

Đừng đợi đến khi khách hàng bắt bạn áp dụng 1 công nghệ mới đó hay khi gặp phải dự án có liên quan thì mới mò mẫm tìm hiểu để đối phó.

Cũng Đừng quên, chỉ trong vài năm trở lại đây, Apple đã ra mắt Swift với hy vọng thay thế cho Objective-C khi lập trình iOS, Kotlin – chứ không phải Java – mới là ngôn ngữ chính thức để lập trình Android. Rồi những AI, Machine Learning, VR/AR, IoT khuấy động cuộc sống của người dùng hay những nền tảng Crossplatform ngày càng thể hiện vai trò quan trọng riêng của mình. Tất nhiên, rất nhiều nền tảng kiến thức cơ bản là không thể thay thế nhưng nếu không chủ động tìm hiểu về những kiến thức mới 1 cách liên tục và đều đặn, e rằng bạn sẽ chênh vênh trước mỗi làn sóng công nghệ có thể ập đến bất cứ lúc nào.

Tháng 9 đang đến gần với hàng loạt những sự kiện công nghệ – lập trình và biết đâu đấy, chỉ với vài tiếng tham gia sự kiện có thể là bước ngoặt trên con đường sự nghiệp của bạn. Cùng xem qua những điểm nóng tháng 9 và lựa chọn cho mình ít nhất 1 buổi chia sẻ để cập nhật tình hình thế giới… à nhầm, cập nhật tình hình, kiến thức công nghệ/ lập trình trên thị trường với các chuyên gia tại Tp.HCM nhé!

1/ Cache – Cách build hệ thống đáp ứng truy cập cao

2/ Load Balancing – Bắt đầu từ đâu & như thế nào?

3/ Design A Scalable Social Network: Problems and Solutions

4/ PHP vs Asp.net vs Python vs Java

5/ ReactJS, AngularJS, VueJS: Cuộc chiến vương quyền Frontend

6/ Chọn công nghệ nào để phát triển Mobile App?

7/ Làm 1 con Messenger Bot thông minh với Nodejs trong 3 giờ

8/ Bắt đầu nghiên cứu AR/VR từ đâu & như thế nào?

9/ Bắt đầu GraphQL. Giải pháp vấn đề phát sinh quá nhiều API

10/ Designer/Developer muốn trở thành UX Designer?

Nhanh tay đăng kí những slot ngồi giới hạn của các sự kiện tháng 9 ngay hôm nay, bạn nhé!

3 bí quyết mở rộng mối quan hệ như những lãnh đạo hàng đầu

Bạn ra về khỏi buổi huấn luyện với hàng đống tài liệu, danh thiếp, góp mặt vào một đám đông mờ nhạt và cảm thấy buổi hội nghị này chẳng có ích lợi gì. Đó là dấu hiệu của việc bạn chưa biết cách mở rộng mối quan hệ như một nhà lãnh đạo thực thụ.

Dưới đây là những phân tích về những sai lầm trong tư duy khi đi hội nghị và cách khắc phục triệt để điều đó.

Bài viết này đã từng được đăng trên Medium.com. Tác giả là Isaac Naor, một nhà thiết kế, nhà sáng tạo yêu thích việc khởi nghiệp và hướng dẫn người khác. Ông yêu thích học hỏi thông qua việc lên ý tưởng thiết kế và dạy đứa con 3 tuổi của mình về code trước cả khi biết viết. Naor đã có nhiều bài đăng trên Wall Street Journal và Mobile Marketer, chuyên môn hiện tại là mảng công nghệ thực tế ảo.

Hãy bắt đầu từ bước cơ bản: Tại sao chúng ta phải đi dự hội nghị?

Nếu câu trả lời của bạn là “theo yêu cầu của cấp trên” hay “vì được trả tiền để dự” thì cách tiếp cận của bạn là hoàn toàn sai lầm.

Trên thực tế, kể cả sau khi tiếp xúc với hàng trăm người tại những buổi hội nghị như SXSW, WWDC và Google OI, bạn luôn bỏ sót những thứ rất quan trọng.

Nếu bạn gặp gỡ bất kỳ người nào như Larry Page, Sergey Brin hay Elon Musk, bạn sẽ biết được mục đích của họ đến hội nghị là “Để giải phóng tư duy”.

Điều đó có ý nghĩa gì?

“Tư duy lý trí” của chúng ta được điều khiển bởi vùng vỏ não trước trán. Nó còn chịu trách nhiệm điều khiển cách cơ thể phản ứng sao cho phù hợp với những mặc định của chính mình từ trước đến nay như: chúng ta là ai, trông như thế nào, và cách chúng ta vận dụng những kinh nghiệm để đối phó với thế giới xung quanh.

“Giải phóng tư duy” có nghĩa là chúng ta sẽ tạm dừng hoạt động của vùng vỏ não trước trán này lại, và cho phép tiềm thức kiểm soát suy nghĩ, kinh nghiệm và cách tương tác với môi trường.

3 bí quyết mở rộng mối quan hệ như những lãnh đạo hàng đầu - Ảnh 1.

Tại sao điều này lại quan trọng?

Bởi vì chúng ta có thể nhìn nhận và suy nghĩ khác hơn. Tiềm thức hình thành những mối liên kết mà trước đây chúng ta chưa từng ý thức đến, giúp chúng ta nhận định mọi thứ rõ ràng hơn, gạt bỏ những trở ngại bấy lâu mỗi khi chúng ta nhìn nhận sự việc và đưa ra quyết định, từ đó chúng ta có nhiều cơ hội hơn để cải thiện bản thân.

Vậy việc tham dự hội nghị có liên quan gì đến điều này?

Nó sẽ diễn ra theo ba hướng:

1. Điều kỳ diệu của môi trường mới lạ

Hội nghị là môi trường lý tưởng để bạn giải phóng tư duy, bởi ở đó có nhiều sự việc và nhiều tư tưởng đối lập diễn ra liên tục. Bạn sẽ bị thu hút bởi vẻ ngoài và phong cách của một ai đó, bạn buộc phải để ý đến từng cử chỉ của một người và đoán được người đối diện có cảm xúc, thái độ ra sao, sắp nói điều gì với bạn thông qua những cử chỉ cơ thể của họ.

Xuất hiện tại một buổi hội nghị với một tinh thần thoải mái và mong muốn được tham gia vào câu chuyện của mọi người chính là cách để trải nghiệm và có những kinh nghiệm ứng xử. Đồng thời, đó là khoảng thời gian bạn đang thực sự xây dựng những mối quan hệ đầy ý nghĩa.

2. Sự khác biệt

Khi tham gia hội nghị, bạn sẽ có cảm giác như đang ở một thành phố nhỏ bé và đông đúc, một xã hội thu nhỏ của những người có cùng mối quan tâm. Ở môi trường này, bạn sẽ muốn được gặp gỡ và tương tác nhiều hơn. Thử tưởng tượng, tại một hội nghị có tính quốc tế, chỉ thông qua vài câu chuyện, bạn có thể hiểu biết được thêm rất nhiều điều mới lạ bên ngoài đất nước mình sinh sống.

Cơ hội học hỏi từ những người khác một cách ngẫu nhiên thoải mái sẽ gợi cho bạn những cách nghĩ mới mà có thể bạn sẽ không bao giờ nhận ra nếu chỉ làm việc với các đồng nghiệp quen thuộc.

Điều này tạo nên những trải nghiệm trí tuệ tuyệt vời, vì mở rộng tư duy theo cách này sẽ giúp bạn hình thành những quan điểm và cách tiếp cận mới trong công việc.

3. Ý thức cộng đồng là động lực lớn

Con người luôn khao khát và tìm kiếm ý thức cộng đồng. Chúng ta muốn biết những việc mình đang làm là có ích, và được những người khác quan tâm. Cũng vì điều này mà doanh nghiệp thường đặt ra một hệ thống quy tắc về giá trị và niềm tin để tăng năng suất và tính thống nhất trong tập thể nhân viên. Có cơ sở để nói rằng đó là lý do chính cho sự thành công của Zappo, và cũng là động lực của những cuộc cách mạng chính trị.

Xuất hiện tại một nơi có nhiều người cùng chia sẻ những tư tưởng và giá trị chung, bạn cũng có thể tiếp xúc và hưởng lợi từ họ.

3 nguyên tắc để tối ưu hoá lợi ích của việc tham dự những buổi hội nghị

1. Để mọi thứ diễn ra một cách tự nhiên

Tham dự hội nghị, trao đổi, ghi nhận và xử lý tình huống một cách tự nhiên giúp bạn có thêm cơ hội để trải nghiệm và tương tác nhiều nhất có thể. Tư duy này còn giúp bạn tự tin hơn vào vận may của mình, tin rằng bạn đang trải qua những điều tốt đẹp thay vì sự gắng gượng, hay tâm lý “đi cho có”.

2. Hãy mạnh dạn làm những thứ mới mẻ

Con người chịu sự chi phối của thói quen, có xu hướng vận dụng kiến thức, kỹ năng đã có trong mọi tình huống. Tuy nhiên, bạn có thể vượt qua chính mình, mở rộng biên độ hiểu biết bằng cách làm một việc gì đó lạ lẫm, bắt chuyện với một người lạ, thử kể một câu chuyện theo một cách khác. Điều này sẽ giúp bạn học hỏi và phát triển. Bằng cách này, sau khi rời hội nghị, bạn sẽ là con người mới hơn lúc bắt đầu.

3. Không lãng phí

Nếu bạn cứ đi lòng vòng một cách vô thức, bạn sẽ không chú ý rằng mình đã lãng phí chính mình đến mức nào. Hãy tìm kiếm cơ hội, kiến thức hay mối quan hệ mới ở những nơi bạn đến, ở những người bạn gặp gỡ.

Những quy tắc ngầm

– Bạn cần tìm kiếm những người xung quanh và tiếp xúc với họ. Nếu bạn gặp một người không nhiệt tình với hội nghị hãy chuyển hướng. Nếu bạn gặp một người sẵn sàng đưa danh thiếp chỉ trong vòng 60 giây tiếp xúc, bạn cũng hãy chuyển hướng. Bởi bạn sẽ không tìm thấy cuộc trò chuyện ý nghĩa từ những đối tượng này.

– Nếu bạn hứng thú với buổi diễn thuyết, hãy chắc chắn rằng bạn là người đầu tiên đặt câu hỏi cho diễn giả. Hãy bày tỏ rằng bạn hiểu và trân trọng những gì họ mang đến. Và bạn đã có mối quan hệ với diễn giả đó.

– Quy tắc vàng là luôn luôn hỏi xem có thể giúp gì cho người khác, và chỉ hỏi khi bạn thật sự sẵn sàng cho điều đó. Một vị cố vấn đã từng nói: “Khi bạn nắm chặt bàn tay của mình lại, bạn không cho ai thứ gì, và cũng không nhận lại thứ gì. Ngược lại, khi bạn mở tay ra để cho đi, đồng thời bạn cũng được nhận lại”.

Tóm lại, nếu bạn muốn mở rộng quan hệ như một nhà lãnh đạo, đừng đi hội nghị chỉ vì cấp trên yêu cầu, vì nhàn rỗi, hay vì được trả tiền để đi. Đừng chỉ đi rồi nhận về hàng đống danh thiếp hay vì những món quà miễn phí.

Bạn hãy đi để phát triển, đi để xây dựng những mối quan hệ, vì trí tuệ của chúng ta được tổng hợp từ những người mà chúng ta gặp gỡ. Đi vì chúng ta sẽ không có cơ hội gặp những người mới cùng chí hướng ở bất kỳ một nơi nào khác. Đi để giải phóng tư duy của chính mình. Và đi vì bạn nhận ra rằng việc giải phóng tư duy nhờ những buổi hội nghị sẽ tạo nên một bước ngoặt quan trọng trong cuộc đời mình. Đi vì bạn quan tâm đến mình và mọi người. Nếu không vì những lý do trên, bạn không việc gì phải đi cả.

Nguồn: cafebiz.vn