Home Blog Page 211

Chuyện tuyển dụng ở Startup/SME: Không yêu đừng nói lời cay đắng

Có rất nhiều trường hợp, một nhân viên sau khi ứng tuyển được vào doanh nghiệp lại muốn nghỉ việc ngay lập tức. Thế nhưng, dù với bất kỳ lý do gì đi nữa, hay suy nghĩ thật kỹ cho cả chính cá nhân mình và các nhà tuyển dụng.

Sáng nay chào ngày mới bằng việc một em nhân viên mới tự ra khỏi group công việc và không đi làm. Liên hệ không được. Không bàn giao, không thông báo. Out là out. Không quan tâm hậu quả để lại.

Gần 2 tháng nay tuyển dụng nhiều, tình huống các bạn được phỏng vấn, thỏa thuận xong xuôi, hứa hẹn cố gắng và phấn đấu này nọ, vào làm được vài ngày thì nghỉ, xảy ra đến nay mình đếm được là hai mươi ba lần. Hai mươi ba lần. Cho nhiều vị trí khác nhau, cả văn phòng lẫn trong hệ thống quán.

Hoặc với lý do áp lực quá chịu không được, hoặc với lý do không phù hợp môi trường, hoặc không một lý do hay lời nói nào cả. Mình thích thì mình nghỉ thôi. Tần suất xảy ra nhiều quá khiến mình đặt câu hỏi, chuyện gì đã xảy ra? Lỗi do công ty mình hay lỗi do phòng nhân sự, hay lỗi tư duy của chính các bạn ấy.

1. Về phía doanh nghiệp: Startup và SME

Bản thân từng trải trong nghề làm công ty nhỏ, và quen biết nhiều bạn bè làm nghề startup hoặc đang điều hành các công ty, mình hiểu rất rõ những áp lực của việc xây dựng một bộ máy.

Nhỏ có cái khó của nhỏ, lớn có cái khó của lớn. Trong đó, áp lực về việc xây dựng đội ngũ, tuyển dụng và giữ chân được người phù hợp, là vô cùng lớn. Không thể cạnh tranh bằng các chế độ phúc lợi và mức lương với các công ty MNC hoặc công ty lớn, doanh nghiệp SME và Startup loay hoay với các bài toán con gà và quả trứng. Khó khăn của Startup và SME có thể tạm kể vài thứ như sau:

  • Không đủ tiền để cạnh tranh tuyển người bằng lương và chế độ.
  • Công việc chưa đủ rõ ràng để tìm được người chuyên nghiệp trong từng bộ phận chức năng trong công ty.
  • Người giỏi và có kinh nghiệm sẽ khó còn máu lửa và dấn thân vì họ đã đi làm đủ lâu để biết bán sức lao động sao cho đáng giá nhất. Người máu lửa và dấn thân thường còn thiếu kinh nghiệm. Người có cả hai thường đã tự mở công ty riêng hoặc dự án riêng. Hoặc đi định cư.

Vì đã chọn lựa con đường này và chấp nhận khó khăn của nó, nên mình luôn tìm giải pháp thay vì than phiền. Mình chọn tuyển dụng những bạn còn ít kinh nghiệm nhưng máu lửa, để đào tạo và nuôi dưỡng dần. Cách đó mình đã thành công với một vài vị trí trưởng phòng do chính mình đào tạo từ khi còn là sinh viên hoặc mới ra trường. Đến nay các bạn đều đủ tự tin để lead team và vẫn còn tiềm năng phát triển bản thân, nghề nghiệp rất lớn.

Ngoài ra, mình cũng phân bổ ngân sách tuyển dụng những nhân sự là người làm thuê chuyên nghiệp, để có thể hoạt động hiệu quả hơn. Vì đắt xắt ra miếng. Tìm được người giỏi phù hợp, dù lương cao nhưng giá trị tạo ra cho doanh nghiệp cũng cao hơn hẳn.

Một kinh nghiệm nhỏ của mình, đó là dù đang cần hay không cần, mình vẫn luôn duy trì mối quan hệ với nhiều người giỏi trong những mảng ngành khác nhau. Không phụ thuộc vào phòng nhân sự hoặc các công ty săn đầu người, vì chỉ có chính mình mới hiểu rõ nhất công ty mình làm gì, đại dương mênh mông đang hướng đến là đâu, và ai là thủy thủ đoàn phù hợp nhất.

Và quan trọng hơn hết, mình phải luôn cố gắng giỏi hơn và tử tế hơn, thì mới có thể quy tụ được người giỏi về cùng mình chiến đấu. Vì người giỏi chỉ theo người giỏi, hoặc người tử tế. Đó là áp lực của người founder, không thể tránh khỏi.

Tham khảo các nhà tuyển dụng IT mới nhất lớn nhất Việt Nam

2. Về phía ứng viên tìm việc

Mình vẫn luôn quan điểm mối quan hệ giữa doanh nghiệp và ứng viên là mối quan hệ ngang hàng, win-win. Hai bên đều cần nhau để thỏa mãn nhu cầu của nhau. Nhưng gần đây mình lại gặp tình huống, công ty mình giống như gái chờ chồng. Người ta thích đến thì đến, thích đi thì đi, muốn là nghỉ ngang không cần biết thứ mình để lại là một bào thai hay một mớ hỗn độn. Mà dù là bào thai hay một mớ hỗn độn, cũng cần chịu trách nhiệm và giải quyết hậu quả chứ hả?

Ồ, mình hoàn toàn có thể dùng cách nói đanh đá bên trên để chửi rủa trách móc chê bai như rất nhiều những người bạn của mình tuyển dụng phải những trường hợp vô trách nhiệm và xả sự bực tức trên mạng xã hội. Nhưng mình là một đứa đã từng nghỉ ngang vì mâu thuẫn với sếp trong công việc mà chỉ gửi mail bàn giao chứ không gặp trực tiếp, nên hiểu được góc độ cảm xúc và tư duy của người gây ra hành động đó.

Tuy nhiên, hiểu không có nghĩa là đồng tình. Cách các bạn ứng xử ngày hôm nay sẽ đem lại hậu quả vào một ngày nào đó. Như mình, đến bây giờ, dù đã bàn giao công việc qua email và sắp xếp người thay thế, vẫn cảm thấy có lỗi với anh sếp cũ vì đã không đủ can đảm trực tiếp gặp mặt ảnh để từ chức. Chuyện đó như một kiểu ám ảnh với đứa luôn rất nghiêm khắc với bản thân trong cách ứng xử với người khác như mình.

Tham khảo thêm các vị trí tìm việc làm ngành it lương cao

Vậy nên, mình có một vài lời như sau muốn nói cùng bạn, trước khi bạn ra quyết định nghỉ ngang một công việc nào đó:

  • Suy xét thật kỹ về lý do bạn ra đi. Như cách các bạn đã suy xét khi nhận việc. Khi một công ty gửi offer cho bạn, thứ các bạn nhận không chỉ là một việc làm, mà còn có cả niềm tin và hy vọng. Doanh nghiệp chúng mình khi phát sinh một lao động là phát sinh một bài toán rất dài lâu. Không chỉ là vấn đề lương thưởng, còn phải xây dựng chế độ bảo hiểm, lộ trình thăng tiến, môi trường và văn hóa công ty, làm sao để bạn phát triển và đóng góp tốt hơn. Thậm chí còn phải tính toán đến các phúc lợi cho gia đình người thân của bạn. Hôm nay nhận bạn vào làm, mình phải hình dung câu chuyện 5 năm sau bạn sẽ thế nào, 10 năm sau bạn sẽ ra sao và cả đời sẽ trở thành ai nếu bạn vẫn ở cùng công ty mình đến lúc đó.
  • Hãy dấn thân và kiên nhẫn. 2 tháng thử việc vẫn là quá ngắn để tìm kiếm sự phù hợp, nói gì một vài ngày. Sự phù hợp chỉ có, khi chúng ta cho nhau cơ hội được hiểu nhau. Bạn chọn cách tác động đến môi trường xung quanh và thay đổi nó theo cách của mình, hay rời bỏ đi và không tìm cách thích ứng, sẽ thể hiện bạn là người như thế nào, và năng lực sinh tồn của bạn đến đâu.
  • Hãy cho đi trước khi đòi hỏi. Và hãy biết đòi hỏi khi mình đã chứng minh đủ khả năng. Dưới góc độ là người sử dụng lao động, mình đắn đo từng đồng khi trả cho một người chưa chứng minh được năng lực, nhưng không tính toán một đồng khi trả cho người đã có lòng tin. Đây cũng là góc độ tư duy của hầu hết các doanh nghiệp khác.
  • Áp lực là bản chất của việc làm. Không ai trả tiền để bạn được vui sướng thoải mái tận hưởng cuộc đời. Nhưng áp lực cũng là thứ giúp bạn trưởng thành và tài giỏi. Một chút áp lực những ngày đầu đi làm còn không chịu nổi, thì sau này bạn mong chờ mình đương đầu được với điều gì? Chưa cố gắng đã đầu hàng là một loại hèn kém. Một lần hèn kém, hai lần hèn kém, ba lần hèn kém, sẽ dần dần thành cả đời hèn kém trước khi kịp nhận ra.
  • Bất luận vì lý do gì, khi không còn muốn bên nhau, cũng cần một lời chia tay tốt đẹp. Cách bạn bước vào một công ty cho thấy năng lực của bạn, nhưng cách các bạn bước ra khỏi một công ty cho thấy một phần nhân cách của bạn. Hãy chia tay lịch sự, ôn hòa, có trách nhiệm, và đừng bao giờ nói xấu người cũ.

Trái đất này rộng lớn nhưng cũng rất nhỏ bé. Người mà ngày hôm nay bạn dùng cách vô trách nhiệm để đối xử với họ, có thể là người bạn sẽ cần đến trong tương lai. Mồi nào, cá đó. Gieo nhân nào, gặt quả đó. Nên làm gì cũng cần nghĩ tới hậu quả về sau.

Chúc bạn may mắn tìm được công việc phù hợp. Và biết cách ứng xử phù hợp.

Nguồn: Applancer Careers via Trí Thức Trẻ

14 khóa học Tech miễn phí chất lượng từ MIT, Harvard, Linux…

Các học viện danh tiếng trên thế giới đã phát triển 1700 khóa học miễn phí trên edX, bao gồm 150 khóa học chính thức từ Microsoft. Dưới đây là danh sách 14 khóa chất lượng mà bạn phải xem qua!

1/ Introduction to Computer Science and Programming Using Python của MIT: Những nội dung mới và cập nhật liên quan đến Computer Science khi đây là công cụ giải quyết các vấn đề liên quan đến phân tích trong thực tế. Ngôn ngữ sử dụng là Python 3.5

2/ Data Science: R Basics từ Harvard: Giúp bạn học được các building blocks cơ bản của R. Series này sẽ tập trung vào data với dplyr, visualization với ggplot2, xác suất, inference, hồi quy và machine learning.

3/ Querying with Transact-SQL từ Microsoft: Từ truy vấn và modify dữ liệu trong SQL Server hoặc Azure SQL đến programming với Transact-SQL, bạn sẽ học được các kĩ năng cần thiết

4/ Agile Development Using Ruby on Rails — The Basics từ Berkeley: Tập trung vào Software as a Service (SaaS) sử dụng Ruby on Rails.

5/ Introduction to Artificial Intelligence từ Microsoft: Bức tranh tổng quan về AI để nghiên cứu về cách thức Machine Learning cung cấp nền tảng cho AI và cashc thức để bạn tận dụng các cognitive services trong ứng dụng của mình

6/ Analyzing and Visualizing Data with Power BI từ Microsoft: Học về Power BI – 1 dịch vụ đám mây hữu ích hỗ trợ các data scientist visualize và chia sẻ insights từ data của họ

7/ Introduction to Apache Hadoop từ Linux Foundation: Mở khóa năng lực của Big Data với phần tổng quan về Apache Hadoop và thực hành ví dụ về Hadoop của chính bạn

8/ Cloud Computing for Enterprises từ U of Maryland: Giúp bạn hiểu rõ các công nghệ đám mây, tại sao chúng có thể cải thiện năng suất và hiệu quả của doanh nghiệp

9/ Introduction to Cybersecurity từ U of Washington: Giới thiệu về An ninh mạng, phù hợp cho các bạn đang tò mò về bảo mật Internet và muốn làm quen với lĩnh vực này

10/ Introduction to DevOps từ Microsoft: Học về cách giúp vòng đời ứng dụng nhanh hơn và có thể dự đoán được, thích hợp với cả dev lẫn các Operation team

11/ HTML5 and CSS Fundamentals từ W3C: Giúp bạn biết cách xây dựng các Web sites bằng HTML5 và CSS cơ bản, được hướng dẫn trực tiếp bởi W3C – nơi tạo ra các chuẩn mực Web mới nhất.

12/ Introduction to Computer Science từ Harvard: Giới thiệu về Computer Science và nghệ thuật của Programming

13/ Blockchain for Business — An Introduction to Hyperledger Technologies từ Linux Foundation: Vỡ lòng về Blockchain và các công nghệ distributed ledger (cuốn sổ cái). Học cách build các ứng dụng Blockchain với các framework Hyperledger

14/ Fundamentals of Red Hat Enterprise Linux từ Red Hat: Nghiên cứu các kĩ thuật thực tế để sử dụng Red Hat® Enterprise Linux® và cách thực hiện các nhiệm vụ liên quan đến system administration cơ bản

Nguồn: TopDev via hackernoon.com

Xin việc chỗ các tỉ phú, hãy sẵn sàng ‘lên thớt’

Richard Branson, chairman and founder of Virgin Group Ltd., listens during the annual meeting of the Clinton Global Initiative (CGI) in New York, U.S., on Monday, Sept. 28, 2015. The annual CGI meetings bring together heads of state, leading CEOs, philanthropists, and members of the media to facilitate discussion and forward-thinking initiatives that challenge the way we impact the future. Photographer: Michael Nagle/Bloomberg via Getty Images

Nếu muốn làm việc cho Elon Musk, Richard Branson hay các tỉ phú công nghệ “đầu có sỏi”, hãy quên khẩn trương mấy câu hỏi kiểu thế mạnh, điểm yếu đi, và chuẩn bị tinh thần cho những câu “hại não” hơn nhiều.

1. Bạn đã không có cơ hội viết điều gì trong CV?

Tỉ phú sáng lập Tập đoàn Virgin của Anh, Richard Branson, thẳng thừng tuyên bố: “CV đẹp rất quan trọng, nhưng thuê một người chỉ dựa vào những gì họ nói trên giấy là phí phạm thời gian”. Vì thế Branson hỏi các ứng viên về những gì họ không nhắc đến trong CV.

Tạo CV IT Online mới nhất

2. Trên thang điểm từ 1 đến 10, bạn lập dị đến mức nào?

Một trong những giá trị lõi của Zappos là “tạo ra sự vui nhộn, thậm chí là kỳ dị một chút”, nên các ứng viên phải thể hiện cho CEO Tony Hsieh thấy được sự lập dị. Họ đưa ra con số nào thật ra không quan trọng, cách họ trả lời mới khiến ông quan tâm. Nếu họ trả lời 1, có lẽ họ quá “bình thường” để làm ở Zappos. Nhưng nói 10 thì sẽ là hơi “điên rồ quá”.

3. Tự mô tả bản thân bằng một từ

Dara Richardson-Heron, CEO của tổ chức phi lợi nhuận YWCA, luôn hỏi câu này vì các ứng viên của bà phải biết chính xác mình là ai.

Heron sẽ không đánh giá ứng viên dựa trên những từ ngữ họ chọn, nhưng qua câu trả lời, bà hiểu cách người đó tự nghĩ về bản thân. Bà ưng ý khi ứng viên cân nhắc câu trả lời kỹ lưỡng và trả lời một cách có suy nghĩ.

4. Cho tôi ví dụ về một lần bạn giải quyết được một ca rất khó

Laszlo Bock, giám đốc nhân sự của Google, tiết lộ rằng tập đoàn rất thích những câu hỏi về hành vi.

“Khi đào sâu vào những gì ứng viên nói về trải nghiệm hay kinh nghiệm của bản thân họ, ta có thể thu được 2 kiểu thông tin – Bock chia sẻ với New York Times – Thứ nhất, biết được họ thật sự tương tác như thế nào trong các tình huống đời thực. Thứ hai, biết được ứng viên đó định nghĩa thế nào là khó khăn”.

5. Bạn bao nhiêu tuổi khi có công việc nhận lương đầu tiên?

Hannah Paramore, chủ tịch công ty quảng cáo tương tác Paramore, hỏi câu này để kiểm tra mức độ độc lập cũng như các nguyên tắc đạo đức nghề nghiệp của ứng viên. Nếu họ phải làm việc vất vả từ khi học trung học và đại học vì cuộc sống đòi hỏi, đó là những người có trách nhiệm cá nhân rất cao.

Xin việc chỗ các tỉ phú, hãy sẵn sàng lên thớt - Ảnh 3.

Kat Cole “sắp đặt” các tình huống để xem ứng viên cư xử thế nào – Ảnh: Inc

6. Bạn đang ở đâu?

“Người sắt” đời thực Elon Musk được cho là đã phỏng vấn gần như tất cả 1.000 nhân sự của SpaceX. Và đây là câu hỏi yêu thích của ông: “Bạn đang đứng trên bề mặt Trái đất. Bạn đi một dặm về phía nam, một dặm về phía tây, một dặm về phía bắc. Bạn sẽ trở về đúng nơi mình xuất phát. Vậy bạn đang ở đâu?”.

Câu trả lời là bạn hoặc đang ở Bắc Cực, hoặc đang ở đâu đó gần Nam Cực.

7. Động lực nào khiến bạn ra khỏi giường mỗi sáng?

Brad Jefferson, CEO của Animoto – dịch vụ cung cấp slideshow dạng video trực tuyến, nói: “Nếu bạn theo đuổi một điều khiến bạn say mê, cùng những người chia sẻ động lực với bạn, công việc sẽ thú vị hơn nhiều, dù là trong thời điểm khó khăn”, Brad nói.

8. Bạn sẽ làm gì nếu tận thế và xác sống thực sự xảy ra?

Tất cả ứng viên của chuỗi nhà hàng Capriotti’s Sandwich Shop trên toàn nước Mỹ đều nhận được câu hỏi này. Tất nhiên cũng chả có câu trả lời đúng hay sai, CEO Ashley Morris chỉ qua đó đánh giá khả năng đối mặt với áp lực của ứng viên.

9. Tại sao bạn thay đổi công việc?

CEO Alexa Von Tobel của LearnVest muốn ứng viên bộc lộ cách tư duy của họ qua câu trả lời. Bà cũng thích hỏi về điểm yếu của ứng viên, nhưng nếu họ trả lời không thành thật, bà sẽ trở nên gay gắt: “Bạn thực sự yếu/tệ ở điểm gì? Bạn đời của bạn nói gì về điểm yếu này của bạn?”.

“Tôi không thể làm việc cùng họ nếu họ không biết bản thân dở ở đâu”, bà nói.

10. Một người không ưa bạn sẽ nói gì về bạn?

Tướng về hưu Stanley McChrystal đặt câu hỏi này để buộc ứng viên đặt mình vào vị trí của người khác để nhìn nhận bản thân. Họ sẽ phải nói ra những điểm không mấy long lanh về bản thân, trước mặt một người có quyền sinh sát đối với sự nghiệp của họ.

Xin việc chỗ các tỉ phú, hãy sẵn sàng lên thớt - Ảnh 5.

Elon Musk rất thích làm ứng viên “chóng mặt” – Ảnh: Forbes

11. Bạn từng sáng chế ra cái gì chưa?

Lori Senecal, CEO của MDC Partner Network, hỏi câu này vì bà tìm kiếm ở các ứng viên 3 điều: tư duy đổi mới sáng tạo, khát khao hợp tác, và đam mê.

12. Cái búa và cái đinh giá 1,10 USD. Cái búa đắt hơn cái đinh 1 USD. Cái đinh giá bao nhiêu?

Đây là một trong nhiều câu hỏi gài bẫy yêu thích của Jeff Zwelling, cựu CEO của Convertro. Ông thường bất ngờ ‘ném’ câu hỏi toán học này vào giữa cuộc phỏng vấn.

“Có người sẽ lập tức trả lời là 10 cent, hiển nhiên là sai. Cái đinh giá chỉ 5 cent thôi. Họ không cần trả lời quá chính xác, cái tôi cần thấy là họ tư duy trước khi trả lời”, Zwelling biết toán là “sở đoản” của nhiều người. “Nếu là 10 cent thì quá dễ, tôi đố làm gì?”.

13. Tính cách nào của bạn khiến người ta phát điên?

Kat Cole, chủ tịch Cinnabon, hỏi vậy để biết ứng viên tương tác với mọi người xung quanh như thế nào. Bà còn “sắp đặt” những việc như đưa nước cho ứng viên trong phòng chờ, làm rơi giấy tờ ra sàn… để xem ứng viên có chú ý đến tiểu tiết không.

14. Nói cho tôi một sự thật mà gần như không ai đồng tình

Đồng sáng lập PayPal, ông Peter Thiel, thích tuyển những người không sợ nói lên quan điểm của mình. Nói với Forbes năm 2012, Thiel lý giải: “Nó là bài kiểm tra để biết nền tảng tư duy của ứng viên, đồng thời là sự can đảm của họ khi nói lên điều mình nghĩ kể cả khi tất cả đều chống lại”.

15. Kể tôi nghe những thành công, thách thức và trọng trách trước đây của bạn

Lonne Jaffe, CEO của Syncsort, hỏi câu này để xem ứng viên có khả năng kể chuyện không. “Những lãnh đạo cấp cao thành công đều là những người giỏi kể chuyện, và biết cách tận dụng năng lực này từ rất sớm trong sự nghiệp – Jaffe nói – Nhất là trong lĩnh vực công nghệ mà nhiều lúc rất buồn tẻ”.

Xin việc chỗ các tỉ phú, hãy sẵn sàng lên thớt - Ảnh 7.

Hannah Paramore thích những người có trách nhiệm cá nhân – Ảnh: The Business Journals

Nguồn: tuoitre.vn

Muốn biết cách thức hoạt động của Deep Learning? Hãy đọc hướng dẫn nhanh sau!

Artificial Intelligence (AI) và Machine Learning (ML) là 1 trong số những topic nóng nhất hiện nay.

Hy vọng bài viết này sẽ giúp bạn hiểu được những kiến thức cơ bản về AI & ML. Quan trọng hơn, bạn sẽ nắm rõ cách hoạt động của Deep Learning – hình thức phổ biến nhất Machine Learning.

Background

Đầu tiên, bạn cần hiểu các khái niệm quan trọng có liên quan.

Artificial Intelligence vs Machine Learning

Artificial Intelligence LÀ sự tái Tạo của Trí Tuệ CON NGƯỜI TRONG CÁC MÁY TÍNH

Khi AI mới ra đời, các nhà nghiên cứu đã cố gắng tái tạo trí thông minh của con người cho những nhiệm vụ cụ thể – như chơi game.

Các nhà nghiên cứu đã giới thiệu rất nhiều quy tắc mà máy tính cần tuân thủ. Lúc này, máy tính sẽ có có 1 list các hành động khả thi, và đưa ra quyết định dựa trên những quy tắc đó

Machine Learning Là khả năng máy tính học Bộ lớn dữ liệu thay cho các nguyên tắc đã được code 1 cách cứng nhắc

ML hỗ trợ máy tính tự học. Hình thức học này tận dụng lợi thế xử lý các dữ liệu lớn dễ dàng của các máy tính hiện đại.

Supervised learning vs unsupervised learning

Supervised Learning LÀ sử dụng các bộ dữ liệu được dán nhãn có inputs & outputs được kì vọng

Khi train cho 1 AI sử dụng supervised learning, bạn đã đưa cho AI đó 1 input và yêu cầu nó 1 output được kì vọng.

Nếu output được generate bởi AI trên bị sai, nó sẽ điều chỉnh lại các tính toán của mình. Quy trình này được thực hiện lặp đi lặp lại theo data set, cho đến khi AI không mắc sai lầm nữa.

Một ví dụ về supervised learning là AI dự báo thời tiết. AI đã học cách dự báo thời tiết nhờ các data trong lịch sử. Việc training data đó bao gồm các input (áp suất, độ ẩm, tốc độ gió) và các output (nhiệt độ)

Unsupervised Learning là nhiệm vụ của machine learning sử dụng các data set mà không có các structure cụ thể

Khi train 1 AI bằng unsupervised learning, bạn sẽ để AI đó tạo nên các phân loại data mang tính logic.

Một ví dụ về unsupervised learning là AI dự đoán hành vi dùng cho trang web E-commerce. Nó sẽ không học bằng cách sử dụng các data set đã dán nhãn gồm inputs & outputs. Thay vào đó, AI sẽ tạo ra các phân loại riêng từ data input, cung cấp thông tin về các khách hàng có nhiều khả năng mua các sản phẩm khác nhau nhất.

Vậy thì, Deep Learning hoạt động ra sao?

Deep Learning là method machine learning, cho phép chúng ta train AI để dự báo các output khi được cho 1 set inputs. Bạn có thể dùng cả supervised và unsupervised learning để train AI này.

Để hiểu cách hoạt động của Deep Learning, chúng ta sẽ build giả thiết là dịch vụ ước tính giá vé máy bay, train nó bằng method supervised learning.

Chúng ta muốn có 1 công cụ để dự đoán giá vé bằng cách sử dụng các input sau (để đơn giản, chúng ta sẽ loại bỏ các vé khứ hồi)

  • Sân bay khởi hành
  • Sân bay đến
  • Ngày khởi hành
  • Tên hãng máy bay

Neural networks

Cũng giống như động vật, bộ não của AI dự đoán này có các nơ-ron. Các nơ ron này được thể hiện bằng các vòng tròn và những vòng tròn này lại kết nối với nhau.

Image credit: CS231n

Những nơ-ron này được nhóm lại thành 3 loại layer khác nhau:

  1. Layer Input
  2. Layer(s) Hidden
  3. Layer Output

Layer input nhận các input data. Trong trường hợp này, chúng ta có 4 nơ-ron trong layer inout: Sân bay khởi hành, Sân bay đến, Ngày khởi hành và Hãng máy bay. Layer input sẽ đưa các inputs này đến layer hidden đầu tiên.

Các hidden layers thực hiện các tính toán toán học dựa trên outputs của chúng ta. Một trong những thách thức khi tạo các neural networks chính là việc quyết định số lượng các hidden layers và số lượng các nơ-ron cho mỗi layer.

Layer output trả về data output mà trường hợp này là dự đoán về giá vé máy bay.

Vậy làm thế nào để nó tính toán được giá vé?

Đây chính là điều kì diệu của Deep Learning.

Mỗi kết nối giữa các nơ-ron được liên kết với 1 weight. Weight này thể hiện tầm quan trọng của giá trị input. Các weight ban đầu được set ngẫu nhiên.

Khi dự đoán giá của 1 tấm vé máy bay, ngày khởi hành là 1 trong những yếu tố có sức “nặng” hơn. Vì vậy, các liên kết nơ-ron của ngày khởi hành sẽ có weight (trọng lượng) lớn.

Image credit: CodeProject

Mỗi nơ-ron có 1 Activation Function. Nếu không có lập luận toán học, sẽ rất khó để hiểu được các hàm này.

Để đơn giản, 1 trong những mục đích chính của nó là “standardize” – “tiêu chuẩn hóa” output từ nơ-ron.

Một khi 1 set của data input đã vượt qua tất cacr các layers của neural network, nó sẽ trả lại data output qua layer output.

Đâu có gì phức tạp, phải không?

Huấn luyện Neural Network

Training AI là phần khó nhất của Deep Learning. Tại sao?

  1. Bạn cần 1 set dữ liệu đủ lớn
  2. Bạn cần 1 lượng lớn computational power.

Đối việc dự đoán giá vé máy bay, chúng ta cần có data lịch sử của các giá vé máy bay. Và do lượng lớn các mối liên hệ tiềm năng giữa sân bay và ngày khởi hành, chúng ta cần 1 danh sách rất lớn các giá vé.

Để train AI, chúng ta gần đưa cho nó các inputs từ data set, và so sánh các outputs của nó với các output từ data set. Vì AI vẫn chưa được train, output của nó sẽ bị sai.

Một khi đã xem xét toàn bộ data set, chúng ta có thể tạo hàm để hiển thị các output của AI đã sai khác như thế nào so với các output thực sự. Hàm này được gọi là Cost Function.

Lý tưởng nhất, bạn sẽ muốn hàm cost này bằng 0. Đó là khi các output của AI hoàn toàn giống với các output của data set.

Làm sao để giảm hàm cost?

Thay đổi các weights giữa các nơ-ron. Chúng ta có thể thay đổi chúng 1 cách ngẫu nhiên cho đến khi cost function thật thấp, nhưng thao tác này thực ra không hiệu quả lắm.

Thay vào đó, chúng ta sẽ sử dụng 1 kĩ thuật gọi là Gradient Descent.

Gradient Descent là 1 kĩ thuật cho phép chúng ta tìm thấy phần tối thiểu của 1 hàm. Trong trường hợp này là phần tối thiểu (minimum) của cost function.

Gradient Descent sẽ thay đổi các weights theo cấp độ tăng nhỏ sau khi mỗi lần lặp đi lặp lại data set. Bằng cách tính toán phái sinh (hoặc độ dốc) của cost function ở 1 set weight nào đó, chúng ta có thể nhận thấy được khuynh hướng của minimum.

Image credit: Sebastian Raschka

Để giảm thiểu cost function, bạn cần phải lặp đi lặp lại các data set nhiều lần. Đó là lý do tại sao bạn cần 1 lượng computational power.

Cập nhật các weights bằng gradient descent sẽ được thực hiện 1 cách tự động. Đây chính là điều kì diệu của Deep Learning!

Một khi đã train cho công cụ AI đo lường giá vé máy bay, chúng ta có thể sử dụng nó để dự đoán giá vé trong tương lai.

Các nguồn nghiên cứu thêm?

Có rất nhiều loại neural networks: Convolutional Neural Networks cho Computer Vision và Recurrent Neural Networks cho Natural Language Processing.

Nếu bạn muốn học những phần liên quan đến Tech trong Deep Learning thì có thể tham khảo 1 khóa học online. Gần đây có khóa Deep Learning Specialization của Andrew Ng gây được tiếng vang lớn trong cộng đồng.

Tóm lại…

  • Deep Learning sử dụng 1 Neural Network để bắt chước trí thông minh của động vật
  • Có 3 loại layer nơ-ron trong 1 neural network là: InputLayer, Hidden Layer(s) và Output Layer
  • Các kết nối giữa các nơ-ron được liên kết với 1 weight, thể hiện mức độ quan trọng của giá trị input.
  • Các nơ-ron ứng dụng Activation Function vào data để “chuẩn hóa” output xuất ra từ nơ-ron
  • Để train 1 Neural Network, bạn cần 1 data set lớn
  • Quá trình lặp đi lặp lại data set và so sánh các output sẽ sản sinh ra Cost Function, cho thấy AI đã sai khác bai nhiêu so với các output thực tế
  • Sau mỗi lần lặp qua data set, các weights giữa các nơ-ron được điều chỉnh bằng Gradient Descent để giảm cost function

Nguồn: TopDev via Medium.freecodecamp.com

Xây dựng thương hiệu cho nhà tuyển dụng – Nên hay không?

Tuyển dụng kiểu cũ “hết work rồi” nhường chỗ cho Employer Branding, một chân trời mới

Một sự thật không thể phủ định rằng, phần lớn các lập trình viên “ngon” đều đã “yên bề gia thất” (vì thế mà họ không còn tích cực chủ động tìm kiếm nơi mới, nói thẳng ra là tôi không quan tâm), vì thế mà việc xây dựng thương hiệu cho nhà tuyển dụng – Employer Branding là một trong những chiến lược tối quan trọng trong thời buổi hiện nay.

Nếu thương hiệu của bạn không thu hút được sự chú ý của các lập trình viên, thì 80% số ứng viên sẽ không muốn làm việc cho công ty của bạn, đó là thực trạng hiện nay. Nhưng nếu chúng ta, các nhà tuyển dụng, biết cách thực hiện phương thức mới một cách khéo léo thì ngay cả những ứng viên “khó tính” nhất cũng sẽ mềm lòng và hứng thú khi được gia nhập vào đội ngũ của của công ty bạn, một công ty có Employer Branding tốt và chuẩn mực.

Thật ra không hề có một công thức bí mật thần kì nào trong việc xây dựng thương hiệu thành công của nhà tuyển dụng. Một số công ty gần đây sử dụng đội ngũ nhân viên của mình cho phép HR hoặc Marketing chịu trách nhiệm về việc sản xuất các nội dung hấp dẫn để thu hút các ứng viên của mình. Có những tập đoàn sẵn sàng chi hầu bao hàng trăm triệu đồng và cũng có một số khác lại không hề chi bất cứ một đồng nào. Nếu bạn thuộc trường hợp thứ hai thì giờ là lúc phải cân nhắc lại vấn đề này.

Phân bổ ngân sách và bài toán ROI

Nếu bạn gộp chung việc tuyển dụng, phỏng vấn, … nói chung là bỏ hết trứng vào 1 rỗ, thì việc phân chia tiền sẽ trở nên khó khăn hơn rất nhiều. Bạn sẽ dễ tính ROI (Return on Investment – lợi tức đầu tư) nếu ta có sự chính xác trong số liệu cũng như ngân sách rõ ràng cho từng khoản chi.

Cụ thể, nếu team của bạn dùng khoảng 200 triệu cho việc xây dựng thương hiệu cho nhà tuyển dụng, đăng tuyển và phỏng vấn ứng viên. Kết quả được lấy ra và chia cho tổng mọi thứ bạn đã tiêu thì bạn công ty sẽ thuê thêm được 5 nhân viên mới, trong khi nếu chỉ đăng bài tuyển dụng thì chỉ giúp thêm được 2 người với chi phí có thể là tương ứng hoặc thậm chí là mắc hơn rất nhiều. Bạn sẽ hiểu được phương thức nào có hiệu quả và tốt hơn. Nhờ đó mà việc phân bổ ngân sách của bạn sẽ trở nên chính xác cũng như hiệu quả hơn một cách bất ngờ.

Bổn cũ soạn lại “Hết work rồi em…”

Có một chị HR gần đây chia sẻ, những cách đăng bài tuyển dụng, cũng như việc dùng những tools hỗ trợ đại trà hiện tại sẽ không giúp ích được gì nhiều cho việc tuyển dụng lập trình viên nữa, chị chia sẻ “Mấy cách này chị làm hoài mấy năm nay, hết work rồi em…”

Với cách thức tuyển dụng truyền thống, nó có thể sẽ giúp bạn trong việc tuyển dụng các ứng viên thuộc phân khúc khác, nhưng có vẻ như nó lại không thật sự hiệu quả với các lập trình viên nhà mình. Một insight rất thú vị là, các bác lập trình viên không bao giờ hoặc rất it khi hay vào xem các trang tuyển dụng (job board) thông thường, và phần lớn họ cũng không tích cực trong việc tìm kiếm công việc mới. Do đó mà chỉ tập trung đổ tiền vào những cách trên sẽ là một lãng phí khá lớn.

Thay vào đó, bạn phải thay đổi chiến lược để có thể thu hút những con người “bị động” này bằng các chiến lược employer branding sáng tạo hơn – ví dụ như làm clip về văn hóa làm việc trong công ty. Đăng bài viết phỏng vấn về công ty trên các trang cộng đồng.

Nhất tiễn song điêu!

Câu hỏi quan trọng nhất cho các nhà tuyển dụng vẫn là làm sao để tiêu tiền một đầu mà lợi hai nơi. Bí mật nằm ở chỗ: nếu ta biết cách tập trung ngân sách trong xây dựng thương hiệu cho nhà tuyển dụng, về lâu về dài sẽ giúp bạn giảm thiểu phí tổn trong tương lai một cách không ngờ.

Tăng cường ngân sách cho employer branding sẽ giúp hình ảnh của công ty được nhiều người biết tới, cũng như hiểu về văn hóa làm việc của bạn. Các công ty có hình ảnh tốt và nổi bật sẽ không cần vung quá nhiều tiên cho việc đăng job tuyển dụng ồ ạt kém hiệu quả. Có khi chính các ứng viên sẽ tự “tiến cung” làm việc cho công ty của bạn.

Theo một số liệu của TopDev.vn cung cấp, hiện đã có đến hơn 70% các công ty IT đang hướng đến việc mở rộng chiến dịch làm sang thương hiệu của mình trước mắt các ứng viên, thông qua việc làm gia đặt booth hay làm diễn giả tại các sự kiện như Vietnam Web Summit hay Vietnam Mobile Day. Đây cũng được các chuyên gia đánh giá là một trong những diễn đàn hàng đầu cho việc quảng bá hình ảnh của công ty đến hàng ngàn ứng viên tìm năng một cách hiệu quả nhất.

Tóm lại, việc đầu tư thông minh vào ngân sách Employer Branding ngay từ đầu sẽ giúp bạn tiết kiệm trong tương lai khi quy mô của bạn được mở rộng.

Nguồn: TopDev tổng hợp

Loading Routes trong React

Là một developer, khi chúng ta build app cho user trên internet, điều quan trọng nhất là bảo đảm tốc độ xử lí và phục vụ cho người dùng vẫn nhanh nhất có thể.

Khi build một React app, ta thường hay bắt gặp việc kích thước của ứng dụng bị tăng lên nhanh chóng bởi số lượng dependencies được sử dụng. Nó xảy ra khi một phần của app (hoặc route) có thể đã import một lượng lớn các components không cần thiết khi nó mới load lần đầu tiên, dẫn tới việc tăng thời gian load của app.

Vậy làm sao để chúng ta tiếp cận vấn đề này? Liệu có cách nào để chỉ load những thứ cần thiết và tránh một đống code thừa thãi?

Chúng ta có thể đạt điều đó nhờ vào Lazy Loading. Nó là một cách thức rất hay để tối ưu hóa website của bạn, nó thực hiện điều đó bằng cách chia code của bạn tại những điểm breakpoints, và sau đó load khi user tương tác và cần tới một đoạn code mới. Giúp cho tăng tốc độ load cho app cũng như rút bớt kích thước của ứng dụng do có nhiều đoạn code không hề được load.

Trong React, chúng ta lazy load components và routes bằng cách chia cắt code nhờ vào Webpack. Khi chia app của bạn thành những phần nhỏ và chỉ load những thứ cần cho page render.

Vậy thì hãy thử một React app thật đơn giản và xem thử cách chúng ta có thể lazy load routes.

Bootstrap một React app với create-react-app

Chúng ta sẽ sử dụng create-react-app CLI để bootstrap một React app mới. CLI, vốn được build bởi Facebook giúp developer bằng cách tạo ra một React app hoạt động trơn tru mà không cần bất cứ build configuration nào.

Cái đặt create-react-app tool với command sau:

npm install -g create-react-app

Sau khi qua trình cài đặt đã xong, bạn giờ đây đã có thể tạo một React app bằng command  create-react-app lazy-loading-routes

Nó sẽ tạo ra một new folder với tất cả file cần để chạy React app. Bạn giờ đã có thể đã có thể chạy mọi commands sau:

npm start
npm run build
npm test

 npm start command chạy app trong development mode, command npm run build sẽ build app trong folder  build, và  npm test command sẽ chạy test watcher trong interactive mode.

React app mà chúng ta build sẽ có routes/components sử dụng một hoặc hai React plugins.

Thiếu code splitting, toàn bộ React code và plugins sẽ bị bundled vào thành một JavaScript file, nhưng với code splitting, chỉ component/plugin sẽ cần để load.

Quay trở về việc build một app,  create-react-app CLI sẽ tạo ra một React app như đã nói trên và cho phép chúng ta bắt đầu build ngay lập tức.

Trước hết, hãy set up những routes đơn giản chúng ta sẽ cần tới cho React app. Cho routing, chúng ta sẽ sử dụng react-router. bạn có thể thêm react-router package vào app bằngnpm install react-router-dom trong terminal.

Sau khi quá trình cài đặt đã hoàn thành, chúng ta có thể bắt đầu với việc tạo những components, vốn sẽ đóng vai trò như các routes. Cho app này, chúng ta sẽ dùng 4 routes;  HomeMapsBlog và một route dành cho 404 page  NotFound.

Vào folder  src trong project directory và chạy commands sau:

mkdir Home Maps Blog NotFound

Nó sẽ tạo folder cho nhiều components khác nhau để có thể dùng về sau. Đây là một cách phân chia React app.

Trước khi chúng ta tạo components, hãy  edit App.js file và set up các route đơn giản trước. Mở  App.js file và edit những dòng code sau:

// Import React and Component
import React, { Component } from 'react';
import {
    BrowserRouter as Router,
    Route,
    Switch,
    Link
} from 'react-router-dom'

// Import the Home component to be used below
import Home from './Home/Home'
// Import the Maps component to be used below
import Maps from './Maps/Maps'
// Import the Blogs component to be used below
import Blog from './Blog/Blog'
// Import the NotFound component to be used below
import NotFound from './NotFound/NotFound'
 // Import CSS from App.css
import './App.css';
import createBrowserHistory from 'history/createBrowserHistory';

const history = createBrowserHistory();
class App extends Component {
    render () {
        return (
            <Router history={history}>
                <div>
                    <header className="header">
                        <nav className="navbar container">
                            <div className="navbar-brand">
                                <Link to="/">
                                    <span className="navbar-item">Lazy Loading Routes</span>
                                </Link>
                            </div>

                            <div className="navbar-end">
                                <Link to="/maps">
                                    <span className="navbar-item">Maps</span>
                                </Link>
                                <Link to="/blog">
                                    <span className="navbar-item">Blog</span>
                                </Link>
                            </div>
                        </nav>
                    </header>
                    <section className="content">
                        <Switch>
                            <Route exact path="/" component={Home} />
                            <Route path="/maps" component={Maps} />
                            <Route path="/blog" component={Blog} />
                            <Route path="*" component={NotFound} />
                        </Switch>
                    </section>
                </div>
            </Router>
        )
    }
}

export default App;

Trong dòng code trên, chúng ta imported React và Component module của nó bằng ES6 import, đồng thời bạn cũng cần  BrowserRouterRouteSwitch và  Link từ react-router. Trong  render() function, đầu tiên ta sẽ tạo ra view  cho user dùng để navigate các route khác nhau và sau đó  <Switch> component sẽ giữ những routes khác cũng như component phản ứng đến chúng.

 App.cssfile nên được edit với dòng code sau:

Hãy tiếp tục với components, vào Home folder và tạo ra những file sau: Home.js và  Home.css. Mở  Home.js file và edit những dòng code sau:

import React, { Component } from 'react'
import './Home.css'
import Button from '../NavButton/NavButton'

class Home extends Component {
    render () {
        return (
            <div className="container">
                <section className="section">
                    <div className="container">
                        <h1 className="title">Lazy Loading</h1>
                        <h2 className="subtitle">
                            A simple app to demonstrate how lazy loading routes in React works.
                        </h2>
                        <section className="bottom">
                            <Button name="Go to About page" link="/about" />
                            <Button name="Go to Blog page" link="/blog" />
                        </section>
                    </div>
                </section>

            </div>
        )
    }
}

export default Home

Trong đoạn mã trên, chúng ta đơn giản là tạo ra view cho Home component. Một Button  component được dùng, nó lấy  prop của name và  link. Chúng ta cũng import style từ  Home.css file. Hãy thử viết CSS cho file.

Tiếp theo là Maps route, bạn có thể hiểu map page sẽ đơn giản là hiển thị Google map của một vị trí sử dụng google-map-react React plugin. Vào  Maps folder và tạo những files tiếp theo:  Maps.js và  Maps.css. Mở Maps.js file và edit những code sau:

import React, { Component } from 'react'
import './Maps.css'
import GoogleMapReact from 'google-map-react';

const MapsView = ({ text }) => (
    <div style={{
        position: 'relative', color: 'white', background: 'red',
        height: 40, width: 60, top: -20, left: -30, textAlign: 'center', paddingTop: '5px'
    }}>
        {text}
    </div>
);

class Maps extends Component {
    static defaultProps = {
        center: {lat: 6.5244, lng: 3.3792},
        zoom: 11
    };

    render () {
        return (
            <div className="container">
                <p>This page is simply a page that shows a Google Map view of a location. Play around with the coordinates to get a different view</p>
                <div className="map-container">
                    <GoogleMapReact
                        defaultCenter={this.props.center}
                        defaultZoom={this.props.zoom}
                    >
                        <MapsView
                            lat={6.5244}
                            lng={3.3792}
                            text={'Your Location'}
                        />
                    </GoogleMapReact>
                </div>
            </div>
        )
    }
}

export default Maps

Trong những code trên, đầu tiên ta import  React, và Component module của nó. google-map-react plugin cũng sẽ được import. MapsView() function lấy tham số của text và để nó vào trong một  div.

Kế tiếp, ta có ES6 class tên làMaps với khả năng mở rộng component module từ react. Trong  Maps component, ta set giá trị  props bằng cách sử dụng object defaultProps và  render() function chứa view và  GoogleMapReact component. Nếu bạn muốn đọc thêm về plugin google-map-react bạn có thể vào đây xem.

Hãy thử viết CSS cho  Maps.css file. Mở file và viết code như sau:

Component tiếp theo là Blog component, vốn dùng một React plugin gọi là react-markdown để render markdown vào trong các pure React component. Mở  Blog folder và tạo  Blog.js file. Mở  Blog.js file và edit như sau:

import React, { Component } from 'react'
import ReactMarkdown from 'react-markdown'

class Blog extends Component {
    constructor(props) {
        super(props);

        this.state = {
            markdownSrc: [
                '# Lazy Loading Routes with React\n\nWhy do we need to lazy load routes?.\n\n* Reduce code bloat\n* Avoid loading all components at the same time ',
                '\n* React app loads faster',
                '\n* Load only the component that is needed and preload the others\n',
                '\n## A quote\n\n<blockquote>\n    A man who splits his code ',
                'is a wise man.\n</blockquote>\n\n## How about some code?\n',
                '```js\nimport React, { Component } from \'react\';\nimport asyncComponent from \'./AsyncComponent\'',
                '\n\nimport {\n' +
                '    BrowserRouter as Router,\n' +
                '    Route,\n' +
                '    Switch,\n' +
                '    Link\n' +
                '} from \'react-router-dom\'\n```\n\n\n'
            ].join(''),

            htmlMode: 'raw'
        };
    }
    render () {
        return (
            <div className="container">
                <ReactMarkdown source={this.state.markdownSrc} />
            </div>
        )
    }
}

export default Blog

Trong đoạn code trên, ta sẽ imported react-markdown plugin và dùng nó để render markdown trong  state.markdownSrc vào pure React component trong render() function.

Component cuối cùng là  NotFound route, vào  NotFound folder và tạo  NotFound.js file. Mở  NotFound.js file và edit đoạn code sau:

Ta dùng  Button component trong  Home route trên, và tạo ra một component mới. Trong  src folder, tạo một folder với tên là  NavButton, sau đó tạo một file  NavButton.js trong folder đó. Mở  NavButton.js file và edit như sau:

Trong code trên, ta đã tạo một functional stateless component để tạo view cho một nút. Component là một nút có chức năng giúp navigation trong React app, đạt được điều này là nhờ vào  react-router, vốn được import trên top của file.  Button component nhận vào hai  props;  link và name.  link prop được dùng để xác định route nào để navigate, và  nameprop được dùng để hiển thị đoạn text trong button.

Bây giờ thì bạn đã có thể chạy app để xem tiến triển của mình. Để xem app trong development mode, hãy dùng command npm start trong terminal của bạn và sẽ thấy một homepage tương tự như sau:

Giờ thì ta đã biết  app chạy tốt, hãy thử phân tích và xem app load toàn bộ JavaScript code mà chúng ta đã viết ra như thế nào. Chạy command  npm run build trong terminal để build app:

Bạn có thể thấy toàn bộ JavaScript code đều được nằm trong một file main.....js với kích thước khá nhỏ. Nhưng nếu ta tăng qui mô của app lên thì điều này sẽ cực kì rắc rối bởi kích thước của chúng cũng tăng lên chóng mặt. Do đó ta sẽ dùng tới code splitting.

Code Splitting

Đây chính là lí do vì sao mà ta trải qua mọi thứ. Làm cách nào để áp dụng code splitting trong React app? Đó là nhờ vào Webpack và bởi vì  create-react-app  đã được ship với Webpack, ta sẽ cần thêm config hay eject create-react-app.

Hãy thử xem routes setup mà chúng ta đã defined ở trên:

Với setup như vậy,  Switch component sẽ  render route phù hợp với path mà users navigate thông qua component trên. Vì ta đã import tất cả các component, điều đó có nghĩa là chúng đều sẽ load khi user đến một route nhất định, bao gồm cả những component không cần thiết.

Đó là lúc code splitting tỏa sáng. Code splitting giúp import components và chỉ load chúng khi cần và nhờ đó loại trừ những JavaScript code không cần thiết. Vậy làm cách nào để dùng nó?

Tạo một file tên là  AsyncComponent.js trong  src folder và edit như sau:

asyncComponent()function chọn một tham số, , getComponent vốn là một function sẽ import  một component được cho sẵn. Nó sẽ không được called cho đến khi mount lần đầu tiên. Trên componentWillMount, ta sẽ đơn giản call  getComponent function được pass và lưu loaded component trong state. Cuối cùng, ta render component nếu nó đã load hoàn toàn, còn không thì ta đơn giản render null.

Giờ đã xong  asyncComponent, hãy thay đổi cách import component trong  App.js file bằng cách import chúng  asyncComponent() function. Đoạn code dưới đây trong App.js file sẽ được thay bằng đoạn thứ 2 nếu bạn làm đúng.

Như vậy, kết quả cuối cùng của App.js sẽ trông như thế này:

import React, { Component } from 'react';
import {
    BrowserRouter as Router,
    Route,
    Switch,
    Link
} from 'react-router-dom'

import NotFound from './NotFound/NotFound'
import './App.css';
import createBrowserHistory from 'history/createBrowserHistory';
import asyncComponent from './AsyncComponent'

const Home = asyncComponent(() =>
    import('./Home/Home').then(module => module.default)
)

const Maps = asyncComponent(() =>
    import('./Maps/Maps').then(module => module.default)
)

const Blog = asyncComponent(() =>
    import('./Blog/Blog').then(module => module.default)
)

const history = createBrowserHistory();

class App extends Component {
    render () {
        return (
            <Router history={history}>
                <div>
                    <header className="header">
                        <nav className="navbar container">
                            <div className="navbar-brand">
                                <Link to="/">
                                    <span className="navbar-item">Lazy Loading Routes</span>
                                </Link>
                            </div>

                            <div className="navbar-end">
                                <Link to="/maps">
                                    <span className="navbar-item">Maps</span>
                                </Link>
                                <Link to="/blog">
                                    <span className="navbar-item">Blog</span>
                                </Link>
                            </div>
                        </nav>
                    </header>

                    <section className="content">
                        <Switch>
                            <Route exact path="/" component={Home} />
                            <Route path="/maps" component={Maps} />
                            <Route path="/blog" component={Blog} />
                            <Route path="*" component={NotFound} />
                        </Switch>
                    </section>
                </div>
            </Router>
        )
    }
}

export default App;

Xin chúc mừng, bạn đã áp dụng thành công code splitting, hãy thử thực hiện một số phân tích và xem app chạy như thế nào bằng command  npm run build:

Bạn có thể thấy rằng code đã được chia thành nhiều phần khác nhau , và giờ React sẽ chỉ load những component cần cho path thay vì load mọi thứ.

Lời kết

Code splitting giúp cho việc code không bị phình bự lên. Nếu bạn muốn nhanh hơn nữa thì có thể dùng react-loadableplugin. Nó là một component cao cấp với khả năng load component với promise.

Nguồn: TopDev via scotch

Tham khảo các vị trí việc làm React hấp dẫn

Amanotes – Kẻ viết tiếp giấc mơ game Việt

Magic Tiles 3 của nhà phát hành Amanotes, xuất sắc đánh bại nhiều đối thủ tầm cỡ như: Pokemon Go, Piano Tiles 2, Candy Crush hay Angry Bird, và vươn lên vị trí số 2 (Top All Game) trên kho tải của Google. Từ sau thành công của Flappy Bird rất ít game Việt có thể tạo tiếng vang lớn trên trường quốc tế đến vậy. Câu chuyện đằng sau thành công “ kì diệu” của Magic Tiles 3 là gì?

Thị trường Game Việt cuộc chơi không dành cho tất cả

Từ năm 2008 ngành công nghiệp game bắt đầu manh nha ở Việt Nam và thực sự cất cánh với những cái tên như Thuận Thiên Kiếm (VNG), Điện Biên Phủ 7554 (Emobi Games), tiếp đó là sự xuất hiện của vô số các các dự án game, cao trào là vào năm 2014 Flappy Bird xuất hiện, tạo tiếng vang toàn cầu.

Nhưng cuộc vui lớn chẳng tày gang, tất cả sớm nhận ra làm game ở Việt Nam nghiệt ngã hơn họ nghĩ rất nhiều: thiếu nhân lực, thiếu kiến thức, thiếu kinh nghiệm, cạnh tranh với các sản phẩm nước ngoài, sự ghẻ lạnh của truyền thông nước nhà… Các game Việt lần lượt thất bại ngay trên chính sân nhà. “Cái chết” của chú chim xanh Flappy Bird như giáng một đòn chí tử vào các nhà phát triển game. Rõ ràng, làm game ở thị trường Việt thì đam mê và quyết tâm là chưa đủ để thành công.

Amanotes đang viết tiếp giấc mơ game Việt?

Amanotes được thành lập từ tháng 12 năm 2014 bởi những người trẻ đam mê khởi nghiệp, thích làm game và đặc biệt yêu âm nhac. Ngay từ đầu được định vị là công ty chuyên về âm nhạc, với mục tiêu mang âm nhạc đến gần hơn với mọi người, Amanotes lựa chọn cho mình một hướng đi riêng là truyền tải âm nhạc qua game.

Trước thành công của Magic Tiles 3, Amanotes đã tung ra thị trường 8 game với tổng lượt tải về hơn 35 triệu trên toàn thế giới, chỉ số DAU (Daily Active Users – lượng người sử dụng hằng ngày) từ 800.000 đến hơn 1 triệu người chỉ sau hơn 6 tháng.

Magic Tiles 3 là một thành công đặc biệt khi xuất sắc đánh bại nhiều đối thủ tầm cỡ như: Pokemon Go, Piano Tiles 2, Candy Crush hay Angry Bird, vươn lên vị trí số 2 Games trên kho tải của Google ở Mỹ (trong 4 ngày) và giữ vị trí top 1 Music games trên 70 nước trên toàn thế giới gần như toàn thời gian trong 3 tháng vừa qua (vào thời gian đỉnh điểm của tháng 9 game này còn giữ vị trí top 1 games ở 90 nước)

Bên cạnh đó một sản phẩm cũng khá thành công của Amanotes là Tap Tap Reborn 2 đã được Google lựa chọn để feature trên trang chủ của Google Play. Chỉ tính riêng trong tháng 9 Tap Tap Reborn 2 có hơn 1 triệu lượt tải về với DAU khoảng 200.000 người.

Với một Start-up còn khá trẻ như Amanotes thì đạt được những kết quả như vậy thật đáng kinh ngạc. Và hơn hết, thành công của Amanotes một lần nữa khẳng định game Việt hoàn toàn có thể chinh phục thị trường quốc tế.

Xem tuyển dụng Game Developer tại các công ty hàng đầu trên TopDev

Điều kì diệu đến từ những nỗ lực không ngừng

Chia sẻ về câu chuyện thành công của Magic Tiles 3, anh Nguyễn Tuấn Cường Co-founder của Amanotes chia sẻ: “Xuất phát từ ý tưởng có rất nhiều người yêu thích âm nhạc nhưng có rất ít người có thể chơi được nhạc cụ và có cơ hội trải nghiệm cảm giác chơi nhạc, Amanotes thực hiện sứ mệnh mang những trải nghiệm thú vị đó đến cả những người không biết chơi nhạc. Chỉ với một thiết bị di động và các thao tác đơn giản người chơi đã có thể chơi được một bản nhạc. Khác với những game giả lập chơi nhạc khác Magic Tiles 3 mang đến cảm giác chơi nhạc thực sự chứ không chỉ đơn giản là âm nhạc được tạo ra bởi các phím khác nhau.”

Để có được thành công như ngày hôm nay, đội ngũ tại Amanotes đã trải qua không ít khó khăn những ngày đầu phát triển sản phẩm. Trước Magic Tiles 3, phiên bản Magic Tiles 1, 2 (và một số game khác) không được thành công như mong đợi. Một bài toán nan giải nữa mà công ty phải đối mặt là bài toán kinh phí “làm thế nào để giải quyết bài toán tối ưu hóa hiệu quả với chi phí thấp nhất ?”. Theo anh Cường giải quyết bài toán này cần tập trung vào 3 yếu tố:

  • Tập trung vào ASO (App Store Optimization) vì nó miễn phí, tối ưu từ những điều nhỏ nhất nhưng nếu đủ sâu có thể tạo ra những hiệu quả không ngờ.
  • Xây dựng cộng đồng, chăm sóc từ những người dùng đầu tiên lắng nghe phản hồi từ họ và cải tiến sản phẩm dần dần. Đặc biệt khi phát triển sản phẩm ở thị trường nước ngoài thì cần đặc biệt lưu ý vì insights của họ rất khác với người dùng trong nước, cần phải duy trì kênh đối thoại thường xuyên để nắm bắt kịp thời nhu cầu của người dùng.
  • Hệ thống đo lường: hệ thống đo lường để đánh giá hiệu quả của sản phẩm, biết mình là ai? Và mình đang ở đâu trong định hướng của mình? Đối thủ của mình có điểm mạnh gì?

“Thước đo thành công của một doanh nghiệp làm về game không phải đến từ số lượng lượt tải về, cũng không phải là doanh thu điều quan trọng nhất là học hỏi được gì từ đó, có thể làm gì để cải thiện những phiên bản sau tốt hơn, và phát triển những game khác tốt hơn, có như vậy mới phát triển được cả về chiều rộng lẫn chiều sâu.” – anh Cường cho biết thêm.

Có thể thấy, những gì Amanotes đạt được và hành trình mà Amanotes đang đi là hành trình mang những điều kì diệu.

Nguồn: TopDev

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

Chẳng ai quan tâm bạn chăm chỉ thế nào đâu!

Liệu chúng ta sẽ có thể tách được những nỗ lực và hàng giờ làm việc quần quật ra khỏi cái quy định khen thưởng được không vậy?

Các nhà tâm lý học từ lâu đã nhận thấy được một thứ mà đôi khi được gọi là “ảo giác lao động”: khi đánh giá thành quả công việc của người khác, hầu hết chúng ta sẽ nói rằng mình chỉ chú ý đến việc người ta có hoàn thành công việc nhanh chóng và hiệu quả hay không – nhưng, thực chất, cái chúng ta thực sự để tâm đến lại là sự mệt mỏi và kiệt sức của họ sau khi hoàn thành công việc.

Nhà kinh tế học hành vi Dan Ariely đã kể một câu chuyện về một người thợ sửa khoá, người mà khi tay nghề dần trở nên thành thạo và điêu luyện hơn lại nhận được nhiều lời phàn nàn hơn về giá cả thay vì lời khen và tiền tips.

Mỗi đơn hàng tốn của ông ấy rất ít thời gian và sức lực đến mức khách hàng cảm thấy bị lừa – kể cả khi, một cách khá hiển nhiên, khả năng hoàn thành công việc với tốc độ nhanh (và siêu nhanh) của một thợ khoá là năng lực, chứ không phải lỗi của ông ấy.

Năm 2011, hai nhà nghiên cứu Ryan Buell và Michael Norton từ Trường Kinh doanh Harvard đã tiến hành một nghiên cứu và tìm ra rằng những người sử dụng trang web đặt vé máy bay thực ra thích chờ lâu hơn cho kết quả tìm kiếm – miễn là họ có thể xem được lộ trình chi tiết hiện lên sau đó, cốt để thấy được sự “làm việc chăm chỉ” của website đó khi nó xử lý xử lý cơ sở dữ liệu của từng hàng máy bay một.

Điều này không khác gì một khía cạnh thú vị trong hành vi của khách hàng – nếu không vì thực tế chúng ta thường áp những quy chuẩn kỳ quặc giống hệt nhau lên chính chúng ta. Hãy gọi nó là “Cái Bẫy Của Sự Nỗ Lực”: chúng ta rất dễ có xu hướng thay vì dành ra hai tiếng tập trung cao độ suy nghĩ những vấn đề khó khăn rồi sau đó sẽ có một buổi chiều thảnh thơi và thư giãn, thì chúng ta lại cảm thấy đáng hơn khi ngồi 10 tiếng một ngày chỉ để kiểm tra hòm thư hoặc đợi các cuộc gọi làm ăn. Thế nhưng, bất kỳ một nhà văn, nhà thiết kế hay nhà phát triển web nào sẽ nói với bạn rằng chính hai tiếng tập trung cao độ đó sẽ mang lại hiệu suất công việc cao nhất – cả về hai mặt tiền bạc và trách nhiệm. (Trong cuốn Daily Rituals xuất bản năm 2013 của tác giả Mason Currey, một ấn bản tập hợp những số liệu và hình ảnh về thói quen làm việc hằng ngày của các nghệ sỹ và nhà văn, gần như không có một báo cáo nào về việc có người dành ra nhiều hơn bốn đến năm tiếng một ngày cho những nhiệm vụ sáng tạo chính của họ.)

Đúng vậy, một công việc có giá trị không phải lúc nào cũng kéo theo sự vắt kiệt sức lao động cả: chỉ một vài giờ thật sự chuyên tâm vào nó là đã có thể mang lại cảm giác vô cùng hứng khởi – vậy nên nếu bạn đánh giá chất lượng công việc bằng sự mệt mỏi sau khi đã hoàn thành nó, bạn coi như đã bị lừa rồi.

Để có thể tránh được Cái Bẫy Của Sự Nỗ Lực còn khó khăn gấp đôi, bởi vì văn hoá đã ăn sâu vào tiềm thức của chúng ta với cái ý nghĩ: Làm việc chăm chỉ mới là thứ làm nên chuyện dù thế nào đi chăng nữa. Từ khi còn bé, cha mẹ và thầy cô đã nhồi nhét vào đầu chúng ta giá trị đạo đức của sự nỗ lực và tầm quan trọng của việc “làm hết sức mình”. Vô số phương pháp làm việc hiệu suất cao – thậm chí cả những cái tối ưu nhất, như trong cuốn Getting Things Done của David Allen – đều khuyến khích một lối tư duy “gạch-bỏ-một-thứ-trong-danh-sách”: Những cái danh sách đó ngay từ đầu đã bắt người ta phải liệt kê và theo dõi tiến trình hoàn thành các nhiệm vụ, do đó mà ta quên tự hỏi mình rằng liệu đây có phải là những gạch đầu dòng thích hợp để bắt tay vào công việc hay không.

Và quá nhiều công ty vẫn còn chủ trương truyền đạt đến nhân viên cái ý nghĩ rằng chỉ khi nỗ lực hết sức (một cách thái quá), bằng những giờ làm việc dài đằng đẵng, thì mới có cơ hội được thăng tiến. Mặc dù vậy, trong thực tế, nếu bạn đã hoàn thành xuất sắc công việc và rời văn phòng lúc 3 giờ chiều mỗi ngày, thì một người sếp thực sự tốt là người sẽ không phật ý về chuyện đó. Và điều đó cũng có nghĩa là, bạn không cần thiết phải báo cáo chi tiết hết tất cả những sự nỗ lực bạn đã đặt vào công việc khi đề nghị một sự thăng tiến. Bạn nghĩ một ông sếp người mà chỉ quan tâm đến đầu ra như thế nào sẽ quan tâm ư?

Lời khuyên phổ biến nhất là bạn nên hoàn thành những nhiệm vụ quan trọng nhất trước tiên khi bắt đầu một ngày làm việc có lẽ vẫn là lời khuyên hữu ích nhất; với phương pháp này, thậm chí khi bạn dần đuối sức trong hàng tấn công việc cần giải quyết, thì bạn vẫn sẽ không lãng phí mức năng lượng tốt nhất của mình. Và nếu điều kiện công việc cho phép, hãy thử thực hành những giờ làm việc bị rút ngắn hết mức có thể: Chính sự hạn chế này sẽ có khả năng đẩy nhiệm vụ quan trọng nhất cần hoàn thành của bạn lên hàng đầu. Bạn nên đặt đồng hồ cho cả ngày, để nó nhắc nhở bạn những lúc bạn cần thay đổi sự tập trung của mình.

Tóm lại, hãy nhớ rằng việc tự vắt kiệt sức lực của bản thân – hay lên kế hoạch từng giây từng phút cho một ngày chỉ với công việc và công việc – không phải là một tiêu chí đánh giá đáng tin cậy cho hiệu suất làm việc của bạn. Hãy khiến cho vấn đề trở nên vui tươi hơn: Con đường tiến đến sự hoàn thành công việc một cách đầy sáng tạo có thể sẽ không cần đến quá nhiều nỗ lực như bạn tưởng đâu.

Nguồn: Applancer Careers via tác giả Oliver Burkeman

Bí kíp toàn thư về React mà bạn cần phải biết (phần 2)

react2

PHẦN 1

Fundamental #6: Tất cả các React component đều có câu truyện riêng của chúng

Những điều tiếp theo sẽ chỉ áp dụng cho class component (dùng cho mở rộng React.Component). Function component thì lại có một câu truyện hoàn toàn khác.

  1. Đầu tiên, ta define một template cho React để tạo ra các elements từ component.
  2. Sau đó ta chỉ cho React để sử dụng nó. Ví dụ, dùng trong một  rendercall của một component khác, hoặc với  ReactDOM.render.
  3. Rồi React instantiates một element và cho nó một set các props mà ta có thể truy cập với  this.props.
  4. Bởi nó hoàn toàn là JavaScript, constructor sẽ được call (nếu đã được defined). Đây chính là phần đầu của quá trình: component lifecycle.
  5. React sau đó tính toán output của render (virtual DOM node)
  6. Do đây là lần đầu tiên React render element, React sẽ giao tiếp với browser để hiện thị element tại đó. Quá trình này còn được biết là mounting.
  7. Khi đó, React sẽ tiếp tục dùng một lifecycle khác, gọi là componentDidMount. Chúng ta có thể dùng cách này, ví dụ như, để làm gì đó trên DOM trong trình duyệt web ( hồi trước thì chỉ có thể làm với virtual DOM).
  8. Tới đây thì có một số components đã hoàn thành sứ mệnh của mình. Trong khi các components khác được unmounted khỏi browser DOM bởi nhiều lí do khác nhau. Để năng chặn điều đó, React sẽ chạy một lifecycle khác là componentWillUnmount.
  9. Do vậy, state của bất cứ mounted element nào cũng có thể thay đổi. Do đó mà component của element đó có thể sẽ bị re-render. Như vậy, mounted element sẽ có thể nhận một set các props khác. Đó là lúc React thật sự tỏa sáng với khác năng của nó. Đây cũng chính là lúc chúng ta cần tới React nhất.
  10. Câu truyện vẫn chưa kết thúc nhưng trước khi có thể tiến lên, chúng ta cần hiểu về cái state có ý nghĩa gì?

Fundamental #7: React components có thể có một private state

Những nội dung tiếp theo cũng sẽ chỉ áp dụng cho class components.

State class field khá là đặc biệt trong bất kì React class component nào. React luôn theo dõi mọi thay đổi trong component state. Nhưng để React có thể làm công việc trên thật hoàn hảo, chúng ta sẽ phải thay đổi state field qua một React API,  this.setState:

// Example 13 -  the setState API
// https://jscomplete.com/repl?j=H1fek2KH-
class CounterButton extends React.Component {
  state = {
    clickCounter: 0,
    currentTimestamp: new Date(),
  };
  
  handleClick = () => {
    this.setState((prevState) => {
     return { clickCounter: prevState.clickCounter + 1 };
    });
  };
  
  componentDidMount() {
   setInterval(() => {
     this.setState({ currentTimestamp: new Date() })
    }, 1000);
  }
  
  render() {
    return (
      <div>
        <button onClick={this.handleClick}>Click</button>
        <p>Clicked: {this.state.clickCounter}</p>
        <p>Time: {this.state.currentTimestamp.toLocaleString()}</p>
      </div>
    );
  }
}
// Use it
ReactDOM.render(<CounterButton />, mountNode);

Đây là ví dụ quan trọng nhất mà bạn cần phải hiểu. Nó sẽ giúp bạn hoàn chỉnh kiến thức cơ bản về React. Sau ví dụ này, vẫn có một vài điều nhỏ khác bạn cần phải biết nhưng chúng tùy thuộc vào bản thân cũng như kĩ năng JavaScript của bạn.

Hãy cùng xem qua ví dụ 13 trên, bắt đầu với class fields. Bao gồm 2 phần,  state field được initialized với object chứa một  clickCounter bắt đầu tại  0, và một  currentTimestamp bắt đầu với  new Date().

Class field thứ hai là  handleClick function, vốn chúng ta sẽ pass đến onClick event cho button element trong render. handleClick sẽ chỉnh sửa component instance state nhờ vào  setState.

Một nơi khác mà chúng ta sẽ chỉnh sửa là state bên trong timer của  componentDidMount  lifecycle. Mỗi giây trôi qua, nó sẽ thực hiện một call đến this.setState.

Trong render, chúng ta dùng hai properties mà ta có trong state với một syntax đọc bình thường. Không hề có sử dụng bất cứ API đặc biệt nào.

Bạn có thể thấy chúng ta update state sử dụng 2 cách khác nhau:

  • Bằng cách pass một function với khả năng return một object. Chúng ta đã làm cách này trong handleClick function.
  • Bằng cách pass một object.Chúng ta thực hiện cách này trong phần callback.

Cả hai cách đều hiệu quả, nhưng cách đầu tiên được ưa chuộng hơn bởi bạn có thể vừa đọc và viết vào state cũng một lúc. Bên trong callback nội bộ, chúng ta chỉ viết đến state mà không đọc nó. Mỗi khi bạn thấy không ổn, hãy dùng tới function-as-argument syntax.

Ta update state bằng cách này? Chúng ta return một object với value mới mà ta muốn update. Bạn có thể thấy rằng cả hai calls đến setState, chúng ta chỉ pass một property từ state field chứ không phải cả hai. Điều này là hoàn toàn bình thường bởi  setState sẽ merge (hợp nhất) những thứ pass qua nó với state. Do đó nếu bạn không chỉ định một property khi call setState sẽ có nghĩa rằng bạn không muốn thay đổi property đó.

Fundamental #8: React sẽ luôn React (Phản ứng)

Tên của React bắt nguồn từ việc nó luôn phản ứng lại (React) những thay đổi trong state.

Tuy vậy, sự thật là khi những state trong component được update, React sẽ tự động phản ánh lại những update trong browser DOM (nếu cần).

Hãy nghĩ rằng render function’s input đều là:

  • Những props được pass bởi nhóm parent
  • Internal private state có thể update được bất cứ khi nào

Khi input của render function thay đổi thì output của nó cũng có thể thay đổi theo.

React có lưu trữ history của renders và khi nó xác định được một render khác so với render trước, nó sẽ tính toán sự khác biệt, chuyển dịch vào DOM operations và được executed  trong DOM đó luôn.

Fundamental #9: React chính là agent của bạn

Bạn có thể nghĩ React giống như là một đặc vụ agent được bạn thuê để giao tiếp với browser. Lấy ví dụ về timestamp hiển thị ở trên, thay vì phải thủ công vào browser và invoke DOM API operation để tìm và update  p#timestamp element mỗi giây, chúng ta vừa thay đổi một property trên một state của component và React thực hiện nghĩa vụ giao tiếp với browser cho chúng ta. Tôi tin rằng đấy chính là lí do vì sao mà React lại trở nên nổi tiếng.

Fundamental #10: Mọi thứ của React đều là về components (Phần 2)

Giờ thì chúng đã hiểu về state của một component cũng như điều gì xảy ra khi state thay đổi, hãy cùng nhau tìm hiểu thêm về quá trình này:

  1. Một component có thể cần re-render khi state của nó được update hoặc component ba mẹ thay prop và ảnh hưởng tới component con.
  2. Nếu đều thứ 2 xảy ra, React sẽ lập tức thực hiện componentWillReceiveProps.
  3. Nếu state object hoặc quá trình passed-in prop bị thay đổi, React sẽ cần phải đưa ra một quyết định quan trọng đó là có nên update component trong ROM hay không? Đó là vì sao mà React sẽ sử dụng shouldComponentUpdate. Tùy thuộc vào việc bạn cần chỉnh sửa hay tinh chỉnh quá trình render mà bạn có thể set là true hoặc false.
  4. Nếu không có custom  shouldComponentUpdate rõ ràng, React sẽ tự defaut điều chỉnh sao cho phù hợp nhất.
  5. Đầu tiên, React sẽ thực hiện componentWillUpdate. Sau đó React sẽ tính toán rendered output mới và so sánh nó với kết quả cũ.
  6. Khi rendered output giống nhau thì React sẽ không làm gì cả.
  7. Còn nếu có khác nhau thì React sẽ thông bao lại cho Browser và quá trình sẽ diễn ra như những chúng ta đã biết ở trên.
  8. Trong mọi trường hợp, quá trình update cũng sẽ xảy ra nên React sẽ thực hiện componentDidUpdate.

Những phương pháp trên chính là Lifecycle. Tuy vậy bạn vẫn có thể tạo ra một app hoàn chỉnh mà không cần tới chúng. Tuy vậy, phương pháp Lifecycle rất tiện lợi cho việc phân tích mọi thứ đang diễn ra trong app cũng như tinh chỉnh để cải thiện hiệu năng của React sau mỗi lần update.

Và thế là bạn đã hoàn toàn biết được mọi nền tảng của React rồi đấy. Nếu bạn cảm thấy hứng thú và vẫn muốn biết thêm thì có thể đọc bài viết tiếp theo của tôi tại: Getting Started with React.js course at Pluralsight.

Nguồn: topdev.vn via Medium

Tham khảo thêm vị trí tuyển dụng React lương cao up to 2000USD

Tiếp cận ứng viên IT đúng cách, tưởng dễ hóa ra lại không

Gọi điện thoại bị ứng viên cúp máy, chúng ta đang sai ở chỗ nào?

Theo các số liệu gần đây của TopDev, nhu cầu nhân lực của các doanh nghiệp từ nay đến năm 2020 là khoảng 400.000 người, trong khi toàn bộ hệ thống cung cấp nhân lực về CNTT trên cả nước chỉ có khả năng đáp ứng quá nửa con số ấy. Thiếu hụt nhân lực công nghê thông tin (IT) tại Việt Nam không phải là câu chuyện quá mới, nhưng chưa bao giờ hết hot.

Có bao giờ bạn rơi vào tình trạng vừa alo chưa kịp nói đến câu thứ ba đã bị ứng viên cúp máy? Hiện có rất nhiều nhà tuyển dụng thường nghĩ thật dễ dàng để thu hút ứng viên nhưng trong thị trường tuyển dụng hiện nay, không phải trường hợp nào cũng đúng. Một sự thật không thể phủ định rằng, phần lớn các lập trình viên “ngon” đều đã “yên bề gia thất” (vì thế mà họ không còn tích cực chủ động tìm kiếm nơi mới, nói thẳng ra là tôi không quan tâm) nên nếu không khéo léo tiếp cận thì chính nhà tuyển dụng sẽ phải bị loại ngay từ vòng gửi xe.

Luôn luôn lắng nghe luôn luôn thấu hiểu

Trước hết hãy thử bắt đầu câu chuyện bàng việc tâm tình và chia sẻ về công việc cuộc sống của ứng hiên hơn là bắt đầu bằng những câu như “ bạn đã có công việc ổn định chưa? Hãy luôn nhớ rằng nếu không có “màn dạo đầu” thật tình cảm thì tỉ lệ chuyển đổi sẽ rất thấp, tiếp cận sâu sắc sẽ dễ thu hút ứng viên hơn.

Nắm bắt insight của lập trình viên

  • Họ muốn người từ 1 công ty lớn, có uy tín gọi cho họ, thay vì để họ nghĩ từ 1 trang môi giới
  • Họ muốn được người giỏi hơn họ tiếp cận họ.

Ví dụ Tech Lead tại 1 công ty, CTO tại 1 công ty gọi cho họ sẽ cảm thấy sung sướng và được trân trọng hơn rất nhiều lần, tỷ lệ họ muốn lắng nghe về công ty cùa bạn sẽ cao hơn. Đây cũng chính là mấu chốt của vấn đề.

Sự trân trọng khiến họ phải tìm hiểu thêm về thông tin uy tín của công ty hay danh tiếng của người gọi cho họ. Khi đó niềm tin và sự hứng thứ vào cty, sản phẩm cty và người lãnh đạo làm việc cùng sẽ khiến họ gia tăng khả năng chọn lựa cty thành điểm đến sau đó của mình.

Lập trình viên thời buổi này không phải đi “xin” việc

Ở đây, chúng ta cần phải đập bỏ đi những quan niệm xưa cũ rằng như tôi là nhà tuyển dụng tôi là “bề trên”, điều này đã không còn đúng với ngành IT khi mà thị trường ngày càng khan hiếm các lập trình viên chất lượng. Các công ty lớn nhỏ đều ráo riết săn đón những tài năng lập trình, vậy thử hỏi nếu vẫn tư duy cách cũ thì lấy đâu ra người chịu ứng tuyển vào công ty của mình.

Hiểu đúng hơn, chúng ta không phải hạ mình nhưng ít nhất các nhà tuyển dụng cần có một sự kết nối giữa nhu cầu người tìm việc và nhà tuyển dụng. Không bên nào có vị thế cao hơn bên nào hết mà hai bên cần nhau.

Câu hỏi mang tính xây dựng mối quan hệ

Bạn có bao giờ nghĩ rằng mời job cũng giống như sale 1 món hàng vậy. Để người nghe hứng thú với một món hàng chưa có nhu cầu, thì bạn phải khơi gợi nhu cầu trước khi bán món hàng đó. Tiếp cận 1 ứng viên tiềm năng chưa có nhu cầu hoặc bạn chưa đoán biết được họ còn có nhu cầu hay không giống như bạn bán 1 cây lược cho 1 người chưa mọc tóc. Vậy vấn đề ở đây là làm sao để họ thấy món hàng đó cần thiết và phục vụ nhu cầu của họ? Phải đánh trúng được nhu cầu hay kỳ vọng của họ ở một môi trường làm việc và từ đó đưa ra “món hàng” của mình đến họ có chủ đích. Khơi gợi nhu cầu từ từ.

Thái độ kỳ vọng tích cực là dấu hiệu của tính cách vượt trội.

Kỳ vọng là một điều tốt, tuy nhiên nếu không biết đặt kỳ vọng của mình vào đúng chỗ nó sẽ làm tổn hại đến cả hai bên. Có thể do chúng ta đặt kỳ vọng quá cao ở cuộc gọi đầu tiên, rằng ứng viên sẽ yêu thích ngay công việc và gật đầu đồng ý. Bạn phải biết rằng, thực tế cho thấy 1 ngày ứng viên tiềm năng đó có thể tiếp nhận 5 cuộc điện thoại nhạt nhòa như cách bạn đã làm. Nên kỳ vọng cao sẽ dẫn đến sự thất vọng cao tương tự. Thay vì vậy, chia nhỏ kỳ vọng của bạn thành từng chặng cảm xúc thông qua 1 số lượng cuộc gọi nhất định. Và đặc biệt là phải tùy chỉnh theo từng trường hợp ứng viên.

Áp lực việc tuyển dụng nhanh gọn và thành công có thể khiến bạn luôn ngụp lặn trong deadline và những cuộc điện thoại xáo rỗng. Công ty mất tiền điện thoại, bạn mất thời gian gọi và ứng viên mất thời gian nghe máy nhưng lại chẳng đem lai kết quả nào.

Một ngày đẹp trời, Tèo nhận được 2 cuộc điện thoại:

Cuộc đầu tiên:

  • Alo
  • Chào anh, anh có phải là Tèo lập trình Java không?
  • Đúng rồi bạn.
  • Tèo có nhu cầu tìm việc Java Developer không?
  • À không bạn nha.
  • Ok vậy chào anh Tèo nha.

Cuộc thứ hai:

  • Alo
  • Chào em, em có phải là Tèo chuyên lập trình Java không?
  • Đúng rồi ạ.
  • Chào em, anh là CTO của công ty Top Tèo, anh được biết em đang code Java cũng 2-3 năm nay rồi. Dạo này công việc thế nào?
  • Dạ chào anh. Dạo này công việc cũng ổn, lương ổn định, môi trường tốt, được học cái này cái kia.
  • Ngoài Java thì em có đang tìm hiểu công nghệ nào mới không?

Theo bạn cuộc gọi nào sẽ gây ấn tượng với ứng viên tài năng nhiều hơn? Tất nhiên cuộc gọi thứ 2 rõ ràng hiệu quả hơn hẳn

Trong tình hình thị trường tuyển dụng ngày càng khốc liệt như hiện nay, số lượng người giỏi hạn chế, tìm được ứng viên vừa ý cho một vị trí là một điều không dễ dàng nhiều công ty thất bại ngay lúc gửi đề nghị nhận việc cho ứng viên. Chính vì vậy, hãy là một nhà tuyển dụng tinh tế. Và luôn nhớ rằng, màn dạo đầu tốt luôn là khởi đầu cho những thành công tốt đẹp nhất!

Nguồn: TopDev tổng hợp

Cách biến công việc thời vụ thành lâu dài

young female office worker

Đối với các doanh nghiệp thì một trong những lý do chính làm họ phải tuyển nhân viên thời vụ là đáp ứng nhu cầu sản xuất hoặc tiêu thụ gia tăng mạnh trong các kỳ lễ. Đặc biệt trong đó có không ít nhà tuyển dụng đã sử dụng cơ hội này như dịp để tìm và giữ chân những nhân viên xuất sắc.

Trong khi xét về người lao động, bên cạnh một số cá nhân tìm công việc ngắn hạn vì cần thêm nguồn thu nhập phụ trong các dịp lễ hay đơn giản chỉ là muốn thử sức ở nhiều vị trí khác nhau, thì phần lớn người làm việc thời vụ vẫn nuôi hi vọng sẽ có thể học thêm kỹ năng, tích lũy kinh nghiệm và có bước tiến triển khi được nhận làm việc toàn thời gian.

1. Quan sát xem công ty đang có nhu cầu tuyển dụng không

Nếu muốn tìm kiếm công việc ổn định, hãy trao đổi sớm về các khả năng này. Hãy trò chuyện với nhà tuyển dụng ngay từ buổi đầu để họ biết được dự định, mối quan tâm và ước muốn ở lại làm việc lâu dài cùng công ty của bạn nhằm có kế hoạch phù hợp.
Nếu bạn đang nhận một công việc chỉ phát sinh trong những ngày lễ, ví dụ như Ông già Noel, giao quà Tết… thì cũng hãy khám phá thêm những cơ hội hoặc vị trí mở từ các phòng ban, bộ phận khác trong công ty.

2. Tìm hiểu thêm về doanh nghiệp và xem xét khả năng phát triển của công việc

Bạn chỉ có thể biến công việc tạm thời của mình thành vị trí chính thức nếu bạn thực sự yêu thích những gì đang làm hoặc công ty đó. Vì vậy, hãy nhớ đây luôn là “đường hai chiều”. Trong lúc nhà tuyển dụng kiểm tra năng lực của bạn, thì bạn cũng hãy đánh giá về tiềm năng làm chủ của họ. Khám phá xem một nhân viên trong tổ chức này sẽ phải thế nào và quyết định xem bạn có muốn gắn bó lâu dài hay không trước khi “quăng” mình vào đó. Tuy nhiên, dù bằng cách nào, bạn cũng phải luôn hoàn thành tốt nhất công việc đang đảm nhiệm và cống hiến hết sức, bởi vì bạn không biết lúc nào mình sẽ cần đến sự giúp đỡ của công ty này khi tìm việc trong tương lai đâu.

3. Quan tâm đến đồng nghiệp

Hãy thân thiện và tích cực cũng như nỗ lực tìm hiểu về những người xung quanh. Có rất nhiều công ty sẽ quyết định tuyển dụng một người dựa vào cách người đó tương tác với đồng nghiệp. Bằng cách làm cho sự hiện diện của mình luôn được đánh giá cao, chứ không phải là ngán ngẩm hoặc né tránh, bạn đã tạo cho mình thêm cơ hội được xem xét làm việc dài hạn.

4. Thể hiện sự nhiệt tình và có thái độ tốt

Thái độ tốt sẽ làm nên tất cả. Hãy luôn mỉm cười và là người hữu ích, tràn đầy năng lượng trong mỗi ngày làm việc! Khi làm việc tại các công ty, đặc biệt trong ngành bán lẻ, bạn sẽ luôn bận rộn và căng thẳng rất nhiều. Vì thế, mỗi sáng hãy chuẩn bị một tinh thần thật tích cực để sẵn sàng đối diện với mọi thách thức cho cả ngày dài làm việc. Thái độ tiêu cực tại nơi làm việc ảnh hưởng đến tất cả mọi người, nên bạn hãy là người duy trì năng lượng và thúc đẩy hiệu suất nhé!

Ngoài thái độ tích cực và sự nhiệt tình, hãy bày tỏ lòng quan tâm thực sự đến công ty, với đồng nghiệp và những công việc họ đang làm. Những ai thể hiện sự quan tâm thực sự đến công việc sẽ tạo ra những tác động tích cực đến nhiều nhân viên khác.

5. Hành xử phù hợp với tình huống

Hãy luôn chuyên nghiệp, bất kể công việc của bạn là gì! Điều này giúp người thuê bạn sẽ hình dung ra được rằng bạn trông như thế nào khi làm việc chính thức. Hãy cho công ty thấy được tác phong và cung cách của một nhân viên thực thụ, không phải một người làm việc tạm bợ theo mùa.

Không chỉ là vẻ chuyên nghiệp mỗi khi bạn xuất hiện, điều quan trọng là phải biết cách ăn mặc phù hợp, cư xử tốt với tất cả những người bạn gặp và cố gắng không tạo ra xung đột.

6. Làm việc tập trung vào chi tiết và linh hoạt

Hãy khiến mọi thứ trở nên tốt hơn sau khi có sự tham gia của bạn. Điều này cho thấy bạn là một thành viên giỏi, bạn tự hào về công việc và khả năng của mình.

Song song đó, những công việc thời vụ thường có thể kéo dài trong nhiều giờ (như những đợt bán khuyến mại và giao hàng sau) vì vậy sự linh hoạt trong quá trình làm việc rất quan trọng. Nó là điểm cộng có thể giúp bạn được lọt vào danh sách nhân viên tiềm năng khi công ty cân nhắc tuyển chọn một vi trí ký hợp đồng lâu dài.

7. Chứng minh phẩm chất lãnh đạo

Nếu bạn đang làm việc trong một nhóm, hãy đưa ra các ý tưởng và giúp đỡ những người khác hoàn thành nhiệm vụ. Điều này cho người giám sát thấy rằng bạn là nhân viên tiềm năng cho công việc lâu dài, vì bạn có thể tạo thêm nhiều giá trị cho công ty.

8. Vượt hơn những mong đợi

Hãy làm việc bằng 110% khả năng để người giám sát có thể thấy sự cống hiến hết mình của bạn. Và như thế nghĩa là bạn đã tăng cơ hội khiến cấp trên chú ý đến mình lên đáng kể, một cách tích cực.

Đừng ngại đặt câu hỏi nếu bạn không chắc chắn. Điều này rất quan trọng, nó cho thấy rằng bạn giao tiếp chủ động và muốn làm đúng công việc, hơn là chỉ lặng lẽ làm ngay cả khi không hiểu chính xác mình được yêu cầu làm gì.

Tìm kiếm thông tin phản hồi và tự đo lường hiệu suất là chìa khóa cần thiết để bạn phát triển và nâng cao kỹ năng. Người tuyển dụng sẽ đánh giá cao tinh thần sẵn sàng học hỏi. Bạn sẽ chứng minh cho công ty thấy được phẩm chất tốt của mình khi biết quan tâm đến thông tin phản hồi.

9. Có mặt sớm và ở lại đến khi mọi công việc trong ngày đã xong

Hãy nói “Xin chào” với đồng nghiệp khi bạn vừa đến cơ quan và tóm tắt lại những gì mình đã cống hiến và hoàn thành khi bạn kết thúc ngày làm việc. Hãy luôn tạo ra một “dấu mốc” để xác nhận công việc mình đã thực hiện, ngay cả khi người khác không thừa nhận bạn. Bạn nên để lại ấn tượng lâu dài, và những điều rất nhỏ như một lời chào đơn giản cũng sẽ có thể giúp bạn tiến xa hơn.

10. Mạng lưới quan hệ

Có khả năng là bạn sẽ gặp gỡ rất nhiều người mới trong thời gian làm việc thời vụ. Hãy tận dụng cơ hội này để xây dựng mạng lưới quan hệ thật chuyên nghiệp. Những kết nối mới có thể giúp bạn tìm thấy công việc ổn định ở ngay chính công ty này, hoặc một công ty khác, khi hợp đồng làm việc tạm thời của bạn kết thúc.

11. Là người đáng tin cậy

Không có gì tệ hơn là bạn đến muộn hoặc gọi điện báo bệnh khi sếp đang đợi để giao việc cho bạn, đặc biệt là trong mùa lễ hội bận rộn. Hãy cho họ thấy giá trị thực sự của bạn và đặt công việc lên trước mọi ưu tiên khác. Điều này chứng minh bạn là nhân viên toàn thời gian lý tưởng.

12. Thực hiện nhiệm vụ tạm thời như là công việc lâu dài

Đây có lẽ là phần quan trọng nhất của lời khuyên, nếu bạn cư xử trong vị trí tạm thời của mình như một công việc lâu dài, nhà tuyển dụng sẽ có cảm giác như bạn là nhân viên chính thức của họ. Nó cho thấy rằng bạn có xu hướng cam kết lâu bền, bạn sẵn sàng làm việc cùng công ty và thực hiện những điều vượt xa hơn mong đợi.

Nguồn: Applancer Careers

Làm thế nào để tư duy như 1 programmer?

“Tôi không hiểu lắm về Javascript. Tôi không thể tạo components ngay từ đâu. Tâm trí tôi quên khoáy hết mọi thứ khi nhìn vào 1 file Javascript trống trơn nào đó. Tôi tự thấy mình không thể lập trình được vì tôi không biết suy nghĩ như 1 programmer“.

Nghe quen không? Bạn không cô đơn đâu. Rất nhiều người chọn Javascript làm ngôn ngữ lập trình đầu tiên cũng đối mặt với vấn đề tương tự.

Thậm chí các developer code với ngôn ngữ khác cũng gặp trường hợp như thế. Thay vì nghĩ rằng “Tôi không thể tư duy như 1 programmer”, họ nên nói là: “Tôi không thể tư duy theo Javascript”

Đừng lo, hôm nay tôi sẽ giúp bạn giải quyết chuyện này.

Bạn thực ra đã tư duy như 1 programmer rồi

Bạn đã từng thử làm 1 số bài tập đơn giản về Javascript trên freeCodeCamp, Code Academy hay Code Wars?

Nếu đã từng thì bạn ắt hẳn sẽ hiểu rõ cách thức để suy nghĩ như 1 programmer.

Lý do thực sự khiến đầu óc của bạn hoàn toàn trống rỗng khi đối diện với file Javascript nhiều khả năng xuất phát từ thứ gọi là coder’s block – rào cản của coder. Bạn sợ sẽ viết những những dòng code Javascript không chạy. Bạn sẽ đối mặt với các lỗi. Bạn không biết nên bắt đầu từ đâu.

Vượt qua rào cản này khá đơn giản, chỉ cần theo 4 bước sau:

  1. Chia nhỏ vấn đề thành các vấn đề nhỏ
  2. Tìm kiếm các giải pháp cho các vấn đề nhỏ hơn này
  3. Kết nối các giải pháp thật mạch lạc
  4. Cấu trúc lại và hoàn thiện

Cùng đi sâu vào từng bước.

Bước 1: Chia nhỏ vấn đề thành các vấn đề nhỏ hơn

Làm thế nào để bỏ con voi vào tủ lạnh?

Đây là cách mà hầu hết mọi người sẽ trả lời:

  1. Mở cửa tủ lạnh
  2. Đặt con voi vào
  3. Đóng cửa tủ lạnh

Vấn đề đã được giải quyết.

Câu trả lời này là ví dụ kinh điển nhất lý giải tại sao bạn lại trở nên bế tắc khi gặp phải 1 file Javascript trống trơn. Vì câu trả lời đã bỏ qua các bước quan trọng.

Nếu suy nghĩ 1 cách logic thì bạn ắt hẳn sẽ gặp 1 số vấn đề hiển nhiên không có câu trả lời:

  1. Loại tủ lạnh mà chúng ta đang nói đến là hiệu gì?
  2. Con voi này là con voi gì?
  3. Nếu con voi quá lớn không thể nhét vừa tủ lạnh thì phải làm sao?
  4. Bạn tìm thấy con voi ở đầu trước tiên?
  5. Làm thế nào để chuyển con voi vào tủ lạnh?

Khi code, bạn cần phải trả lời hết từng câu hỏi nhỏ mà bạn nghĩ đến. Đó là lý do tại sao bước đầu tiên là chia nhỏ vấn đề thành những mảng nhỏ hơn.

Bước 2: Tìm kiếm giải pháp cho những vấn đề nhỏ hơn

Bước thứ 2 là tìm kiếm giải pháp cho từng vấn đề nhỏ hơn và quan trọng là cần càng chi tiết càng tốt.

  1. Loại tủ lạnh nào? —  tủ lạnh trong nhà bếp của bạn
  2. Loại voi nào? —  voi đồng cỏ Châu Phi
  3. Chuyện gì sẽ xảy ra nếu con voi quá lớn? — Dùng shrink gun – súng thu nhỏ để thu nhỏ con voi.
  4. Bạn tìm con voi này ở đâu? — Châu Phi
  5. Bạn vận chuyển con voi này như thế nào?— Đặt nó vào túi sau khi thu nhỏ rồi mang lên máy bay đem về nhà.

Thỉnh thoảng, bạn cần phải đào sâu thêm vài lớp để có được câu trả lời bạn cần. Trong ví dụ ở trên, bạn cần phải khai thác kĩ câu số 3 hoặc số 4.

  1. Bạn lấy súng thu nhỏ ở đâu? – Mượn từ nhà khoa học điên loạn nào đấy gần nhà
  2. Bạn có thể tìm con voi ở đâu của Châu Phi? -  Công viên  Addo Elephant ở Châu Phi.

Một khi bạn có câu trả lời cho tất cả các vấn đề nhỏ hơn, bạn gắn kết chúng lại để giải quyết vấn đề lớn.

Bước 3: Kết nối các giải pháp 1 cách liền mạch

Trong ví dụ đặt-voi-vào-tủ lạnh trên, bạn có thể theo các bước sau:

  1. Lấy súng thu nhỏ từ nhà khoa học cạnh nhà
  2. Bay đến Châu Phi
  3. Di chuyển đến Công viên Addo Elephant
  4. Tìm 1 con voi trong công viên
  5. Bắn voi bằng súng thu nhỏ
  6. Đặt con voi đã được thu nhỏ vào túi xách
  7. Di chuyển đến sân bay
  8. Bay trở về nước
  9. Đi đến nhà
  10. Đặt voi vào tủ lạnh

Vấn đề được giải quyết.

Hãy xem 1 ví dụ thực tế

Giả dụ bạn muốn tạo 1 button để khi click vào, sẽ hiển thị 1 sidebar.

Bước 1—chia nhỏ vấn đề

Chia component thành các phần nhỏ hơn. Và đây là 1 số vấn đề cần xác định:

  1. Markup của button là gì?
  2. Giao diện của button như thế nào?
  3. Chuyện gì sẽ xảy ra khi button được click 1 lần?
  4. Chuyện gì sẽ xảy ra khi button được click 1 lần nữa?
  5. Chuyện gì sẽ xảy ra khi button được click lần thứ 3?
  6. Markup của sidebar này là gì?
  7. Sidebar trông như thế nào khi nó được hiển thị?
  8. Sidebar trông như thế nào khi nó được ẩn đi?
  9. Sidebar sẽ được hiển thị như thế nào?
  10. Sidebar sẽ biến mất như thế nào?
  11. Sidebar có nên hiển thị khi page đang tải không?

Bước 2 —tìm kiếm giải pháp cho các vấn đề

Để tìm được giải pháp, bạn cần ohari có kiến thức về tình huống đang gặp. Trong trường hợp này, bạn cần phải biết đủ về HTML, CSSJavascript.

Đừng quá lo lắng nếu bạn không có câu trả lời cho bất kì câu hỏi nào. Nếu bạn phân nhỏ câu hỏi đủ tốt, bạn có thể tìm ngay câu trả lời trên Google trong 5 phút.

Hãy trả lời từng câu hỏi sau:

Markup của button này là gì?

Markup là 1 tag <a> với class của .button.

<a href="#" class="button">Click me</a>

Giao diện của button này trông như thế nào?

Button này cần có CSS như sau:

.btn {
  display: inline-block;
  font-size: 2em;
  padding: 0.75em 1em;
  background-color: #1ce;
  color: #fff;
  text-transform: uppercase;
  text-decoration: none;
}

Chuyện gì xảy ra nếu button được click 1 lần? 2 lần? 3 lần?

Sidebar nên hiển thị khi button được click 1 lần. Sau đó, sidebar sẽ biến mất khi button được click lần nữa. Sidebar sẽ hiển thị lại khi button được click lần nữa.

Markup của sidebar này là gì?

Sidebar sẽ là <div> gồm  1 dãy các links:

<div class="sidebar">
  <ul>
    <li><a href="#">Link 1</a></li>
    <li><a href="#">Link 2</a></li>
    <li><a href="#">Link 3</a></li>
    <li><a href="#">Link 4</a></li>
    <li><a href="#">Link 5</a></li>
  </ul>
</div>

Giao diện của sidebar khi sidebar được hiển thị?

Sidebar nên được đặt bên phải của cửa sổ và cần được cố định để user nhìn thấy. Sidebar rộng 300px.

Khi giải quyết xong vấn đề, bạn sẽ có được CSS tương tự như sau:

.sidebar {
  position: fixed;
  top: 0;
  bottom: 0;
  right: 0;
  width: 300px;
  background-color: #333;
}

.sidebar ul {
  margin: 0;
  padding: 0;
}

.sidebar li {
  list-style: none;
}

.sidebar li + li {
  border-top: 1px solid white;
}

.sidebar a {
  display: block;
  padding: 1em 1.5em;
  color: #fff;
  text-decoration: none;
}

Sidebar sẽ trông như thế nào khi được ẩn đi?

Sidebar nên được chuyển khoảng 300px sang phải để ra khỏi màn hình hiển thị.

Khi trả lời câu hỏi này, sẽ có 2 câu hỏi khác phát sinh:

  1. Làm thế nào để biết được liệu sidebar nên được hiển thị hay nên được ẩn đi?
  2. Làm thế nào để thiết kế sidebar ẩn?

Hãy cùng trả lời hết các câu hỏi này.

Làm thế nào để biết được liệu sidebar nên được hiển thị hay nên được ẩn đi?

Nếu sidebar có 1 class .is-hidden, sidebar nên được ẩn khỏi view. Ngược lại, vẫn thấy được sidebar.

Làm thế nào để thiết kế sidebar ẩn?

Hãy sử dụng translateX để chuyển sidebar 300px sang phải vì transform là 1 trong những properties để animation tốt hơn. Styles của bạn sẽ trở thành như này:

.sidebar.is-hidden {
  transform: translateX(300px);
}

Side hiển thị như thế nào?

Sidebar không thể xuất hiện ngay lập tức mà cần phải di chuyển từ bên phải (nơi sidebar được ẩn khỏi view) rồi sang trái (nơi sidebar được nhìn thấy).

Nếu đã rõ CSS của mình, bạn có thể sử dụng property transition Nếu chưa, có thể tìm câu trả lời trên Google.

.sidebar {
  /* other properties */
  transition: transform 0.3s ease-out;
}

Sidebar biến mất như thế nào?

Sidebar nên biến mất tương tự như lúc xuất hiện, ở hướng đối diện. Như vậy, bạn sẽ không cần viết thêm bất kì dòng code CSS nào.

Sidebar có nên hiển thị khi trang đang tải?

Không. Chúng ta có class is-hidden trong sidebar markup và sidebar vẫn giữ ở trạng thái ẩn.

<div class="sidebar is-hidden">
  <!-- links -->
</div>

Bây giờ hầu hết mọi câu hỏi đều đã được trả lời, ngoại trừ 1 câu – chuyện gì xảy ra khi button được click 1 lần? 2 lần? 3 lần?

Câu trả lời kia vẫn còn khá mơ hồ. Chúng ta biết sidebar nên xuất hiện khi người dùng click vào, nhưng làm cách nào? Sidebar nên biến mất khi được click vào lần nữa nhưng theo cách nào?

Và làm thế nào để biết được khi nào bạn nên click vào button?

Làm thế nào để biết khi nào bạn click vào button?

Nếu đã nắm rõ Javascript, bạn sẽ biết là có thể thêm 1 event listener vào button và chờ đợi click event. Nếu không biết điều này, bạn có thể Google.

Trước khi thêm event listener, bạn cần tìm button từ markup với querySelector.

const button = document.querySelector('.btn')

button.addEventListener('click', function() {
  console.log('button is clicked!')
})

Chuyện gì sẽ xảy ra khi button được click 1 lần?

Khi button được click 1 lần, chúng ta nên loại bỏ class is-hidden để button hiển thị. Để bỏ class trong Javascript, chúng ta chọn sidebar rồi dùng Element.classList.remove.

const button = document.querySelector('.btn')
const sidebar = document.querySelector('.sidebar')

button.addEventListener('click', function() {
  sidebar.classList.remove('is-hidden')
})

Chuyện gì sẽ xảy ra khi button được click 2 lần?

Khi button được click lần nữa, chúng ta nên thêm class is-hidden vào lại sidebar để nó biến mất.

Thật không may, chúng ta không thể detect số lần button được click với event listener. Cách tốt nhất là kiểm tra xem liệu class is-hidden đã hiện diện trên sidebar chưa. Nếu rồi thì remove. Nếu chưa thì thêm vào.

const button = document.querySelector('.btn')
const sidebar = document.querySelector('.sidebar')

button.addEventListener('click', function() {
  if (sidebar.classList.contains('is-hidden')) {
    sidebar.classList.remove('is-hidden')
  } else {
    sidebar.classList.add('is-hidden')
  }
})

Từ đây, bạn sẽ có được prototype ban đầu của component.

https://codepen.io/zellwk/pen/zdqmLe/

Bước 4— refactor và hoàn thiện

Bước này sẽ không tự nhiên đến với bạn ngay, nó đòi hỏi nỗ lực, sự luyện tập, nhờ đó bạn mới có thể nhận ra liệu code của mình có hoàn thiện, có tiến bộ hay chưa.

Khi bạn đã hoàn thành 3 bước trên, hãy thư giãn và làm việc khác đi. Khi dần tiến bộ với Javascript rồi, bạn sẽ nhận ra những thứ bản thân còn thiếu sót khi xem lại những gì đã làm.

Trong ví dụ trên, bạn có thể đặt ra thêm vài câu hỏi nữa:

  1. Làm thế nào để component sidebar này tiếp cận được đến người dùng khi họ gặp vấn đề về thị giác?
  2. Làm thế nào để những người dùng bàn phím sử dụng component sidebar dễ dàng hơn?
  3. Có cách nào để cải thiện code không?

Với câu số 3, nếu Google 1 chút, bạn sẽ biết có method toggle để loại bỏ class nếu có. Nếu không có class, method toggle sẽ thêm vào:

const button = document.querySelector('.btn')
const sidebar = document.querySelector('.sidebar')

button.addEventListener('click', function() {
  sidebar.classList.toggle('is-hidden')
})

Lời cuối

Tư duy như 1 programmer thật ra đơn giản thôi, quan trọng là bạn phải biết làm sao chia nhỏ vấn đề thành những vấn đề nhỏ hơn.

Khi đã trả lời được hết những vấn đề nhỏ hơn đó, bạn sẽ phải tìm câu giải đáp cho vấn đề lớn.

Tuyhông thể nhận ra những tiến bộ của mình ngay bây giờ nhưng cứ bình tĩnh, làm việc gì đó khác và xem xét lại sau. Lúc này, bạn sẽ nhận ra mình có thể đặt được nhiều câu hỏi tốt hơn nữa.

Nguồn: medium.freecodecamp.com

‘Toát mồ hôi’ phỏng vấn tuyển dụng vào Apple

Apple là một trong những môi trường làm việc phấn khích nhất, nhưng cũng thách thức nhất thế giới. Vì thế, được làm việc tại đó hiển nhiên không phải chuyện dễ dàng.

Cũng như ở Google và các đại gia công nghệ khác, ứng viên xin việc vào Apple nhận được những câu hỏi chuyên môn kỹ thuật dựa trên kinh nghiệm của họ, nhưng không thể tránh được những bài toán “siêu xoắn não”, tùy vào vị trí mà họ nhắm đến.

“Hãy giải thích với một em bé 8 tuổi modem/router là cái gì và chức năng của nó” – là câu hỏi cho ứng viên vị trí tư vấn tại gia.

“Ai là bạn thân nhất của bạn?” – chuyên gia phòng sinh hoạt gia đình.

“Nếu như bạn có 2 quả trứng, bằng cách nào bạn xác định được tầng cao nhất mà khi thả trứng, trứng vẫn không vỡ? Đâu là giải pháp tối ưu nhất?” – kỹ sư phần mềm.

“Hãy kể lại một vấn đề thú vị và cách bạn đã giải quyết nó” – kỹ sư phần mềm.

“Mỗi ngày có bao nhiêu em bé được sinh ra?” – giám đốc nguồn cung ứng toàn cầu.

“Hãy mô tả về bản thân, điều gì khiến bạn phấn khích?” – kỹ sư phần mềm.

“Nếu chúng tôi tuyển bạn, bạn muốn làm việc gì?” – kỹ sư phần mềm cấp cao.

“Có 3 chiếc hộp, một hộp chỉ đựng táo, một hộp chỉ đựng cam, hộp còn lại có cả táo lẫn cam. Các hộp này đã bị dán nhãn sai nên không nhãn nào phản ánh đúng loại quả bên trong. Chỉ mở một hộp và không nhìn vào bên trong, lấy ra 1 quả. Nhìn vào quả đó, liệu bạn có thể ngay lập tức đoán đúng từng chiếc hộp đựng loại quả gì hay không?” – kỹ sư kiểm thử phần mềm.

Tạo CV Online mới nhất ấn tượng khi phỏng vấn

“Một khách hàng đang giận dữ vì chờ suốt 20 phút nhưng chưa được phục vụ nên đang làm ầm lên. Vị khách này tuyên bố sẽ chuyển sang Best Buy hoặc Microsoft Store để mua máy tính. Hãy giải quyết tình huống” – chuyên gia tại Apple Store.

“Làm sao bạn bóc tách chi phí sản xuất của chiếc bút này?” – giám đốc chuỗi cung ứng toàn cầu.

“Một người đàn ông gọi đến. Ông ta sở hữu chiếc máy tính cũ mà cơ bản giờ không khác cục gạch là bao. Bạn sẽ làm gì?” – tư vấn chăm sóc khách hàng tại nhà.

“Bạn có thông minh không?” – kỹ sư phát triển sản phẩm.

“Những lần thất bại của bạn, và bạn học được gì từ chúng?” – giám đốc phần mềm.

“Đã lần nào bạn bất đồng với quyết định của sếp, bạn tiếp cận sự bất đồng đó như thế nào? Kết quả cuối cùng ra sao? Lúc này, vị sếp đó đánh giá về bạn thế nào?” – kỹ sư phần mềm.

“Bạn đặt 1 cốc nước lên chiếc máy quay đĩa và từ từ tăng tốc kim quay. Chuyện gì sẽ xảy ra đầu tiên? Cốc nước trượt, đổ hay nước sẽ bắn ra?” – kỹ sư cơ khí.

“Vì sao chúng tôi nên tuyển bạn?” – kỹ sư phần mềm cấp cao.

“Bạn có sáng tạo không?” – kỹ sư phần mềm.

“Điều gì quan trọng hơn: khắc phục sự cố của khách hàng hay tạo ra một trải nghiệm khách hàng tốt?” – tư vấn tại gia.

“Bạn có vẻ rất tích cực. Điều gì sẽ khiến bạn suy sụp, nản lòng?” – chuyên gia phòng sinh hoạt gia đình.

“Hãy diễn cho tôi thấy bạn sẵn lòng giúp đỡ một khách hàng như thế nào chỉ từ giọng nói của bạn” – tư vấn tại gia.

“Đâu là ngày tuyệt vời nhất của bạn trong vòng 4 năm gần đây? Đâu là ngày tồi tệ nhất?” – giám đốc dự án công nghệ thông tin.

“Với tư cách khách hàng, bạn cảm nhận điều gì đầu tiên khi bước vào một cửa hàng của Apple?” – chuyên gia tại Apple Store.

“Vì sao bạn muốn gia nhập Apple và bạn sẽ tiếc nhất điều gì ở chỗ làm hiện tại?” – kỹ sư phần mềm.

“5 năm nữa bạn muốn làm việc gì?” – kỹ sư phần mềm.

Nguồn: tuoitre.vn

Vue.js vs jQuery: So sánh qua 1 số ví dụ

Giới thiệu

Vue.js là gì? Vue.js khác gì so với jQuery? Tôi có nên khoan hãy đụng đến jQuery nếu đã biết Vue.js? Có thể sử dụng Vue.js ngoài Laravel không? Nếu mới bắt đầu hoặc chỉ vừa mới học Vue.js, nhiều khả năng bạn sẽ gặp những thắc mắc tương tư hoặc bị rối về những trường hợp nên sử dụng Vue.js. Hy vọng bài viết này sẽ giải đáp thắc mắc của bạn, hiểu rõ hơn về framework đang khá nổi này, khi nào thì nên sử dụng và liệu có nên ngừng dùng jQuery vì Vue.js không.

jQuery là gì

jQuery đã xuất hiện được hơn 10 năm và được sử dụng phổ biến, từ những dự án nhỏ, vui vui đến các công ty lớn tiêu tốn hàng triệu USD mỗi tháng.

jQuery (viết ít hơn, hiệu quả hơn) là 1 thư viện Javascript nhỏ, nhanh gọn, nhiều tính năng, hoạt động trên nhiều hệ điều hành và góp phần giúp quá trình viết vanilla Javascript dễ dàng hơn. jQuery hỗ trợ DOM/CSS manipulation, event handling, animation và tạo các truy vấn Ajax.

Nên dùng jQuery khi nào?

jQuery có thể được sử dụng trong nhiều trường hợp. Rất nhiều thư viện và plugins yêu cầu có jQuery, nhờ đó có thể làm được nhiều thứ đơn giản như chỉnh sửa giá trị của input hoặc lấy content cảu div để tạo các slideshows/ galleries và animations đẹp, ấn tượng.

Khi đã quen với việc viết code jQuery, bạn hoàn toàn có thể viết mọi thứ bằng Javascript bằng jQuery. Dưới đây là 1 số ví dụ cho thấy jQuery không khó:

  • Nếu muốn lấy giá trị của 1 input:
$(‘#input-id’).val();

Lưu ý: Không nhất thiết là ID của element, bạn có thể sử dụng tất cả các CSS selectors quen thuộc như:  tag name, class name, attribute, first-child, last-child.

  • Thêm 1 class vào 1 element
$(‘#element-id’).addClass(‘some-class’);
  • Submit 1 truy vấn get đến API:
$.get(‘http://your-site.com/api/endpoint’, function(data){
    console.log(data);
});

Bạn có thể dễ dàng nhận ra: so với sử dụng vanilla Javascript, thì việc manipulate DOM hoặc tạo Ajax calls sử dụng jQuery rất dễ.

Chính vì vậy mà nhiều dev còn quên luôn cách viết code với vanilla Javascript. Bạn có thể tham khảo hình dưới:

Vue.js vs. jQuery

Cài đặt:

Bạn có thể sử dụng jQuery bằng cách tham chiếu CDN như bên dưới:

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

Hoặc có thể cài đặt bằng NPM:

$ npm install jquery

Vue.js là gì?

Khác với jQuery, Vue.js là 1 framework MVC – được truyền cảm hứng bởi Angular. Trên thực tế, người sáng lập Evan You đã khởi tạo dự án này sau khi làm Angular cho Google. Ông quyết định trích những ưu điểm về Angular và tạo ra 1 framework nhẹ, dễ học, dễ sử dụng. Vue ra mắt vào tháng 2/2014 và được cộng đồng Laravel ủng hộ mạnh mẽ. Khi tôi viết bài này, Vue đã có 4,933,779 NPM lượt tải và 65,422 Github Stars.

Nên dùng Vue.js khi nào?

Vue phù hợp với các dự án nhỏ như chỉ cần thêm 1 ít reactivitity, submit form với AJAX, hiển thị cho user 1 modal, hiển thị giá trị của 1 input khi user đang gõ.. Vuejs scalable và cũng là lựa chọn tuyệt hảo cho dự án lớn. Chính vì vậy mà Vue.js được gọi là progressive framework.

Bạn có thể tìm thấy 1 số code mẫu trong documentation chính thức với nhiều ngôn ngữ khác nhau.

  1. GitHub Commits
  2. Todo App
  3. Model Component
  4. Elastic Header

.. Xem thêm các ví dụ tại đây.

Nhờ vào các core component Router and Vuex, Vue được thiết kế gần như hoàn hảo dành cho các ứng dụng single app lớn. Chúng ta có thể giải quyết nhiều vấn đề nâng cao (Components, Filters, Router, Events, Vuex… ) của framework sau đó trên Scoth.io này. Nếu bạn thích nghiên cứu code của những người khác thì tôi đề xuất ví dụ này: HackerNews Clone.

Cài đặt:

Bạn có thể sử dụng Vue bằng cách tham chiếu đơn giản CDN như thế này:

<script src="https://unpkg.com/vue"></script>

Hoặc cài đặt qua NPM:

$ npm install vue

#Examples:

Trong phần này, chúng ta sẽ đi qua nhiều ví dụ về cách thực hiện các tasks khó với jQuery và Vue.js:

Events:

  1. Nhận tín hiệu khi có 1 element được click vào:

jQuery: https://jsfiddle.net/4x445r2r/

<button id="button">Click me!</button>
(function() {
    $('#button').click(function() {
        alert('Clicked!');
    });
})();

Vue: https://jsfiddle.net/jwfqtutc/

<div id="app">
  <button @click="doSomething">Click me!</button>
</div>
new Vue({
    el: '#app',

    methods: {
        doSomething() {
            alert('Clicked!');
        }
    }
});
  1. Nhận tín hiệu khi có 1 input thay đổi:

jQuery: https://jsfiddle.net/5zdcLdLy/

<input id="input" type="text" placeholder="Enter your name">
(function() {
    $('#input').change(function() {
        alert('Hello '+ $(this).val());
    });
})();

Vue: https://jsfiddle.net/as65e4nt/

<div id="app">
  <input @change="doSomething" v-model="name" type="text" placeholder="Enter your name">
</div>
new Vue({
    el: '#app',

    data: {
        name: ''
    },

    methods: {
        doSomething() {
        alert('Hello '+ this.name);
    }
    }
});

Binding classes:

jQuery: https://jsfiddle.net/o65nvke2/

<div id="content">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, modi. Similique amet aliquam magni obcaecati placeat, iusto ipsum enim, perferendis earum modi debitis praesentium, consequatur dolor soluta deserunt. Saepe, laborum.
</div>
(function() {
    var className = 'red-text';

    $('#content').addClass(className);
})();

Vue: https://jsfiddle.net/a203pyqf/

<div id="app">
  <div id="content" :class="className">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, modi. Similique amet aliquam magni obcaecati placeat, iusto ipsum enim, perferendis earum modi debitis praesentium, consequatur dolor soluta deserunt. Saepe, laborum.
  </div>
</div>
new Vue({
    el: '#app',

    data: {
        className: 'red-text'
    }
});

Cập nhật content của 1 element:

jQuery: https://jsfiddle.net/ccLffhot

<div id="content"></div>

<input type="text" id="text" placeholder="Enter your text">
(function() {

    $('#text').keyup(function() {
        $('#content').html($(this).val());
    });

})();

Vue: https://jsfiddle.net/gjLag10s/

<div id="app">
  <div v-html="content"></div>
  <input type="text" placeholder="Enter your text" v-model="content">
</div>
new Vue({
    el: '#app',

    data: {
        content: ''
    }

});

Toggle khả năng hiển thị của 1 element:

jQuery: https://jsfiddle.net/4LcL5pco/

<div id="content">
  BooHoo!
</div>

<button id="button">Toogle</button>
(function() {

    $('#button').click(function() {
        $('#content').toggle();
    });

})();

Vue: https://jsfiddle.net/a8xoaoqy/

<div id="app">
  <div id="content" v-if="visible">
    BooHoo!
  </div>

  <button @click="visible = !visible">Toogle</button>
</div>
new Vue({

    el: '#app',

    data: {
        visible: true
    }

});

Xây dựng 1 select input từ 1 array:

jQuery: https://jsfiddle.net/9f4pcakt/

<span>Social Networks:</span>

<select id="networks"></select>
(function() {

    var socialNetworks = ['Facebook', 'Twitter', 'YouTube', 'Instagram', 'LinkedIn'];
    var list;

    $.each(socialNetworks, function (index, value) {
        list += `<option value="${index}">${value}</option>`;
    });

    $('#networks').html(list);

})();

Vue: https://jsfiddle.net/gktr062m/

<div id="app">
  <span>Social Networks:</span>

  <select id="networks">
    <option v-for="(network, index) in socialNetworks" :value="index">{{ network }}</option>
  </select>
</div>
new Vue({

    el: '#app',

    data: {
        socialNetworks: ['Facebook', 'Twitter', 'YouTube', 'Instagram', 'LinkedIn']
    }

});

Tạo các truy vấn Ajax:

jQuery: https://jsfiddle.net/t3qef00y/

<span>List of users:</span>

<ul id="users"></ul>
(function() {

  var list = '';

    $.get('https://reqres.in/api/users', function(response) {

        $.each(response.data, function (index, user) {
            list += `<li>${user.first_name}</li>`;
        });

        $('#users').html(list);

  });

})();

Vue: https://jsfiddle.net/gbjthb3q/

Bạn không thể tạo các AJAX calls với chính Vue, nhưng team đã ra mắt 1 package tương ứng: GitHub – pagekit/vue-resource: The HTTP client for Vue.js

<div id="app">
<span>List of users:</span>

  <ul id="users">
    <li v-for="user in users">{{ user.first_name }}</li>
  </ul>
</div>
new Vue({

    el: '#app',

    data: {
        users: null
    },

    mounted: function() {
        this.$http.get('https://reqres.in/api/users').then(response => {
            this.users = response.body.data;
        });
    }

});

#Kết luận

Sau khi đọc bài này, hy vọng bạn đã rõ về sự khác nhau giữa jQuery và Vue, ưu điểm cũng như những trường hợp nào nên sử dụng jQuery hoặc Vue.

Với cá nhân thôi thì tôi vẫn dùng jQuery vì nó phù hợp với dự án tôi đang làm, trong khi đó tôi dùng Vue cho các dự án đòi hỏi sự phức tạp và reacitivity. Thêm nữa, bạn cũng nên cân nhắc dựa trên mức độ thành thạo đối với mỗi công cụ.

Nguồn: scoth.io

Những Visual Studio Code Extensions không thể bỏ qua khi lập trình Angular v2+

Visual Studio Code là công cụ editor hiệu quả giúp đời sống coding trở nên dễ dàng hơn, đặc biệt là các developer Javascript.

Điều khiến VS Code trở thành công cụ editor phát triển hiệu quả hơn là nhờ số lượng extensions trong marketplace.

Trong quá trình lập trình với Angular, tôi đã phát hiện được vài packages hỗ trợ khá tốt cho các dự án Angular v2+. Để sử dụng được nhiều packages như thế này, bạn có thể dùng gói extension sau: Angular Essentials Extension Pack by John Papa.

Video khóa học có liên quan: Make Visual Studio Code Your Editor

#Các packages Angular chuyên biệt—

Đây là những packages chuyên biệt với Angular. Tất cả những packages này sẽ giúp lập trình Angular nhanh hơn và thuận tiện hơn.

#Angular 2 TypeScript Emmet

Package này sẽ giúp bạn sử dụng những từ viết tắt của Emmet trong các templates Angular.

Nếu không có package Angular 2 TypeScript Emmet thì sẽ như thế này:

Những Visual Studio Code Extensions không thể bỏ qua khi lập trình Angular v2+

Và nếu có package, chúng ta sẽ thấy rõ về Emmet!

Những Visual Studio Code Extensions không thể bỏ qua khi lập trình Angular v2+

Video khóa học liên quan: Write HTML Super Fast with Emmet

#Angular Language Service

VS Code Package

Đây là 1 extension cực kì hữu ích, cung cấp intellisense khi viết các templates HTML cho 1 component Angular.

#Angular v4 TypeScript Snippets

VS Code Package

Đây là package rất hay của John Papa. Mặc dù Angular CLI có thể hỗ trợ rất nhiều nhưng cũng nên có những phương án dự phòng khác.

Chỉ cần gõ a- và nhận ra VS Code hiển thị cho bạn thấy tất cả các snippets có sẵn với package:
Đây là ví dụ của 1 snippet để generate 1 HTTP Interceptor:

#Angular2 Inline

VS Code Package

Package này đơn giản nhưng lại được yêu thích khá nhiều. Chúng ta sẽ có syntax hightlight cho các templates inline. Dưới đây là so sánh có package và không có package:

#Angular2 Switcher

VS Code Package

Package đơn giản, nhưng không phải tất cả mọi người đều nhận ra package này hữu ích. Đây là lý do tại sao tôi đầu tư thời gian học hỏi các shortcuts keyboard VS và Vim.

Package này giúp bạn nhanh chóng chuyển qua matching files .css|.html|.ts của 1 component.

Gỡ alt + o (Windows) hoặc shift + alt + o (Mac) đến:

  • Đi từ .ts -> .html
  • Đi từ .css -> .html
  • Đi từ .html -> file trước (.ts or .css)

Gõ alt + i (Windows) hoặc shift + alt + i (Mac) đến:

  • Đi từ .ts -> .css
  • Đi từ .html -> .css
  • Đi từ .css -> file trước (.ts or .html)

Gõ alt + u (Windows) hoặc shift + alt + u (Mac) đến:

  • Đi từ .css -> .ts
  • Đi từ .html -> .ts
  • Đi từ .ts -> file trước đó (.css hoặc .html)

#Packages cho tất cả ngôn ngữ JavaScript —

#Debugger cho Chrome

VS Code Package

Một package quan trọng khi làm việc với VS Code JavaScript bất kì.

#Auto Import

VS Code Package

Một package hữu ích tự động thêm line import { } from '' vào code.

Những Visual Studio Code Extensions không thể bỏ qua khi lập trình Angular v2+

#Bracket Pair Colorizer

VS Code Package

Tuy không được tất cả mọi người ưa chuộng, nhưng package này vẫn hay được dùng để xác định các dấu ngoặc gần với chỗ nào nhất. Extension này hỗ trợ đánh dấu các dấu ngoặc đơn cùng màu.

#JavaScript (ES6) Code Snippets

VS Code Package

Một package đơn giản để thêm ES6 snippets thông dụng. Tôi thường hay dùng idm – 1 snippet mở rộng thành

import { } from 'module';

1 số snippet có ích khác:

  • clgconsole.log(object)
  • foffor(const item of object) {}
  • stosetTimeout(() => {});

#npm

VS Code Package

1 package nhỏ dùng để thông báo khi nào thì 1 trong các packages của bạn không được update. Dưới đây là 1 ví dụ hiển thị 1 trong các packages Angular cập nhật chậm hơn 1 phiên bản.

#TSLint

VS Code Package

Tích hợp TSLint vào VS Code để có thể xác định được các lỗi trong TypeScript code nhanh chóng.

#Align

VS Code Package

Package nhỏ mà tôi hay sử dụng, giúp bạn cân chỉnh các đoạn code.

Một đoạn code chưa được căn chỉnh.

Sử dụng shortcut bàn phím ctrl + alt + a và sẽ có được:

#Kết luận

Hy vọng những extensions này sẽ giúp bạn tiết kiệm được thời gian và tập trung nhiều hơn code.

Nguồn: scotch.io

“Ở Việt Nam, cơ hội để thực sự làm về Trí tuệ nhân tạo còn quá ít, trong khi những thứ mang hình thù và dáng dấp AI thì quá nhiều”

Sau 2 mùa tuyển sinh, IP (Intelligence Program) vẫn là chương trình đào tạo (miễn phí) hiếm hoi trên thị trường về lĩnh vực Trí tuệ nhân tạo. Có vẻ như sau cơn sốt tràn ngập những “buzz words” về loạt công nghệ nóng nhất hành tinh, chúng ta quay trở lại với một sự thật hết sức hiển nhiên, rằng: “Cơ hội chưa bao giờ đến tự nhiên và dễ dàng.”

Trong quá trình gặp gỡ và tiếp xúc với các bạn trẻ đam mê công nghệ, Cinnamon nhận thấy tất cả đều mang trong mình một tài năng/ tiềm năng nhất định, như khả năng giải thuật siêu hạng với hàng loạt giải thưởng lớn nhỏ, khả năng lập trình 100 dự án/năm, tham vọng trở thành một doanh nhân công nghệ, hay đơn giản chỉ là khát khao có cơ hội để thực hành một dự án về Học máy (một trong những công nghệ cốt lõi của Trí tuệ nhân tạo). Thế nhưng tất cả đều thiếu CƠ HỘI và ĐỊNH HƯỚNG để đưa ra những lựa chọn đúng đắn nhất cho con đường sự nghiệp của mình. Câu chuyện xảy ra tương tự ngay cả với các du học sinh bậc Thạc Sĩ và Tiến sĩ từ Anh, Pháp, Đài Loan, v.v. khi trở về, mặc cho Khoa học máy tính đang trở thành ngành được săn đón nhất trên thế giới.

Sự thật là: “Ở Việt Nam, cơ hội để thực sự làm về Trí tuệ nhân tạo còn quá ít, trong khi những thứ mang hình thù và dáng dấp AI thì quá nhiều.”

Vậy cơ hội nào cho bước nhảy vọt tới tương lai cùng Trí tuệ nhân tạo?

Tầm nhìn toàn cầu và Tư duy Lãnh đạo chính là 2 giá trị mà Cinnamon muốn truyền tải xuyên suốt chương trình Intelligence khóa 2 cũng như Sự kiện: Ngày lễ tốt nghiệp và Định hướng nghề nghiệp vào ngày 29 tháng 10 tới đây.

NỘI DUNG CHI TIẾT

  • 14:15 – 15:00 Tổng quan
    – Những cơ hội nào đang tồn tại trên thị trường AI? (Ông) Nghiêm Xuân Bách – Quản lý Cinnamon tại Việt Nam
    – Technopreneur: Con đường từ tiến sĩ AI trở thành Doanh nhân công nghệ Tiến sĩ Hajime Hotta – Chủ tịch Cinnamon
  • 15:20 – 16:55 4 dự án tốt nghiệp của khóa Intelligence 2
    – Dự án số 1: Hệ thống khuyến nghị bài hát dựa trên cảm xúc người dùng
    – Dự án số 2: Trợ lý ảo tự động tóm tắt và sắp xếp email
    – Dự án số 3: Trợ lý ảo tự động tóm tắt hội thoại trong Slack
    – Dự án số 4: Nhân tố X – “Phiêu” cùng công nghệ Image Generating
  • 17:00 – 17:45 Thảo luận bàn tròn: Làm thế nào để làm chủ bước tiến sự nghiệp trong lĩnh vực AI?
    – Khách mời: Ts. Nguyễn Tuấn Đức (Đại học Tokyo, Nhật Bản)
    – Ths. Trần Anh Phương (Viện KTH Hoàng Gia, Thụy Điển)

THÔNG TIN ĐĂNG KÝ NHẬN THƯ MỜI THAM GIA SỰ KIỆN – tư cách khán giả (Số lượng có hạn)

IP 2017 – Graduation Day & Career Orientation: Leap to the Future

  • Thời gian: 14 – 17h, Chủ Nhật, 29/10/2017
  • Địa điểm: Nest Coworking Space, tầng 6, tòa nhà C, số 22 Thành Công, Đống Đa, Hà Nội
  • Link đăng ký: https://goo.gl/forms/5Em2sCp30plXN8th2
  • Hạn chót: 27/10/2017
  • Chi phí: MIỄN PHÍ

Lương IT đi Nhật có thể lên đến 165 triệu/tháng

IT đi Nhật

IT đi Nhật không còn là gì xa lạ trong ngành vì mức lương khi làm lập trình viên tại Nhật khá cao, lên đến 165triệu/tháng. Theo số liệu của Bộ Kinh tế công thương Nhật Bản (METI), đến năm 2020, Nhật Bản thiếu khoảng 50.000 nhân lực CNTT.

Theo khảo sát của Cơ quan xúc tiến CNTT Nhật Bản (IPA), trong 5 năm gần đây, có trên 60% doanh nghiệp Nhật khẳng định thiếu và rất thiếu nhân lực CNTT.

Đặc biệt là tình trạng “rất thiếu nhân lực” CNTT đang gia tăng mạnh mẽ, nếu trong năm 2009, chỉ có 5% các doanh nghiệp Nhật Bản trả lời “rất thiếu nhân lực” CNTT thì đến năm 2013, con số này là 19%, tăng gấp gần 4 lần.

Tính lương chuẩn với công cụ tính lương gross – net tại TopDev

Tình trạng khan hiếm nguồn nhân lực IT ở các công ty Nhật đã buộc các công ty  thực hiện giải pháp “nhập khẩu lập trình viên”, và Việt Nam được xác định là một trong những nguồn cung cấp nhân lực IT chủ lực cho các công ty Nhật, bởi chất lượng nhân lực IT Việt được đánh giá là khá tốt cùng với đó là sự tương đồng về văn hóa Nhật – Việt nên ngày càng có nhiều lập trình viên Việt Nam sang Nhật làm việc.

Làm lập trình viên ở Nhật được gì?

Sức hút từ thị trường việc làm IT tại Nhật đến từ mức thu nhập cao, chất lượng công việc được đảm bảo, những trải nghiệm về văn hóa mới, gặp gỡ những con người mới và tích lũy thêm những hành trang kiến thức vô cùng quý giá trong thời gian làm việc ở Nhât:

Tích lũy được rất nhiều kinh nghiệm

Làm việc ở môi trường Nhật Bản, là cơ hội tốt để lập trình viên được tiếp xúc với quy trình chuyên nghiệp, các dự án lớn và sẽ có vô vàn thứ hay ho để bạn học hỏi từ đó. Khi phải đối mặt với những vấn đề chưa từng gặp phải và phải giải quyết chúng một cách nhanh chóng cho kịp tiến độ; biết cách phòng tránh lỗi trong quá trình làm việc; biết cách sửa lỗi và cho ra đời những sản phẩm ưu việt nhất.

  Cơ hội nghề nghiệp về CNTT của các doanh nghiệp Nhật
  Nhà tuyển dụng "mỏi mắt" tìm lập trình viên thạo tiếng Nhật

Ngoài ra, kỹ năng mềm cũng được cải thiện rõ rệt: các kỹ năng làm việc trong môi trường đa văn hóa, quản lý dự án,…là những gì bạn chẳng thể học được khi còn ngồi trên ghế nhà trường.

Cơ hội thăng tiến

Trải nghiệm làm việc ở Nhật không phải là ai cũng có cơ hội có được, chính vì vậy hãy tranh thủ học hỏi thật nhiều đó sẽ làn bàn đạp cho các bạn thăng tiến sau này. Các công ty Nhật rất khuyến khích nhân viên gắn bó lâu dài với công ty, nhưng nếu vì lý do gì đó khiến bạn muốn trở về nước thì có rất nhiều cơ hội có được công việc tốt khi bạn trở về nước sau khi kết thúc hợp đồng làm việc ở Nhật.

Các chính sách đãi ngộ hấp dẫn

Nếu đi theo diện kỹ sư IT thì bạn được hưởng lương, chính sách và các đãi ngộ như các lập trình viên bản địa.

Mức lương dành cho lập trình viên ở Nhật được đánh giá là khá hấp dẫn. Mức lương tối thiểu mà lập trình viên tại Nhật có được 208.000 yên/tháng (khoảng 40 triệu VND). Tùy theo khả năng cũng như thái độ và trình độ tiếng Nhật của bạn thậm chí mức lương có thể lên đến 833.000 yên (~165 triệu VND).

Cấp độ Vị Trí Mức lương

(tháng)

Kinh nghiệm Khả năng
thích ứng
Tiếng Nhật
G1 Lập trình viên từ 208,000 Yên (40 triệu VNĐ) Thực tập sinh/ mới ra trường Chấp nhận linh hoạt các yêu cầu N5
G2 Đến 225,000 Yên (45 triệu VNĐ) Có kinh nghiệm 1 dự án N5
G3 Đến 241,000 Yên (50 triệu VNĐ) Có kinh nghiệm vài dự án N4
G4 Đến 266,000 Yên (54 triệu VNĐ) Có kinh nghiệm vài dự án N4
G5 Kĩ sư Đến 308,000 Yên (62 triệu VNĐ) Có nhiều kinh nghiệm lập trình Giao tiếp

linh hoạt

N3 trở lên
G6 Đến 367,000 Yên (72 triệu VNĐ) Có nhiều kinh nghiệm lập trình Giao tiếp linh hoạt/ Kiểm soát được các dự án N3 trở lên
G7 Đến 440,000 Yên (87 triệu VNĐ) Có nhiều kinh nghiệm lập trình N3 trở lên
G8 Project Manager Đến 533,000 Yên (105 triệu VNĐ) Kinh nghiệm lâu năm (senior) + nhiều skill lập trình Đưa ra được các đề án mới N3 trở lên
G9 Đến 658,000 Yên (130 triệu VNĐ) Kinh nghiệm lâu năm (senior) + nhiều skill lập trình N3 trở lên
G10 Đến 833,000 Yên (165 triệu VNĐ) Kinh nghiệm lâu năm (senior) + nhiều skill lập trình N3 trở lên

Mức lương tham khảo dựa trên trình độ kỹ thuật, kỹ năng mềm và khả năng tiếng Nhật

Trừ đi các khoản sinh hoạt phí bạn có thể tiết kiệm được 1 khoản kha khá sau thời gian làm việc ở Nhật.

Thời gian làm việc sẽ tùy thuộc vào hợp đồng lao động giữa ứng viên và công ty tuyển dụng, thường tối thiểu là 1 năm và gia hạn hợp đồng từ 1 – 3 năm hoặc 5 năm. Đặc biệt các công ty Nhật rất khuyến khích việc gắn bó lâu dài với công ty nên cơ hội được gia hạn hợp đồng là rất cao.

Dự án “Tuyển dụng Nhân tài IT đi Nhật” – Global IT Talent mang cơ hội đi Nhật đến developers từ fresh graduate đến senior

IT đi NhậtĐại diện IGS chia sẻ về chương trình “”Tuyển dụng Nhân tài IT đi Nhật” – Global IT Talent”

Nếu bạn tự nộp đơn ứng tuyển vào các công ty Nhật thì khả năng được nhận thường rất thấp, vì bạn phải trực tiếp cạnh tranh với rất nhiều ứng viên bản địa và cả những ứng viên đến từ khắp các nơi trên thế giới, hơn thế nữa rào cản về các thủ tục giấy tờ hành chính, pháp lý khiến bạn khó tiếp cận được các cơ hội việc làm tại Nhật.

  Cách Engineer Nhật Bản thực hiện test như thế nào
  Doanh nhân kiên nhẫn nhất Nhật Bản: Năm nào cũng viết thư hỏi mua các công ty trên khắp thế giới, có khi chờ tới 16 năm để đối tác gật đầu bán mình

Việc được 1 công ty có uy tín về cung cấp nhân sự ở Nhật như Human Resocia giới thiệu là một tấm vé thông hành gia tăng cơ hội được làm việc ở Nhật của các lập trình viên.

IGS là công ty chuyên về lĩnh vực nhân sự và giáo dục (EdTech và HR Tech). Với mong muốn mang cơ hội được làm việc ở Nhật cho lập trình viên các cấp độ từ fresh graduate đến senior. IGS phối hợp với tập đoàn Human Resocia triển khai chương “Tuyển dụng Nhân tài IT đi Nhật” – Global IT Talent giới thiệu cơ hội nghề nghiệp cho ứng viên đến hơn 3.000 công ty tại Nhật.

Sử dụng ứng dụng GROW – Ứng dụng trí tuệ nhân tạo (AI) vào việc phân tích trình độ chuyên môn cũng như đánh giá các kỹ năng mềm của ứng viên giúp đánh giá một cách toàn diện, và khách quan về các ứng viên. Từ đó đề xuất các vị trí thích hợp với trình độ cũng như tính cách của các ứng viên và có những sự hỗ trợ thích hợp dành cho từng ứng viên.

IT đi NhậtDự án “Tuyển dụng Nhân tài IT đi Nhật” – Global IT Talent thu hút được đông đảo các lập viên tham gia

Bên cạnh đó khi tham gia vào chương trình  “Tuyển dụng Nhân tài IT đi Nhật” – Global IT Talent lập trình viên còn nhận được những sự hỗ trợ thiết thực khác:

  • Đi theo diện kỹ sư IT và được hưởng lương và các đãi ngộ như lập trình viên Nhật
  • Ứng viên sẽ được ứng tuyển và phỏng vấn trực tiếp với công ty tuyển dụng bên Nhật
  • Làm việc tại Nhật đúng chuyên ngành mà bạn đã được đào tạo qua đó có thể học hỏi kiến thức, nâng cao tay nghề phát triển sự nghiệp sau này.
  • Được tư vấn và hướng dẫn hoàn thành các thủ tục VISA, xuất nhập cảnh trong thời gian sớm nhất
  • Xuất cảnh ngay khi đậu phỏng vấn với công ty bên Nhật (tối đa 3 tháng)
  • Hỗ trợ học bổng tiếng Nhật cấp tốc với những ứng viên chưa có năng lực tiếng Nhật để đáp ứng được yêu cầu về ngoại ngữ khi sang Nhật làm việc.
  • Tham gia các buổi workshop, training chia sẻ kinh nghiệm với các lập trình viên đã có kinh nghiệm làm việc ở Nhật qua Skype hoặc trực tiếp.

Tìm hiểu thêm thông tin chi tiết về chương trình  “Tuyển dụng Nhân tài IT đi Nhật” – Global IT Talent tại đây:

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

Xem thêm việc làm IT mức lương lương hấp dẫn nhất thị trường

Học cách đối phó nếu bạn phải làm việc với 4 kiểu sếp tồi phổ biến sau

Những vị sếp xấu tính không chỉ tồn tại trên phim, nhưng rất may là bạn vẫn có thể đối phó với họ.

Những vị sếp xấu tính không chỉ tồn tại trong các bộ phim kiểu như “Horrible Bosses” hay “Office Space”. Phiên bản đời thực của những nhân vật này cũng khá phổ biến trong môi trường công sở hiện đại.

Mới đây, LaSalle Network đã tiến hành một cuộc khảo sát với hơn 1.000 nhân viên văn phòng tại Mỹ. Tỷ lệ tố cáo họ có một vị sếp tồi tệ cao đến bất ngờ: 84%.

Ngoài ra, 43% trong số này cho biết họ đã phải bỏ chỗ làm chỉ vì sếp.

Một người sếp tồi có thể gây ra tác động rất tiêu cực lên các nhân viên dưới quyền, cả về mặt cảm xúc lẫn hiệu quả công việc. Theo báo cáo của hãng Gallup, lãnh đạo quyết định ít nhất 70% mức độ gắn kết của một nhân viên với chỗ làm.

Tất nhiên, bạn không bỏ việc chỉ vì có một người sếp không ra gì. Nếu bạn thích công ty đó, môi trường và êkip của mình, dưới đây là bí quyết để đối phó với 4 kiểu sếp xấu tính phổ biến nhất.

Yêu bản thân

Những vị sếp này quan tâm đến sự thăng tiến của bản thân mình hơn bất cứ ai khác. Họ chỉ muốn được nghe tán tụng mình giỏi đến mức nào và hiếm khi đề nghị nhân viên phản hồi về hiệu quả điều hành, bởi họ không bao giờ tin được mình “có vấn đề”.

Khi bộ phận được khen, họ tự nhận tất cả công lao về mình và sẵn sàng quy lỗi cho nhân viên khi xảy ra sự cố.

Cách đối phó: Nếu bạn hạnh phúc với cương vị hiện tại của mình và muốn tiếp tục ở lại công ty, hãy “hài hước hóa” sếp của mình.

Tuân theo nguyên tắc của ông ấy/bà ấy và cố gắng sửa sai bằng sự bao dung. Đừng tiếc lời khen dành cho họ mỗi khi họ đưa ra lời khuyên nào với bạn. Thông báo đầy đủ với họ về tất cả những trao đổi mà bạn đã tiến hành với khách hàng. Họ cần cảm thấy mình đang kiểm soát và biết mọi việc.

Khía cạnh tích cực: Những người xung quanh sẽ biết không chỉ có mỗi sếp bạn tham gia vào dự án. Họ thậm chí có thể khen ngợi, hoặc chí ít là ghi nhận bạn vì đã đủ kiên nhẫn và vị tha để không nhảy lên tranh công.

Bóng ma

Những vị sếp kiểu này luôn nói họ quan tâm đến sự phát triển của nhân viên cấp dưới, nhưng cứ thử đợi họ hướng dẫn hay hỗ trợ xem. Họ chẳng mấy khi phản hồi về hiệu quả công việc của bạn và cũng hiếm khi trả lời các câu hỏi. Những email của họ rất ngắn, nhát gừng và chẳng có mấy thông tin.

Cách đối phó: Dù cho sếp của bạn đang bận đánh golf hay thường xuyên phải đi công tác, đừng bao giờ có ý nghĩ “đi cho khuất mắt”. Hãy tiếp tục làm việc chăm chỉ và kết nối tích cực với êkip của mình về diễn tiến của dự án.

Hãy tìm nhiều cách khác nhau để khai thác thông tin và có câu trả lời đối với những vấn đề mình quan tâm. Nếu như không thể có được hồi đáp từ một sếp, hãy tìm ai đó khác có thể bật đèn xanh cho quyết định của bạn.

Khía cạnh tích cực: Thiếu định hướng có thể khiến bạn thất vọng, nhưng thực ra cũng là cơ hội để bạn chứng tỏ năng lực của mình. Bạn cũng có thể nhân đó tiếp cận với các lãnh đạo khác trong tổ chức để hỏi thông tin. Hệ quả là bạn sẽ gây dựng được các quan hệ bên ngoài êkip hiện tại của mình.

Bạn thân

Những vị sếp này luôn muốn nhân viên phải yêu quý họ. Họ muốn tham gia mọi cuộc tán gẫu hay được mời đi nhậu sau giờ làm.

Cách đối phó: Đây thực ra không phải là kiểu sếp quá tệ, nhưng sự thân thiết và “yêu chiều” nhau quá mức sẽ khiến bạn không thể phát triển được. Đôi khi những chỉ trích mang tính xây dựng là rất cần thiết.

Khía cạnh tích cực: Người ta có xu hướng thích làm việc với những người mình quý, và nếu như bạn có thể phát triển một quan hệ tốt đẹp với sếp của mình, trong đa số trường hợp, bạn sẽ làm việc năng suất hơn, chăm chỉ hơn và gắn bó với tổ chức lâu hơn.

Lốc xoáy

Những vị sếp kiểu này luôn xuất hiện rồi biến mất như một cơn lốc. Dù họ muốn được cập nhật thông tin về dự án, họ cũng chẳng có nổi quá 1 phút để nghe bạn trình bày.

Họ yêu cầu bạn làm một việc gì đó nhưng xong lại quên ngay, kết quả là một mớ lộn xộn.

Cách đối phó: Hãy gửi báo cáo tuần ngắn gọn cho họ, tóm tắt diễn tiến của dự án mà bạn đang theo. Bằng cách đó, sếp của bạn có thể cập nhật thông tin và bạn có thể sử dụng quãng thời gian ít ỏi gặp sếp để hỏi những thắc mắc cụ thể.

Khía cạnh tích cực: Bạn được chủ động làm việc của mình. Trong thế giới tương tác bị hạn chế, bạn sẽ trau đồi được kỹ năng phát biểu tự tin, chính xác và ngắn gọn.

Nguồn: Applancer Careers via Trí Thức Trẻ/CNBC

13 mẹo có thể giúp bạn rút ngắn thời gian phát triển kỹ năng lập trình

Khi bạn mới bắt đầu bước vào giới lập trình, rất khó để biết nên bắt đầu từ đâu nhưng lại rất dễ lầm đường, dẫn đến lãng phí rất nhiều thời gian và tiền bạc của bạn.

Nếu bạn là người mới đến với thế giới của lập trình và phát triển web, bạn nên bắt đầu bằng cách tự học từ tất cả các chương trình trực tuyến miễn phí. Bằng cách đó, bạn có thể khám phá những gì bạn thích và không thích trước khi đầu tư tiền vào một ngôn ngữ lập trình hoặc một khoá học nào đó. Có rất nhiều chương trình miễn phí và các lớp học cùng tài liệu để bạn lựa chọn.

1. Không nên quá chú trọng vào việc học ở trường đại học.

Trừ khi đó là từ các trường danh tiếng trong ngành đào tạo CNTT, thì lúc đó trình độ của bạn có thể sẽ vượt trội hơn. Vì trên thực tế, hầu hết các chương trình của trường đại học đều cố gắng để theo kịp với công nghệ đang thay đổi mỗi ngày. Bằng cấp có thể sẽ mang lại cho bạn mức lương tốt hơn trong 1-3 năm đầu tiên. Sau đó nó sẽ hết tác dụng. Vì vậy hãy tập trung vào các khoá học chuyên đề, thực học thực nghiệp, sẽ giúp bạn tiết kiệm thời gian và tiền bạc.

2. Hãy bắt đầu với JavaScript

JavaScript hiện là ngôn ngữ lập trình phổ biến nhất trên thế giới. Đó là ngôn ngữ chuẩn trên nền tảng web và cũng thường được sử dụng để code các ứng dụng di động. Bạn thậm chí có thể lập trình robot, máy bay không người lái (drone) và game bằng JavaScript.

3. Code mỗi ngày.

Chỉ có sự tự tin mới có thể giúp các bạn giữ lửa để code mỗi ngày. Và để tăng cường sự tự tin thì hãy bằng cách bắt đầu với một cái gì đó đơn giản. Hiện nay Code.org đã có chương trình dạy code dành cho trẻ em lấy cảm hứng từ Star Wars và Minecraft. Dù bạn là người lớn, thì đó vẫn là một cách tuyệt vời để tự chứng minh rằng bạn hoàn toàn có thể code.

4. Cách tốt nhất để học code đó chính là code.

Rất nhiều sinh viên luôn bắt đầu bằng cách đọc sách. Bạn hoàn toàn có thể đi theo con đường đó và đó cũng là cách tôi học code khi mới bắt đầu, nhưng nếu bạn thực sự muốn phát triển, hãy bắt đầu bằng việc làm một số bài tập. FreeCodeCamp là một nơi tuyệt với để bạn có thể thoa sức tung hoành phát triển bản thân.

5. Hãy tìm hiểu bằng các ví dụ.

Một trong những cách tốt nhất để có bước đột phá quan trọng đó là xem code của người khác và tìm hiểu xem họ giải quyết vấn đề gì. Tìm một người cùng tiến và thử tham gia một số chương trình đào tạo cặp. Gần đây tôi đã bắt đầu tham gia một chương trình mới gọi là “Shotgun with Eric Elliott”- giúp bạn tôi có thể thấy được quá trình tôi xây dựng ứng dụng một cách trực tiếp, nhờ vậy có thể cùng nhau phát hiện và tìm giải pháp một cách nhanh chóng.

6. Đọc Blog.

Có thể tôi hơi thiên vị, nhưng JavaScript Scene là một blog tuyệt vời để theo dõi và học hỏi. Tôi cũng là một fan của 2ality – đó là nơi tuyệt vời để luôn cập nhật những gì mới về JavaScript.

7. Thử Bootcamp.

Nếu bạn có thể đủ khả năng để học toàn thời gian, hãy bỏ qua các chương trình của trường đại học (Điều 1). Thay vào đó, thử tham gia một khoá bootcamp. Bootcamp là một khoảng đầu rất tuyệt nếu bạn có điều kiện (thường giao động từ 10.000 $ – 25.000$) và bạn cần phải tham gia một cách có trách nhiêm. Tôi đã từng các nhân viên từng tham gia bootcamp. Họ làm việc một cách tuyệt vời chỉ với một ít sự chỉ dẫn từ các những người có kinh nghiệm.

8. Tìm hiểu các khoá trực tuyến.

Nếu bạn không có tiền đầu tư cho bootcamp hoặc bạn là một người đã có mục tiêu và tự định hướng được bản thân, hãy thử tham gia các khoá đào tạo trực tuyến. “Learn JavaScript with Eric Elliott” là một lựa chọn hoàn hảo.

9. Tìm một người cố vấn tài giỏi.

Tốt nghiệp khóa học bootcamp hoặc trực tuyến chỉ là một bước trong quá trình học tập của bạn. Với tốc độ thay đổi nhanh chóng của ngành công nghiệp này, bạn sẽ không bao giờ được ngừng học tập. Bạn cần nên có một người cố vấn thông minh để học hỏi. Họ không nhất thiết phải người mà bạn có thể gặp trực tiếp. Có thể là ai đó mà bạn theo dõi trực tuyến.

10. Tìm một nhóm thảo luận hoặc nhóm học tập.

Các cuộc trò chuyện là cách tuyệt vời để tìm người cố vấn, bạn bè cùng nghiên cứu và bạn mới, bất kể trình độ hiện tại của bạn như thế nào.

11. Tổng hợp mọi thứ lại.

Các bài học bằng video rất hay, nhưng bạn cần luyện tập để nâng cao kỹ năng. Các bài tập thì rất hay, nhưng thường chỉ tập trung các khái niệm rất cụ thể, còn hướng dẫn bằng video mang lại cách code tuyệt vời. Sách rất tuyệt vời, nhưng khó có thể thực hành được nếu chỉ đọc sách. Vì vây dù bạn đang làm gì, hãy tổng hợp tất cả các nguồn đó. Cố gắng học hỏi từ nhiều phương tiện.

12. Tạo một nơi chứa các dự án của bản thân.

Cho dù bạn học như thế nào, nếu bạn muốn viết code trong một mảng nào đó, bạn nên bắt đầu xây dựng một nơi chứa các dự án của bạn. Đăng ký một tài khoản GitHub và đăng các dự án của bạn lên đó để các nhà tuyển dụng tiềm năng có thể nhìn thấy khả năng của bạn.

13.Tìm hiểu nhiều hơn một ngôn ngữ.

Tôi khuyên bạn nên đọc “Seven Languages in Seven Weeks.”. Tôi đã code qua các ngôn ngữ Basic, Assembly, Pascal, Delphi, C / C ++, Java, Lisp, và JavaScript. Học các ngôn ngữ khác nhau với những nguyên lý khác nhau sẽ dạy cho bạn những cách khác nhau để suy nghĩ về những vấn đề tương tự. Mở rộng trí tuệ của bạn, mở rộng sự sáng tạo của bạn. Nhưng hãy dành 1 năm tập trung vào JavaScript để vững chắc trước khi bạn tìm hiểu thêm những cái khác.

Nguồn: Hackingnewstutorials

Họp báo ra mắt sự kiện Vietnam Web Summit

Sáng nay (18/10), đại diện ban tổ chức sự kiện Vietnam Web Summit (VWS2017) – TopDev phối hợp với VECOM (Hiệp hội Thương mại điện tử Việt Nam) đã tổ chức buổi họp báo công bố chuỗi sự kiện Vietnam Web Summit. Buổi họp báo có sự tham gia của đại diện các nhà tài trợ, các đối tác, các đơn vị hỗ trợ, các diễn giả và các đơn vị Báo chí và Truyền thông.

Theo đại diện BTC VWS dự kiến năm nay thu hút hơn 9.000 lượt khách tham dự, gần 400 doanh nghiệp cùng hơn 100 chuyên gia kinh nghiệm, đặc biệt là sự tham gia của nhiều diễn giả đến từ các tập đoàn lớn trên thế giới như AWS (Amazon Web Services), Google, Facebook, Microsoft, Lazada, Nielsen, MasterCard hứa hẹn mang đến cho người tham dự những nội dung đặc sắc.

Từ thành công của Vietnam Web Summit 2016, sự kiện Vietnam Web Summit  đang dần khẳng định là một sân chơi không thể thiếu dành cho mọi cá nhân, tổ chức lớn nhỏ đang hoạt động trong lĩnh vực công nghệ tại Việt Nam, đặc biệt là lĩnh vực công nghệ Web.

Sự kiện thu hút đông đảo đại diện các nhà tài trợ, các đối tác, các đơn vị hỗ trợ, các diễn giả và các đơn vị Báo chí và Truyền thông

Năm nay sự kiện Vietnam Web Summit 2017 tập trung vào các nội dung dành cho doanh nghiệp cũng như các cá nhân thuộc các lĩnh vực công nghệ ứng dụng, quảng cáo, Digital Marketing, Cloud, Payment và E-commerce,… Được chia sẻ bởi các chuyên gia hàng đầu từ các tập đoàn trên thế giới, Vietnam Web Summit là nơi tập trung những chuyên đề đa dạng và thực tiễn, cung cấp những số liệu thực tiễn, cơ hội được trò chuyện cùng các chuyên già hàng đầu có thể giúp giải quyết được các vấn đề hóc búa mà doanh nghiệp đang gặp phải trong thời đại cách mạng công nghệ 4.0. Đồng thời tại sự kiện cũng đưa ra những dự báo tương lai cho sự phát triển của toàn ngành công nghiệp Web trong thời gian tới.

THỜI GIAN & ĐỊA ĐIỂM DIỄN RA SỰ KIỆN

  • Hồ Chí Minh: 01/12/2017 tại Grand Palace, 142/18 Cộng Hòa, P.4, Q. Tân Bình, Tp.HCM
  • Hà Nội: 08/12/2017 tại Trung tâm Hội nghị Forevermark, 614 Lạc Long Quân, Q. Tây Hồ, Hà Nội

CÁC CHỦ ĐỀ DỰ KIẾN TẠI VIETNAM WEB SUMMIT

Tham khảo tại: https://vietnamwebsummit.com

THÔNG TIN CHI TIẾT VỀ SỰ KIỆN

  • Website: https://vietnamwebsummit.com/
  • Fanpage chính thức: https://www.facebook.com/Vietnamwebsummit/
  • Để đăng ký tham dự chương trình Vietnam Web Summit vui lòng để lại thông tin tại đây