Theo báo cáo Vietnam IT Nation 2020 từ TopDev, mức lương dành cho các vị trí Business Analyst, Data Analyst dao động từ 981 – 2,209 USD đang trở thành các vị trí được săn đón và đầu tư nhiều nhất hiện nay tại các doanh nghiệp số, và lĩnh vực Fintech cũng không ngoại lệ. Thậm chí, Fintech còn đòi hỏi sự chính xác, tính trực quan từ dữ liệu hơn cả những ngành nghề khác.
Với nhiệm vụ là cầu nối và “dịch thuật” giữa các đơn vị nghiệp vụ (Business) và kỹ thuật (IT) thì các vị trí như – hay – phải có những điều kiện “cần và đủ” để xây dựng chiến lược dữ liệu, từ việc phát triển data lake, data warehouse cho đến các công cụ data analytics.
Thế nhưng, bạn đã biết những công việc cụ thể mà một DA hay một BA làm là gì?
Hiện tại công việc chính của một DA bao gồm:
Làm việc với các đơn vị nghiệp vụ để xác định các bài toán/vấn đề cần được triển khai, và xác định mức độ ưu tiên của từng bài toán. Từ đó phân tích, mô tả các đặc điểm của thuộc tính, các đối tượng.
Visualization kết quả phân tích theo “ngôn ngữ của end users”
Làm cầu nối giữa đơn vị nghiệp vụ và đơn vị kĩ thuật để “translate” ngôn ngữ nghiệp vụ (business) sang ngôn ngữ kĩ thuật (IT)
Tìm hiểu bài toán ( Business Understanding): Phối hợp với team BA để lên các giải pháp cho bài toán
Tìm hiểu dữ liệu (Data Understanding): Tìm hiểu ý nghĩa các trường dữ liệu hiện có để đưa làm đầu vào của bài toán.
Làm sạch dữ liệu (Data Cleanning): Loại bỏ các phần tử ngoại lại, không cần thiết….
Tích hợp dữ liệu (Data integration) : Dữ liệu từ nhiều nguồn do đó có thể bị trùng lặp. Tìm hiểu và loại bỏ trung lặp
Biến đổi dữ liệu (Data Transformation): Tổng hợp và biến đổi dữ liệu để đưa ra các thuộc tính mới
Từ những dữ liệu thô, các chuyên viên phân tích dữ liệu chuyển đổi chúng trở thành những số liệu trực quan theo “ngôn ngữ của end-users”
Là một nhà phân tích nghiệp vụ chuyên nghiệp, hay một chuyên gia phân tích dữ liệu thế hệ 4.0, những hiểu biết về CNTT là kĩ năng tiên quyết giúp bạn thực hiện tốt vai trò “cầu nối” trong doanh nghiệp của mình. Bạn có sẵn sàng cùng tìm hiểu những công cụ “quyền năng” trong lĩnh vực phân tích nghiệp vụ và dữ liệu tại ngân hàng số?
Buổi Techtalk “ ” sẽ đưa ra những định hướng cho các bạn mong muốn phát triển sự nghiệp tại các tổ chức tài chính đang chuyển đổi số! Các chuyên gia từ sẽ hé lộ những phương pháp phân tích nâng cao, lộ trình phát triển sự nghiệp với DA & BA, đăng ký ngay để lắng nghe những topics bổ ích đến từ các chuyên gia bạn nhé https://meetup.vn/e/i8U
Các Topics dự kiến:
Advanced Analytics in Banking: Usecases and Technologies
Transforming Risk Management using Advanced Analytics
==
** Về đơn vị tổ chức:
Được thành lập từ năm 1993, Ngân hàng thương mại cổ phần Kỹ Thương Việt Nam – hiện là một trong những ngân hàng thương mại cổ phần lớn nhất và dẫn đầu xu hướng công nghệ ở tại Việt Nam. Không chỉ cung cấp các sản phẩm và dịch vụ tài chính đa dạng cho hơn sáu triệu khách hàng cá nhân và doanh nghiệp ở Việt Nam trên với mạng lưới 315 chi nhánh trên toàn quốc cũng như trên kênh ngân hàng internet và ngân hàng số, còn được biết đến là Ngân hàng rất mạnh tay đầu tư cho Công nghệ với việc chi hơn 300 triệu USD để thực hiện quá trình chuyển đổi Công nghệ của mình trong giai đoạn 2017 – 2022.
Trong những năm trở lại đây, liên tiếp giữ vững vị trí “Top 2 Ngân hàng có môi trường làm việc tốt nhất Việt Nam”, khẳng định cam kết luôn tạo điều kiện để mỗi Cán bộ nhân viên có thể “Vượt trội hơn mỗi ngày”.
==
THÔNG TIN CHUNG ⏰ Thời gian: 9:00 – 12:00 ngày 22/02/2020 Địa điểm: BKHUP – UP CoWorking Space: Tầng 3 toà nhà A1-7, 17 Tạ Quang Bửu, Hai Bà Trưng, Hà Nội. Đăng ký vé:https://meetup.vn/e/i8U (Sự kiện không thu phí)
Bên dưới đây, bạn sẽ thấy 1 set biểu đồ chứng minh các hướng đi mà bạn có thể chọn. Và những công nghệ mà bạn sẽ muốn sử dụng để trở thành 1 front end, backend hay 1 chuyên gia devops để trở thành 1 lập trình viên Web. Mình đã làm những biểu đồ này cho 1 giáo sư cũ của mình. Người đã muốn chia sẻ cái gì đó với các sinh viên đại học của ông để cho họ viễn cảnh, ngoài ra tôi còn chia sẻ chúng ở đây để giúp đỡ cộng đồng.
Mục đích của những Roadmap này
Mục đích của những Roadmap này là để cho bạn 1 ý tưởng về cảnh quan. Và để hướng dẫn nếu bạn đang bối rối về việc phải học gì cho tiếp theo. Mình không khuyến khích bạn chọn những gì đã và đang phổ biến. Bạn nên tìm hiểu thêm về việc tại sao 1 công cụ sẽ phù hợp cho vài trường hợp hơn những cái còn lại. Và ghi nhớ rằng ‘phổ biến’ không có nghĩa là nó luôn tốt nhất cho công việc.
Ghi chú cho Những người mới bắt đầu
Những roadmap này bao gồm mọi thứ để học hỏi cho các hướng đi được ghi bên dưới. Khoan hãy bị choáng ngộp, lúc bắt đầu bạn không cần phải học hết tất cả nếu bạn chỉ mới khởi động. Chúng mình đang làm về các phiên bản người mới bắt đầu cho roadmap này và sẽ xuất bản sớm, chỉ ngay sau khi chúng mình đã xuất bản xong roadmap cho Back-end và DevOps 2022.
Nếu bạn nghĩ có thể cải tiến những điều này, hãy cứ đề xuất nhé.
Trong hội thảo công nghệ toàn quốc Vietnam Web Summit 2019 gần đây, Ông Nguyễn Hữu Bình, CEO TopDev từng chia sẻ: “Hiện nay, đang có một xu hướng đầu tư mạnh mẽ về CNTT tại Việt Nam, những đối tác TopDev đã và đang làm việc là những công ty công nghệ hàng đầu đến từ Ấn Độ, Hàn Quốc, Nhật Bản, Mỹ hiện đang làm việc với chúng tôi để triển khai những dự án CNTT rất lớn, chúng tôi nhận thấy rõ được nhu cầu của họ trong việc thu hút nguồn lực trẻ tại Việt Nam. Có lẽ đây là lúc Việt Nam nên nắm bắt cơ hội để trở thành quốc gia mũi nhọn trong khu vực để đi đầu về lĩnh vực IT”
Nhiều chỉ số top thế giới nhưng vẫn còn nhiều thách thức
Việt Nam đã tăng thêm ba bậc trên Bảng xếp hạng Chỉ số đổi mới toàn cầu 2019 (GII) để xếp thứ 42 trên tổng số 129 các nền kinh tế toàn cầu. Bảng xếp hạng mới nhất được Tổ chức Sở hữu trí tuệ thế giới (WIPO) công bố tại New Delhi, Ấn Độ vào thứ Tư. Trong 9 tháng vừa qua của năm 2019, Việt Nam đã thu hút 26,16B $ vốn FDI – theo báo cáo của US News & World về các chuyển đổi mới tại Việt Nam, đã đưa Việt Nam lên vị trí thứ 8 trong số 20 quốc gia tốt nhất để đầu tư theo báo cáo của US News & World Report. Việt Nam cũng đứng thứ 48 trong số 157 quốc gia về chỉ số vốn nhân lực (HCI), đứng thứ hai chỉ sau Singapore trong khu vực ASEAN.
Theo báo cáo tổng kết năm 2019 và định hướng năm 2020 của Bộ Thông Tin & Truyền Thông, tổng doanh thu lĩnh vực công nghiệp ICT 2019 ước đạt 112,350 tỷ USD, trong đó xuất khẩu ICT chiếm 81,5%. Cũng theo đó, Bộ TT&TT cũng công bố rằng, doanh thu công nghiệp phần mềm đạt 5 tỷ USD, tăng 500 triệu USD so với năm 2018. Tổng số tiền nộp ngân sách nhà nước từ công nghiệp ICT năm 2019 là 54.000 tỷ đồng, tăng 2000 tỷ so với năm 2018. Tuy nhiên, với ngành công nghiệp nội dung số, hiện doanh thu của nó chỉ đang chiếm một phần rất nhỏ trong doanh thu ngành CNTT (chiếm 0,76% doanh thu ngành CNTT).
Trong bài phát biểu của mình, Bộ trưởng TT&TT Nguyễn Mạnh Hùng cho biết: Năm 2020 ngành TT&TT xác định là năm chuyển đổi số quốc gia, là năm khởi động mạnh mẽ để tiến tới một Việt Nam số. Đây sẽ là một sự chuyển đổi sâu sắc và toàn diện, mà đầu tiên là sự chuyển đổi về phương thức, quy trình vận hành, về cách làm việc trong mọi lĩnh vực. Đây cũng được xem là một dấu hiệu đáng mừng, giúp Việt Nam tiến gần hơn đến việc trở thành một quốc gia IT có tầm vóc trong khu vực.
Hiện tại thị trường nhân lực tại Việt Nam rất cần các nhân lực chủ lực chất lượng cao, nhưng lượng cung luôn ít hơn cầu. Chiếc chìa khóa duy nhất để giải quyết vấn đề nan giải này chính là nằm ở đào tạo. Hiện tại, các trung tâm đào tạo tại Việt Nam vẫn chưa đáp ứng đủ nhu cầu của doanh nghiệp về nhân sự. Chỉ có 30% trong số 50,000 sinh viên CNTT đáp ứng nhu cầu của doanh nghiệp.
Việt Nam điểm đến của những gã khổng lồ công nghệ
Theo một báo cáo mới nhất về Nền kinh tế số Đông Nam Á năm 2019, dự kiến nền kinh tế số của khu vực sẽ vượt mức 100 tỷ USD trong năm nay và sẽ sớm tăng gấp ba vào năm 2025. Đông Nam Á có khả năng trở thành một trong những thị trường phát triển nhanh nhất về thương mại điện tử nhờ dân số am hiểu công nghệ, đặc biệt là sử dụng smartphone ngày càng gia tăng. Theo khảo sát của TopDev, trong năm 2020, thị trường tại Việt Nam có sự phản hồi tốt và phát triển mạnh trong 12 lĩnh vực chính như: E-commerce, Fintech, Gọi xe/thức ăn, Edtech, Healthcare, v.v….
Trong thời gian sắp tới, Việt Nam sẽ là điểm đến của nhiều công ty tập đoàn công nghệ lớn trên thế giới. Ông Roxy Sexton – Phó chủ tịch phụ trách chuỗi cung ứng của Apple, cho biết Apple sẵn sàng gặp gỡ, tìm hiểu cơ hội hợp tác với các doanh nghiệp ICT Việt Nam có mong muốn tham gia chuỗi cung ứng của Apple. Ngoài Samsung là một trong những tập đoàn vốn nước ngoài giúp đẩy mạnh nền kinh tế của Việt Nam, sự tham gia của Apple trong thời gian tới có thể sẽ còn tiếp thêm sức mạnh cho làn sóng đầu tư nước ngoài tại Việt Nam trong năm 2020. Riêng Samsung trong năm 2020, họ cho biết sẽ đầu tư thêm 300 triệu đô tiền đầu tư vào R&D tại khu vực Hà Nội, cần thêm 4,000 nhân lực cho lĩnh vực công nghệ trong thời gian tới.
Hindustan Computers Limited (HCL), một trong 3 công ty IT lớn nhất Ấn Độ (Top 5 công ty outsource trên thế giới) đã phát triển trung tâm của mình tại TP.HCM, cần thêm 10,000 kỹ sư trong 5 năm nữa. Công ty Axon Enterprise, một trong những công ty phát triển công nghệ cho việc hành pháp hàng đầu tại Mỹ cũng đã tập trung cơ sở phát triển công nghệ của mình tại TP.HCM Việt Nam.
Mức lương lên đến 130 triệu nhưng chưa chắc tuyển được người, IT là một trong 4 ngành có tỷ lệ nhảy việc cao nhất
Vị trí Tech Management (nắm giữ vai trò CTO hay CIO của một công ty) có mức lương lên đến $5,700 USD (tương đương 132,291,000 đồng), và $1,329 (tương đương 30,8 triệu đồng) là mức lương trung bình doanh nghiệp sẵn sàng trả cho người có kinh nghiệm và tỉ lệ tăng lương sau 1 năm làm việc đạt 12 – 18%. Với mức lương khoảng 38,165,000 đồng/tháng, TensorFlows hiện là công nghệ được trả lương cao nhất, theo sau là Kubernetes và Go (33,577,000/ tháng với 28,270,000 đồng/tháng).
Machine Learning/ AI Engineer vẫn giữ vị trí đầu bảng trong các vị trí triển vọng nhất với mức lương khá cao, liên tiếp là 51 triệu đồng/tháng và 44 triệu đồng/tháng. Với sự khan hiếm nhân lực cũng như những yêu cầu gắt gao, mức lương của cấp quản lý trên 5 năm quản lý không thấp hơn 31 triệu đồng/tháng nhưng các nhà tuyển dụng cũng sẽ “đốt đuốc” tìm người với những yêu cầu không chỉ về lương mà còn các yêu cầu khác trong công việc để đảm bảo cân bằng cuộc sống.
Tìm kiếm nhân tài là một chuyện, giữ chân nhân tài là bài toán khó giải khác dành cho doanh nghiệp khi IT là 1 trong 4 ngành có tỷ lệ nghỉ việc cao nhất, với 20 tháng là thời gian trung bình cho một lập trình viên “nhảy” việc, và tỷ lệ nghỉ việc đạt mốc 24% trong năm 2020. Lý giải cho những con số này, báo cáo IT của TopDev phân tích câu trả lời không nằm ở mức lương, bởi khi được trao công việc mới, mức lương của lập trình viên chỉ tăng 15%, mà giá trị họ nhận lại nằm ở những điều kiện khác nhau, đứng đầu là nhu cầu được đào tạo bài bản (43.2%) và lộ trình phát triển sự nghiệp rõ ràng (38.4%), ….
Đâu là giải pháp cho việc thiếu hụt nhân lực trong 5 năm vừa qua?
Theo báo cáo IT của TopDev, năm 2020 Việt Nam sẽ cần hơn 400,000 nhân lực ngành IT, và con số này sẽ tăng lên đến 500,000 vào năm 2021. Nguyên nhân dẫn đến sự thiếu hụt này nằm ở nhiều phương diện, mà chủ yếu đến từ chương trình đào tạo thiếu định hướng khi chưa đúng trọng tâm mà doanh nghiệp tìm kiếm, hay lớp sinh viên ra trường đang thiếu những kỹ năng cần thiết cùng trình độ sử dụng tiếng Anh chưa thành thạo.
Trong thời gian tới có lẽ các trung tâm cơ sở đào tạo CNTT cần chú trọng nhiều hơn về chất lượng hơn là số lượng. Hiện tại, chính phủ cũng đã có kế hoạch đầu tư thêm cho 20 trường lớp hiện đang giảng dạy CNTT tại Việt Nam. Từ đó, chính phủ sẽ cùng phối hợp với doanh nghiệp để mở ra thêm các khóa đào tạo ngắn hạn để các bạn trẻ có thể tiệm cận với những nhu cầu thực tế và bắt kịp các công nghệ mới. Thực tế cho thấy, nhiều công ty hiện nay đã có chương trình tập sự là cơ hội tốt nhất cho sinh viên rèn luyện. Việc đi làm thêm cũng giúp cho họ rất nhiều trong việc tích lũy kinh nghiệm, quy trình và các phương thức giải quyết vấn đề trong công việc tương lai. Bên cạnh đó, ngoại ngữ cũng như những kỹ năng tương tác xã hội cũng cần được chú trọng đào tạo hơn là chỉ tập trung vào kỹ năng và kiến thức.
Mặt khác, ở thời đại tuyển dụng đa thế hệ, các doanh nghiệp cũng gặp thách thức trong việc giữ người cũng như tuyển dụng nhân sự mới, một phần cũng do văn hóa làm việc của thế hệ mới đã thay đổi. Doanh nghiệp nên chú trọng nhiều hơn về việc tạo sự cân bằng trong công việc và cuộc sống, cũng như cải thiện môi trường công ty năng động hơn, giúp các ứng viên có thể dễ dàng hòa nhập, và cùng đóng góp ý tưởng, phát triển sản phẩm của công ty. Hiện tại cũng có rất nhiều doanh nghiệp lớn đang áp dụng mô hình khởi nghiệp ngay trong chính công ty của mình nhằm giúp nhân viên có động lực cống hiến hơn trong công việc.
Tuy nhân lực IT Việt Nam ngày càng được đánh giá cao nhờ khả năng tự học, tìm tòi và hòa nhập với doanh nghiệp nước ngoài, để mà nói công nghệ trong nước có thể sánh ngang với quốc gia trong khu vực thì chưa đủ khi bài toán nhân lực chưa được khai thác đủ tầm và lực để đảm bảo về số lượng và chất lượng. Ông Nguyễn Hữu Bình, chia sẻ thêm:
“Xét cho cùng, nếu muốn vươn lên để đạt được sự tiến bộ như các quốc gia tiên tiến khác, Việt Nam cần phải bức tốc về mặt năng suất lao động, Cuộc đối đầu giữa các mô hình phát triển trên thế giới cuối cùng cũng nằm ở chỗ mô hình nào tạo ra năng suất lao động cao hơn. Đó cũng là lý do chúng ta thấy được các cường quốc hiện nay chiến đấu với nhau chính yếu không phải về thương mại, mà là về công nghệ. Vì vậy công nghệ chính là con đường giúp Việt Nam từ bỏ những lối mòn để bắt lấy con sóng khơi xa. Ước mơ Việt Nam trở thành quốc gia IT sẽ thành hiện thực vào một ngày không xa.”
Bắt đầu 1 năm mới thường là lúc nhìn lại bản thân và đặt mục tiêu mới, và nếu bạn đang build các ứng dụng web trong hay ngoài công việc, thì mình có 7 đề mục tiêu mà bạn có thể xem xét.
Những mục tiêu dễ đạt thành tựu này sẽ giúp bạn vào guồng tiếp cận tới việc phát triển web, đặt những xem xét cốt lõi về khả năng tiếp cận của nó.
7 “đầu mục” phấn đấu cho bạn sẽ nêu trong bài này:
Nâng cấp lint của bạn bằng một plugin a11y
Chọn một extension (tiện ích mở rộng) để thường xuyên kiểm tra code của bạn trên trình duyệt
“Làm bạn” với trình đọc màn hình của bạn và học thêm ít nhất 3 kỹ năng
Tạm ngưng dùng chuột/ trackpad một thời gian
Kiểm tra các heading của bạn
Làm quen với các thách thức do Single Page Applications đưa ra
Thay đổi định nghĩa của bạn về việc “đã hoàn thành”
1. Tích hợp A11y-Linting vào dự án của bạn
Nếu bạn đang làm việc về front-end, có thể bạn đã sử dụng ESLint trong dự án của mình rồi. Đây là công cụ tuyệt vời để đảm bảo các error thông thường được phát hiện sớm nhất có thể, và trước khi chúng được đưa ra vận hành.
Các plugin bổ sung có thể tìm quét lỗi (lint) cho các vấn đề truy cập, và 1 trong những công cụ tốt là elsint-plugin-jsx-a11y. Điều này sẽ kiểm tra các vấn đề truy cập mà có thể được phát hiện bởi 1 linter, ví dụ:
Đảm bảo form input có những nhãn (label) và ID thích hợp
Thuộc tính ‘alt’ thích hợp cho các hình ảnh, bao gồm kiểm tra các vấn đề chất lượng chung trong văn bản ‘alt’ (như sử dụng dư thừa các từ như “Hình ảnh của …”)
Việc sử dụng tabIndex không phù hợp
Dùng plugin ‘jsx-ally’ giúp bạn giới thiệu 1 trang net an toàn, nắm bắt các vấn đề code trước cả khi nhìn vào trình duyệt. Cùng với các nguyên tắc ESLint khác, bạn còn có thể cài đặt thất bại CI pipeline của mình nếu các vấn đề không chỉ ra được. Và nó giúp mình tiết kiệm thời gian tìm kiếm những loại error trong phần review code.
2. Chọn extension (tiện ích mở rộng) để kiểm tra Code của bạn trong trình duyệt
Rất nhiều vấn đề truy cập có thể được tìm ra bởi các tiện ích mở rộng trình duyệt, và nó không chỉ highlight vấn đề rõ ràng trên trang, chúng còn đề xuất hướng giải quyết cho bạn. Những công cụ này khá tuyệt cho các vấn đề truy cập như:
Đảm bảo đủ độ tương phản màu
Đảm bảo tất cả hình ảnh đều có thuộc tính ‘alt’
Xác minh các heading và các semantic HTML đã được sử dụng phù hợp
Các công cụ phổ biến nhất là Axe và WAVE. Cả 2 đều trên cả tuyệt vời – hãy thử cả 2 và xem bạn hợp cái nào hơn Sử dụng chúng trước khi đưa bất kỳ code nào cho review. Và từ đó các thao tác kiểm tra truy cập sẽ trở thành một phần không thể thiếu trong quy trình làm việc của bạn.
3. Làm bạn với Screen Reader của mình
Hãy thoải mái với cách screen reader của bạn làm việc. Và cách người dùng thường lướt web với nó là điều cần thiết để xem xét khả năng truy cập đúng cách trong phương pháp lập trình chung của bạn.
Screen Reader nào thì phù hợp?
Dựa trên Khảo sát Người dùng Screen Reader của WebAIM, các option miễn phí này sẽ hoạt động khá ổn:
Người dùng Mac có thể đơn giản dùng built-in VoiceOver (chuyển Bật và Tắt với ‘cmd’ + ‘F5’)
Như là điểm bắt đầu cơ bản nhất, hãy học những thứ sau đây với screen reader bạn chọn:
Đọc và lướt qua một trang nội dung – điều này sẽ giúp bạn kiểm tra các phần của trang và cách chúng được thông báo đến người dùng screen reader
Quét qua các heading – đây là điều cần thiết do phần lớn người dùng screen reader sẽ “quét” nội dung của bạn theo cách này trước khi vào một phần nhất định
Tab vào các mục tương tác – đây là phần điều hướng bàn phím tiêu chuẩn, nhưng hãy thoải mái thực hiện việc này với trình đọc màn hình được bật và tương tác với các mục đó khi bạn làm như vậy (ví dụ: nhấp vào nút và liên kết)
Hãy thoải mái hơn khi dùng screen reader của bạn. Và kiểm tra code thường xuyên với nó giúp bạn tự nhiên xem xét “Cách nó sẽ hoạt động với screen reader?” khi chọn 1 phần của công việc.
4. Tạm ngưng dùng chuột/ trackpad một thời gian
Tương tự như Bước 3, hãy thoải mái với cách người dùng điều hướng web với bàn phím. Vài điều quan trọng cần biết:
Bạn cần đảm bảo sao cho usersẽ có thể di chuyển qua tất cả các mục tương tác trên trang (nút, liên kết, form input, v..v..) bằng việc chỉ sử dụng nút ‘tab’
Mục hiện đang được hiển thị chính phải có chỉ báo trực quan rõ ràng (ví dụ: viền màu xanh)
Các mục không tương tác sẽ không bao giờ nhận được thông báo định hướng bằng phím tab
Thứ tự hiển thị khi tab trên trang nên hợp lý. Thông thường, điều này có nghĩa là nó tuân theo thứ tự bạn mong đợi như một người dùng được quan sát (ví dụ: từ trên xuống dưới) và không nhảy ngẫu nhiên
Kiểm tra đều đặn công việc của bạn bằng cách chỉ dùng điều hướng bàn phím sẽ giúp đánh dấu các vấn đề truy cập như là:
Các phần tử HTML được khai báo theo thứ tự hợp lý (khiến thứ tự tab không nhảy theo tiến trình bạn muốn)
Những mục tương tác không nhận được focus (ví dụ: một thành phần tùy chỉnh như Thẻ mà người dùng sẽ có thể nhấp vào)
Đa trạng thái focus mặc định bị xóa vì lý do thương hiệu / thiết kế, nhưng không bao giờ bị thay thế’
5. Kiểm tra các cấp heading
Như đã nêu trong Bước 3, các người dùng screen reader sử dụng các cấp heading để có thể quét và đọc lướt nội dung của bạn. Theo cách rất giống với cách người dùng quan sát. Việc kiểm tra nhanh các cấp heading của bạn có thể tạo ra sự khác biệt lớn và giúp hiển thị nội dung hữu ích cho nhiều người dùng hơn.
Một số quy tắc nhỏ:
Mỗi trang nên có một yếu tố ‘h1’ mô tả rõ ràng mục đích của trang
Các cấp heading sau đó chỉ nên tăng từng cái một, ví dụ: h2 → h3, đừng nhảy vọt
6. Thấy được những vấn đề có thể phát sinh trên Single Page Applications (Ứng dụng trang đơn)
Bản thân nó đã là 1 chủ đề lớn. Nhưng nếu bạn làm việc với framework tối ưu hoá render về client-side như React hoặc Vue. Việc làm quen với những cạm bẫy tiềm tàng này sẽ mang lại lợi ích rất lớn cho khả năng truy cập các ứng dụng web của bạn.
Những cạm bẫy tiềm năng và nguồn tài nguyên cho nó
Thay đổi route:
Khi route thay đổi trong ứng dụng do khách hàng render. Thường người dùng screen reader không biết nội dung trang đã thay đổi và có thể đã “mất”
Nếu người dùng nhấp vào một liên kết dẫn đến thay đổi route do khách hàng render. Thì thường phần focus sẽ được để lại trên liên kết dù không còn hiển thị nữa. Vốn nó có thể gây khó hiểu!
Tiêu đề trang:
Trong Single Page Application, tựa đề trang không bao giờ thay đổi trừ khi nó được quản lý rõ ràng. Điều này không giúp ích cho lắm với người dùng screen reader. Người có thể mở vài tab hay cửa sổ và muốn biết họ đang ở trang nào.
7. Thay đổi định nghĩa về việc “Hoàn thành”
Bước cuối này có lẽ là bước quan trọng nhất – trước khi bạn review code trước khi ra lò:
Đăng ký bằng ESLint của bạn, được định cấu hình để kiểm tra a11y và sửa bất kỳ lỗi nào
Chạy project thông qua một trong những công cụ xác minh trong trình duyệt được đề cập ở trên. Và xem có bất kỳ vấn đề nào cần khắc phục không?
Bật trình screen reader của bạn và cung cấp cho nó một cách nhanh chóng. Bao gồm quét theo cấp heading
Tab thông qua nội dung bạn vừa tạo – liệu nó có hoạt động như mong đợi?
Nếu công việc của bạn là để kích hoạt thay đổi route trong Single Page Application. Hãy kiểm tra kỹ xem các thay đổi route đã được xử lý với khả năng truy cập chưa
Nếu bạn hoàn thành các bước này thường xuyên nhất có thể trong công việc của mình. Bạn sẽ đi đúng hướng để tạo các ứng dụng web có thể truy cập vào năm 2024!
-Mình vừa thi cuối kì môn Machine Learning đợt giáng sinh vừa rồi. Nghe truyền thông đồn thổi đã lâu, nhưng phải đến khi thực sự bắt tay vào học, mình mới hiểu được bản chất của Machine Learning, thực ra là toán và thuật toán. Đúng, nó vẫn rất thần kỳ, nhưng không phải theo cái cách mà các bài báo lá cải nói về nó cùng những buzzwords như trí tuệ nhân tạo, kỷ nguyên 4.0, máy móc thay thế con người… Vì vậy, mình muốn chia sẻ và giải thích về cách Machine Learning hoạt động cho những ai quan tâm đến nó, theo một cách mà không cần phải biết nhiều kiến thức chuyên sâu về toán hay lập trình, bạn vẫn có thể hiểu được. Tình cờ mình tìm được bài viết này trên Internet, gần như đáp ứng được yêu cầu của mình, đó là giải thích rõ ràng, đi sâu vào bản chất vấn đề, mà sử dụng ngôn ngữ bình dân, ít toán và không code. Vậy nên, được sự cho phép của tác giả bài viết, mình đã quyết định dịch nó.
– Mình chỉ dịch ý, diễn đạt theo ý hiểu của mình, để đem đến một văn phong gần gũi với người đọc Việt hơn. Đôi chỗ mình sẽ chèn thêm các chú giải cần thiết để bạn không phải tra cứu thêm mà vẫn hiểu hết bài viết (mình hi vọng vậy). Các chú giải sẽ được đặt trong ngoặc, in nghiêng ngay cạnh thuật ngữ, hoặc mình để trong một textbox riêng giống như disclaimer này nếu thấy cần thiết.
– Với các thuật ngữ chuyên ngành, mình sẽ sử dụng linh hoạt cả tiếng Anh và tiếng Việt để tránh lặp từ quá nhiều.
– Hi vọng nhận được sự ủng hộ và góp ý của các bạn! Enjoy!
Machine Learning (học máy, viết tắt là ML) cũng giống như sex trong trường học vậy. Ai cũng nói về nó, một vài người thực sự làm nó, và chỉ có giáo viên của bạn mới dạy nó. Nếu bạn đã từng thử tìm đọc các bài báo trên mạng về Machine Learning, bạn gần như sẽ tìm được hai kiểu bài: một là các bài nghiên cứu học thuật với hàng tá lý thuyết khô khan (tôi thậm chí còn không thể đọc hết nửa bài nữa), hai là những bài giật tít câu view về Artificial Intelligence (trí tuệ nhân tạo, viết tắt là AI), sự thần thông quảng đại của Data Science (khoa học dữ liệu), và các công việc mới xuất hiện trong kỉ nguyên 4.0…
Vậy nên tôi quyết định viết, một bài viết mà tôi ước là nó đã phải tồn tại từ lâu rồi. Một bài giới thiệu đơn giản về Machine Learning cho những ai quan tâm và muốn tìm hiểu về nó. Chỉ có những ví dụ thực tế, những giải pháp thực tế, viết bằng ngôn ngữ bình dân không lý thuyết cao siêu gì cả. Một bài viết dành cho tất cả mọi người. Dù bạn là một lập trình viên hay một nhà quản lý.
Ok, bắt đầu thôi!
Hai loại bài viết bạn thường gặp nếu tìm kiếm “Machine Learning” trên Google
Học máy – tại sao máy móc lại phải học?
Khá
Đây là Khá. Khá muốn mua một chiếc ô tô. Khá lấy giấy bút ra và tính xem mình sẽ phải tiết kiệm bao nhiêu tiền mỗi tháng để mua được ô tô. Sau khi lướt qua vài cái quảng cáo ô tô trên mạng, Khá biết một chiếc xe mới sẽ có giá khoảng 500 triệu, chiếc nào đã đi được một năm thì khoảng 450 triệu, hai năm thì khoảng 400 triệu, và cứ như thế.
Là một người có khả năng phân tích khá, Khá bắt đầu nhìn ra một quy luật (pattern): giá của một chiếc ô tô phụ thuộc vào số tuổi của xe, và cứ đi được một năm thì giá xe giảm 50 triệu, nhưng sẽ không hạ xuống dưới 100 triệu.
Nói theo cách của Machine Learning, Khá vừa mới phát minh ra regression (tiếng Việt là hồi quy) – anh ấy dự đoán giá ô tô dựa trên dữ liệu trong quá khứ. Chúng ta vẫn thường làm điều đó, khi cần ước lượng giá của một chiếc iPhone like-new trên Chợ Tốt, hoặc khi tính xem cần mua bao nhiêu rau cho một bữa lẩu 5 người. Mỗi người ăn 2 lạng? Hay 3 lạng?
Sẽ thật tuyệt vời nếu như có một công thức đơn giản cho tất cả các bài toán trong thế giới này. Đặc biệt là cho bữa lẩu. Nhưng rất tiếc là không có.
Quay lại vụ mua ô tô. Vấn đề ở đây là, có rất nhiều yếu tố ảnh hưởng đến giá của một chiếc ô tô, ví dụ như hãng sản xuất, thời gian sản xuất khác nhau, các điều kiện kỹ thuật, công nghệ mới… Một người bình thường như Khá không thể nhớ được hết các thông tin đó trong đầu để mà tính ra kết quả được. Và chúng ta cũng vậy.
Con người chúng ta rất ngốc nghếch và lười biếng, vậy nên chúng ta mới cần máy móc làm toán hộ mình. Vậy thử nhờ máy móc xem sao. Hãy thử cho chúng dữ liệu và yêu cầu chúng tìm ra những “quy luật ngầm” (hidden pattenrs) để định giá ô tô.
Ồ, và nó làm được này! May mắn là máy móc xử lý những công việc kiểu này tốt hơn con người rất nhiều, kể cả khi chúng ta xem xét cẩn thận tất cả các mối quan hệ giữa các yếu tố kể trên.
Và từ đó, Machine Learning ra đời.
Ba “nguyên liệu” chính của Machine Learning
Bỏ qua mọi quảng cáo nhảm nhí về AI, thì mục tiêu duy nhất của ML là dự đoán các kết quả dựa trên dữ liệu đầu vào. Tất cả các nhiệm vụ của ML có thể được diễn giải theo cách đó, nếu không thể thì đó không phải một bài toán giải quyết được bằng ML.
Bạn càng có nhiều mẫu thử (samples, ý nói dữ liệu thực tế) đa dạng, thì máy móc càng dễ để tìm ra các quy luật liên quan và dự đoán kết quả. Do vậy, chúng ta cần 3 nguyên liệu chính để “dạy” máy móc học:
– Dữ liệu: Bạn muốn phát hiện spam? Hãy thu thập các tin nhắn spam trong thực tế. Bạn muốn dự đoán giá cổ phiếu? Hãy thu thập lịch sử giá. Bạn muốn biết người dùng thích gì? Hãy phân tích hành vi của họ trên Facebook (đừng, Mark, dừng ngay việc đó lại đi, quá đủ rồi!). Dữ liệu càng đa dạng, kết quả càng chính xác. Có những trường hợp cần ít nhất là hàng chục nghìn hàng dữ liệu (hàng, cột trong bảng biểu Excel ấy).
Có hai cách để thu thập dữ liệu – thủ công hoặc tự động. Cách thủ công có thể gây ra ít sai sót hơn nhưng lại tốn thời gian, nên nhìn chung thu thập kiểu thủ công khá là tốn kém.
Cách tự động thì rẻ hơn – bạn thu thập tất cả mọi thứ bạn có thể tìm thấy và hi vọng có được kết quả tốt nhất.
Những công ty thông minh như Google tận dụng chính người dùng để dán nhãn dữ liệu miễn phí cho họ. Bạn còn nhớ cái mã captcha mà vợ chồng chị Dậu dùng để bán cái Tí không? Đùa thôi, cái mà hay hiện lên khi bạn click vào ô download, rồi yêu cầu bạn phải “Chọn những hình vuông chứa biển báo giao thông trong các hình dưới đây” ấy?
Nó đây
Đó chính xác là những gì Google đang làm đấy. Sử dụng lao động miễn phí! Thực ra, nếu ở vị trí của họ, chắc tôi còn bắt bạn xem nhiều mã captcha hơn nữa ấy chứ. Nhưng, từ từ đã…
Rất khó để thu thập được một bộ dữ liệu tốt (theo thuật ngữ chuyên ngành là dataset – hay tập dữ liệu). Chúng quan trọng đến nỗi mà nhiều công ty có thể đồng ý tiết lộ về thuật toán của họ, còn dữ liệu thì không.
– Tiếp đến là các đặc trưng (features): còn được biết đến với tên gọi là tham số (parameters) hoặc các biến (variables). Chúng giống như các yếu tố mà máy móc cần phải xem xét khi “học” vậy. Ví dụ, không cần tính toán bạn cũng biết là một chiếc ô tô được sử dụng càng nhiều thì khi bán lại càng mất giá, vậy nên giá của một chiếc ô tô cũ phụ thuộc một phần vào số km đã đi được của nó đúng không? Đó chính là một đặc trưng đấy. Các đặc trưng khác có thể kể đến như túi tiền của người ăn với bài toán đi chợ cho bữa lẩu, hay giới tính, với bài toán phân tích sở thích người dùng…
Khi dữ liệu được lưu trữ trong các bảng biểu (bảng Excel là một ví dụ), các đặc trưng đơn giản là tên các cột trong bảng thôi. Nhưng nếu dữ liệu của bạn là 100 Gb ảnh mèo thì sao? Chúng ta không thể coi mỗi pixel ảnh là một đặc trưng được. Đó là lí do tại sao bước chọn lọc ra các đặc trưng thích hợp tốn nhiều thời gian hơn các công việc khác trong một quy trình giải quyết vấn đề bằng học máy. Đó cũng là các nguyên nhân chính gây ra các sai sót trong tính toán. Con người mà, thường rất chủ quan. Chúng ta thường chọn những feature mà mình thích, hoặc mình cho là quan trọng. Vậy nên, bỏ đi đừng làm người.
– Cuối cùng là thuật toán: Tất nhiên rồi. Mỗi bài toán đều có cách giải riêng của nó. Phương pháp bạn chọn sẽ ảnh hưởng đến độ chính xác(precision) , độ hiệu quả (performance), và quy mô của mô hình cuối (final model). Có một điều quan trọng là: nếu dữ liệu của bạn không phù hợp (ví dụ: quá ít, hoặc không đủ đa dạng, hoặc đơn giản là dữ liệu không đủ liên quan đến thứ cần dự đoán) thì dù là thuật toán tốt nhất cũng vô dụng. Đầu xuôi thì đuôi mới lọt. Vậy nên, đừng quá chú trọng vào độ chính xác, hãy thu thập đủ và đúng dữ liệu trước đã.
Giải thích một chút:
– Thuật toán (Algorithm): hiểu nôm na là các bước mà máy tính, hay con người thực hiện để giải quyết một vấn đề nào đó. Ví dụ, để nấu một bát mì bạn có thể: bước 1: xé vỏ mì -> bước 2: đun nước -> bước 3: thả mì vào nồi -> bước 4: thả rau vào nồi -> bước 5: đợi mì và rau chín -> bước 6: vớt mì ra bát. Vậy là xong một thuật toán để nấu mì. Giờ giả sử bạn hoán đổi thứ tự của bước 3 và bước 4, các bước còn lại giữ nguyên, bạn sẽ thu được một thuật toán khác, vẫn để nấu mì, nhưng kết quả bát mì sẽ khác với việc bạn thực hiện thuật toán ban đầu, có thể là rau sẽ chín kĩ hơn. Với máy tính thì ngoài việc thu được kết quả khác, chúng ta còn quan tâm đến thời gian và tài nguyên tiêu tốn để chạy một thuật toán nữa, cùng để thực hiện một nhiệm vụ, thuật toán A có thể chạy nhanh hơn thuật toán B, nhưng sẽ tốn nhiều bộ nhớ hơn, chẳng hạn.
– Mô hình cuối: hiểu nôm na là mô hình mà máy tính đã “học” được để giải quyết bài toán đó, ví dụ với bài toán dự đoán giá ô tô thì 1 mô hình có thể là: giá ô tô = giá mới – 0.2 x tuổi đời của xe – 0.05 x số km đã đi được – 0.01x số vết xước trên xe, chẳng hạn.
Ba “nguyên liệu” để nấu món ML
Học tập và trí thông minh
Có lần tôi đọc được một bài báo với tiêu đề “Liệu mạng neuron có thay thế được học máy không?” trên một trang báo lá cải. Những tay nhà báo thường xuyên gọi thuật toán linear regression(hồi quy tuyến tính – thuật toán cơ bản nhất trong học máy hoặc thống kê học) với một cái tên mỹ miều là trí tuệ nhân tạo, hoặc tệ hơn, SkyNet. Để mị giới thiệu cho mà nghe:
– Trí tuệ nhân tạo (Artificial Intelligence): là tên gọi của cả một lĩnh vực nghiên cứu, tương tự như sinh học hay hoá học ấy.
– Học máy (Machine Learning): là một phần của trí tuệ nhân tạo. Một phần quan trọng, nhưng không phải tất cả.
– Mạng neuron (Neural Networks – NN): là một trong những nhóm thuật toán học máy. Một anh chàng đẹp trai học giỏi trong lớp học ML đấy, nhưng trong lớp vẫn có những anh chàng khác học giỏi không kém (các mạng neurons sẽ được giải thích kỹ hơn ở các phần sau).
– Học sâu (Deep Learning- DL): một phương pháp hiện đại để xây dựng, huấn luyện và ứng dụng các mạng neuron. Cơ bản là, nó là một kiểu kiến trúc mới. Thực tế là không ai tách riêng deep learning với các kiểu network truyền thống cả. Chúng ta thậm chí vẫn sử dụng các thư viện chung cho chúng đấy thôi (trong lập trình, thư viện giống như một nơi chứa các dòng code được viết sẵn để bạn có thể ứng dụng vào sản phẩm của bạn mà không cần code lại vậy, trong học máy cũng có các thư viện được viết riêng để lập trình viên có thể dùng luôn mà không phải code lại các thuật toán phức tạp từ đầu). Để không bị xem là một thằng chỉ biết chém gió, tốt hơn hết hãy gọi đúng tên network và tránh dùng những buzzwords nhé.
Mối quan hệ giữa AI, ML, NN và DL
Một quy tắc chung nữa là: hãy so sánh những thứ ở cùng một cấp độ thôi. Việc hỏi “Liệu mạng neuron có thay thế học máy hay không” cũng giống như việc hỏi “Liệu cái bánh xe có thay thế được ô tô không” vậy. Truyền thông thân mến, điều đó sẽ làm giảm uy tín của các cậu đi nhiều đấy.
Máy móc có thể và không thể làm gì?
Phân loại các mô hình học máy
Hãy bắt đầu với những thứ căn bản. Có bốn hướng chính để giải một bài toán sử dụng học máy:
– Classical ML (học máy cổ điển): sử dụng các thuật toán học máy truyền thống, rất hiệu quả với những bài toán có dữ liệu đơn giản và các feature rõ ràng (ví dụ bài toán định giá ô tô).
– Reinforcement learning (Học củng cố – RL): dùng cho những bài toán mà bạn không có dữ liệu đầu vào, nhưng bạn có một môi trường để thoải mái khám phá (Ví dụ như trong game, sẽ không có dữ liệu từ thực tế, mà chỉ có các quy luật, hệ thống thưởng phạt, và máy tính sẽ học chơi game bằng cách chơi và thất bại nhiều lần, chúng sẽ học được đâu là một bước đi tốt giúp chúng qua cửa và được thưởng điểm, đâu là một bước đi tồi khiến chúng thất bại và phải chơi lại, bị trừ điểm).
– Ensemble learning (mô hình học máy kết hợp): nói nôm na là bạn so sánh nhiều mô hình trên 1 bài toán cụ thể, với cùng một tập dữ liệu đầu vào, để chọn ra mô hình cho độ chính xác cao nhất. Nên sử dụng phương pháp này cho những bài toán mà bạn ưu tiên chất lượng mô hình (tất nhiên bài toán nào cũng quan trọng về chất lượng, nhưng nếu bạn dự đoán ung thư thì hẳn nhiên là sẽ cần độ chính xác cao hơn lọc email spam rồi).
– Cuối cùng, neural networks và deep learning: hãy sử dụng chúng khi bạn có dữ liệu đầu vào phức tạp (ví dụ như với 100 Gb ảnh mèo ở trên, mỗi tấm có độ phân giải hàng ngàn pixel), những đặc trưng không rõ ràng, và bạn thì tin vào phép màu (nghe có vẻ bí hiểm, nhưng tác giả sẽ giải thích rõ hơn ở các phần sau).
Và đây là tấm bản đồ full hd không che của thế giới Machine Learning:
Nếu bạn lười đọc, hãy xem qua hình trên để có những hiểu biết chung nhé.
Một điều quan trọng cần nhớ là: luôn luôn có nhiều hơn một cách để giải một bài toán trong thế giới của ML. Sẽ luôn có một vài thuật toán phù hợp, và bạn cần chọn xem cái nào phù hợp hơn thôi. Tất cả mọi thứ có thể được giải quyết bằng một mạng neuron đơn giản, tất nhiên rồi, nhưng nếu thế ai sẽ mua những chiếc card GeForces đắt tiền đây? (trong ML, để huấn luyện những mô hình phức tạp, người ta thường dùng card đồ hoạ (GPU) thay cho CPU vì xử lý được nhiều phép toán hơn, nhưng cũng đắt đỏ hơn).
Chú thích: từ mục “Phân loại các mô hình học máy” đến đây, mình có thay đổi thứ tự nội dung một chút so với bài gốc, vì mình nghĩ trình bày theo thứ tự này sẽ dễ hiểu hơn.
Lời người dịch:
– Có thể đọc đến đây bạn vẫn còn nhiều thắc mắc về cách các phương pháp trong ML hoạt động. Tin vui là trong bài viết gốc, tác giả có giải thích chi tiết từng phương pháp. Tin không vui lắm là mình chưa dịch toàn bộ bài viết được vì quá dài. Vậy nên nếu bạn tò mò muốn biết thì có thể đọc bài gốc luôn, còn nếu bạn kiên nhẫn đợi bài dịch thì mình rất cảm ơn 😀
– Mình cũng là người mới học ML được vài tháng thôi, nên kiến thức và kinh nghiệm cũng chưa nhiều, vì vậy nếu có chỗ nào dịch hoặc viết chưa đúng, mình rất mong được mọi người góp ý :D.
– Phần 2 sẽ nói về các thuật toán học máy cổ điển, mà gần như ai học về ML cũng phải biết, đọc xong phần 2 đảm bảo bạn sẽ tự tin chém gió với bạn bè về cách cái con AI nó hoạt động luôn.
Lập trình viên là những người hầu như lúc nào, ngày nào cũng tiếp xúc với các dòng code, họ phải suy nghĩ rất nhiều và não hoạt động rất nhiều, nhiều hơn so với người bình thường. Vì vậy, họ có sự dẻo dai về tinh thần, và để làm được điều đó, biết cách điều chỉnh suy nghĩ và kiểm soát cảm xúc là một trong những nhân tố tạo nên.
Sau đây là 13 đặc trưng mà chỉ lập trình viên có với sự dẻo dai của tinh thần:
1. Không lãng phí nhiều thời gian vào việc cảm thấy tội lỗi với những điều đã qua.
Cảm thấy tội lỗi với bản thân, nuông chiều lòng thương hại là những điều làm lãng phí thời gian, tạo ra cảm xúc tiêu cực và làm ảnh hưởng các mối quan hệ hiện tại.
Thay vào đó thì họ trân trọng những điều tốt đẹp ở hiện tại, những gì họ đang có và nỗ lực phấn đấu với kế hoạch, mục tiêu trong tương lai.
2. Không chứng tỏ với mọi người mình là một người thông minh
Mọi người có xu hướng muốn chứng minh mình là một người thông minh, có kiến thức sâu rộng, bởi vì họ muốn được chú ý và được nhận sự quan tâm. Nhưng đối với lập trình viên, họ biết giá trị bản thân mình ở đâu, và theo dõi các mục tiêu và hướng tới mục tiêu đó để đạt được thành công.
3. Không ngại thay đổi
Mặc dù lập trình viên tiếp xúc với màn hình máy tính nhiều hơn “thế giới loài người” nhưng họ là những người cực kỳ linh hoạt. Tuổi thọ tồn tại trong ngành của các lập trình viên không quá dài và nhảy việc là chuyện bình thường như cơm bữa, vì vậy họ nhanh chóng thích nghi và thay đổi để phù hợp với từng môi trường.
4. Không tập trung vào những thứ không thể kiểm soát
Cố gắng kiểm soát mọi thứ là một phản ứng đối với sự lo lắng. Thay vì tập trung vào việc cố gắng kiểm soát mọi thứ thì lập trình viên tập trung vào việc kiểm soát chính mình. Điều đó giúp họ giảm đi căng thẳng và tập trung vào con đường họ lựa chọn.
5. Không quan tâm đến việc làm hài lòng người khác
Chúng ta thường đánh giá bản thân bằng cách xem xét những điều người khác nghĩ gì về mình, điều này rất dễ gây mệt mỏi và thất vọng bản thân. Đối với dân lập trình, họ đã có nhiều thứ phải lo lắng và cần bận tâm, vì vậy, buông bỏ suy nghĩ làm hài lòng mọi người đã giúp họ mạnh mẽ và tự tin hơn.
6. Không sợ đối diện với những rủi ro
Mọi người thường sợ chấp nhận rủi ro, cho dù đó là loại rủi ro nào. Còn đối với lập trình viên, thay vì họ lo lắng với những rủi ro đó, thì họ tự hỏi bản thân để phân tích, nhìn nhận rủi ro đó.
Một số câu hỏi gợi ý như sau:
Điều được và mất là gì?
Bài học nhận ra từ rủi ro đó?
Rủi ro đó có cần thiết cần quan tâm và giải quyết không?
Điều tồi tệ nhất và điều tốt nhất khi giải quyết rủi ro đó?
Sẽ như thế nào điều tồi tệ nhất xảy ra?
7. Không quá chìm đắm trong quá khứ
Quá khứ là quá khứ. Không có cách nào thay đổi được những điều đã qua, và chìm đắm trong quá khứ là cách tự làm hại bản thân, ngăn cản tận hưởng cuộc sống này và các dự định tương lai. Cố gắng sửa chữa sai lầm trong tương lai có thể dẫn tới stress và gây ra trầm cảm.
Lập trình viên nhận thấy không có một lợi ích nào khi phải chìm đắm trong quá khứ, đau khổ vì những việc đã xảy ra. Thay vào đó, họ xem đó là cơ hội, là bài học kinh nghiệm cho bản thân.
8. Không phạm phải một lỗi quá nhiều lần
Reflect bản thân là cách các lập trình viên thường xuyên sử dụng để tránh lặp lại lỗi đã phạm phải. Họ nhận ra rằng, điều quan trọng và cần thiết hơn đó là xem xét những việc đã xảy ra, họ có thể làm gì tốt hơn để tránh phạm sai lầm lần nữa trong tương lai.
9. Không đố kị bởi thành công của người khác
Mỗi người có một quan điểm về thành công khác nhau. Việc chú ý đến thành công của người khác sẽ khiến lập trình viên mất tập trung vào con đường và mục tiêu của chính họ. Ngay cả khi đã thành công, thì các lập trình viên cũng không bao giờ hài lòng nếu luôn tập trung vào thành công của người khác. Thay vào đó, các lập trình viên tập trung vào khả năng của bản thân, phát huy talents sẵn có và tích lũy để đạt được thành công theo chính họ.
10. Không bỏ cuộc sau thất bại đầu tiên
Thành công không phải đạt được ngay lập tức và thất bại hầu như luôn là trở ngại cần phải vượt qua. Mọi người nghĩ thất bại là không thể chấp nhận được hoặc điều đó có nghĩa là không đủ khả năng để đạt được điều gì đó. Nhưng đối với lập trình viên, bật lại sau thất bại sẽ khiến họ mạnh mẽ hơn và làm khiến họ có thêm động lực hơn.
11. Không sợ cảm giác một mình
Lập trình viên có xu hướng lựa chọn một không gian riêng chỉ có một mình, việc này sẽ dễ khiến họ tập trung hơn với hàng hà suy nghĩ, đó là lý do vì sao họ luôn sử dụng tai nghe mọi lúc, mọi nơi, để tránh những tiếng ồn xung quanh.
12. Cập nhật, nắm bắt xu hướng trên thế giới rất nhanh
Ai cũng nghĩ, lập trình viên là những người khô khan, cô lập với thế giới loài người. Nhưng họ là bầu trời kiến thức, họ research và tìm kiếm rất nhiều, với sự phát triển của công nghệ hiện tại, họ phải luôn update kiến thức để bắt kịp sự thay đổi nhanh chóng này và mở rộng kiến thức ngành.
Lập trình viên là những người kiên trì, nếu không kiên trì thì họ đã không thể tồn tại trong ngành nghề nhiều sự khác biệt này. Giống như khi lập trình một chương trình nào đó, chẳng thể mong đợi nó chạy ngay lần đầu launching, mà luôn phải được fix, nếu không kiên trì như vậy thì họ chẳng thể thành công được.
Bạn đọc có những đặc trưng gì nữa thì chia sẻ thêm cho TopDev nhé!
Khi mới bắt tay vào lập trình web, chắc hẳn bạn sẽ mơ hồ về những khái niệm về lập trình web và tự đặt ra những câu hỏi “AJAX là gì?”, “API là gì?”. Tuy nhiên không có gì phải ngại, qua bài post này bạn sẽ nắm trong tay 25 khái niệm hay gặp nhất về web.
AJAX: viết tắt cho cụm “Asynchronous JavaScript and XML” (JavaScript và HTML không đồng bộ): công nghệ giúp giúp tạo ra những trang Web động mà không phải reload lại trang, giúp tác vụ chạy mượt và đẹp hơn.
API: viết tắt của cụm từ “Application Programming Interface” (Giao diện lập trình ứng dụng): phương thức, giao thức kết nối với các thư viện và ứng dụng khác. Ngoài ra, API cung cấp khả năng truy xuất đến một tập các hàm hay dùng, từ đó có thể trao đổi dữ liệu giữa các ứng dụng.
Native API: native API là một tính năng tích hợp có sẵn trong môi trường lập trình. Ví dụ: document.querySelector() đuợc gọi là native API để chọn các phần tử HTML (HTML elements)
Browser console: bạn có thể truy cập vào developer toolbox với một số trình duyệt web. Với Firefox và Chrome trên Mac, nhấm tổ hợp phím Command + Option + I, trên Linux (hoặc Windows nếu mình nhớ không nhầm) là phím F12. Sau đó màn hình interactive console có thể gõ và thực hiện lệnh JavaScript. Console này cũng sẽ chỉ ra các lỗi và cảnh báo khác từ chương trình JavaScript.
Debugger: là công cụ được xây dựng giúp dev tìm ra lỗi và chỗ nào chương trình ngưng hoạt động. JavaScript cũng có hướng dẫn debugger dừng đúng ở câu lệnh có lỗi.
Browser API hay Web API: giống như native APIs, Web API là tính năng cụ thể có sẵn trên trình duyệt web, và dev có thể sử dụng ngay lập tức sau vài buớc cài đặt đơn giản. Ví dụ như setTimeout, setInterval, console.log. Xem thêm full list Web APIs.
ECMAScript: là tên chính thức của JavaScript. JavaScript sau đó vào năm 1996 được tiêu chuẩn hóa bởi ECMA, một tổ chức chuyên về tiêu chuẩn hóa các ngành công nghệ và hệ thống.
ES5: đồng nghĩa với ECMAScript 2009, là phiên bản thứ 5 của JavaScript. Nhằm tránh nhầm lẫn, người ta hay sử dụng cú pháp “ECMAScript + năm” để xác định phiên bản JavaScript mình muốn đề cập.
ES6: viết tắt của ECMAScript 2015, phiên bản thứ 6 của JavaScript. Từ năm 2015, JavaScript committee quyết định sẽ cho ra mắt các tính năng mới hằng năm. Từ đó, ECMAScript 2016, ECMAScript 2017, ECMAScript 2018 lần lượt ra đời.
JavaScript engine: là một phần của browser và có khả năng biên dịch (compile) và phiên dịch (interpret) JavaScript code. JavaScript engine đọc các đoạn code JavaScript rồi chuyển nó sang mã máy để máy tính (hoặc phần mềm máy tính như trình duyệt web, server node.js…) có thể hiểu và chạy được.
JavaScript specification: là bản mô tả chức năng cho ECMAScript. Trong mỗi ấn bản này, người ta định nghĩa các tính năng của ngôn ngữ lập trình ECMAScript theo một cách viết rất hàn lâm, với hàng đống những thuật ngữ khoa học. Loại tài liệu academic này chắc chắn không hợp khẩu vị của đa số JavaScript developer, nhưng lại rất quan trọng đối với các nhóm phát triển web browser và JavaScript engine. Họ sẽ tham khảo đặc tả và lần lượt tích hợp chức năng vào sản phẩm của họ.
Node.js: là môi trường chạy JavaScript bên ngoài browser, bao gồm JavaScript engine và V8 để compile và execute đoạn code. Nodejs không chạy trên một trình duyệt mà chạy trên Server.
Node package manager: viết tắt là npm, là một công cụ tạo và quản lý các thư viện lập trình Javascript cho Node.js. Trong cộng đồng Javascript, các lập trình viên chia sẻ hàng trăm nghìn các thư viện với các đoạn code đã thực hiện sẵn một chức năng nào đó. Nó giúp cho các dự án mới tránh phải viết lại các thành phần cơ bản, các thư viện lập trình hay thậm chí cả các framework.
HTTP request: hay còn gọi là thông báo yêu cầu được gửi từ client đến server, để yêu cầu server làm việc gì đó. Ví dụ như khi bạn đang ở trang web từ trình duyệt. Trang web này ngược lại có thể yêu cầu HTTP request để lấy dữ liệu, hầu hết là về REST APIs. (xem thêm bên dưới).
HTTP error: một số lỗi thường gặp với web services và server trả về các error cùng với các mã số quen thuộc như: 500 (server error), 404 (not found), 403 (forbidden), ..
JSON: viết tắt cho cụm từ JavaScript Object Notation, là một kiểu định dạng dữ liệu tuân theo một quy luật nhất định mà hầu hết các ngôn ngữ lập trình hiện nay đều có thể đọc được. JSON là một tiêu chuẩn mở để trao đổi dữ liệu trên web.
REST API: REST là một dạng chuyển đổi cấu trúc dữ liệu, API là giao diện lập trình ứng dụng giúp tạo ra các phương thức kết nối với các thư viện và ứng dụng khác nhau. REST API là một ứng dụng chuyển đổi cấu trúc dữ liệu có các phương thức để kết nối với các thư viện và ứng dụng khác. REST API không được xem là một công nghệ, nó là một giải pháp để tạo ra các ứng dụng web services thay thế cho các kiểu khác như SOAP, WSDL (Web Service Definition Language),…
Transpiler: những trình duyệt cũ không hỗ trợ cú pháp JavaScript mới từ phiên bản ECMAScript 2015 trở về sau. Lúc này, transpiler sẽ có nhiệm vụ biên dịch cú pháp JavaScript mới thành các phiên bản tương thích (như ECMAScript 2009).
Proposal: sự phát triển JavaScript được thông qua bởi hội đồng TC39. Thành viên từ nhóm này có thể đề xuất proposal để cải thiện hay thêm một số tính năng cho ngôn ngữ này. Proposal là một văn bản đặc tả viết bằng ngôn ngữ học thuật, mô tả những tính năng mới và cách áp dụng trong JavaScript.
Stage N: một bản JavaScript proposal sẽ bắt đầu với Stage 0. Càng nhận được nhiều đồng thuận từ hội đồng TC39, bản proposal càng có nhiều lợi thế ở những giai đoạn sau: 1, 2, 3 và 4. “Stage 1” hay “stage 2” chỉ giai đoạn của bản proposal đó. Nếu bản proposal đang ở “stage 2” thì nó đang tiến triển khá tốt và có khả năng được duyệt vào giai đoạn tiếp theo. Giai đoạn kết thúc là stage 4, đồng nghĩa với việc tính năng mới sẽ được áp dụng vào ngôn ngữ này.
Vanilla JavaScript: là cách gọi của những ứng dụng JavaScript “nguyên thủy”, ví dụ như những ứng dụng không cần đến sự trợ giúp của frontend library như React, Vue hay Angular.
XMLHttpRequest: XMLHttpRequest được thiết kế để đọc nguồn dữ liệu từ URL một cách đồng bộ (synchronous) hoặc không đồng bộ (asynchronous). Đọc dữ liệu một cách không đồng bộ giúp người dùng vẫn có thể thao tác với trình duyệt trong quá trình XMLHttpRequest đang đọc nguồn dữ liệu từ xa. XMLHttpRequest là một phần của “gia phả” AJAX, được sử dụng để thực hiện việc toàn bộ quy trình trao đổi thông tin giữa trình duyệt (máy khách) và máy chủ mà không yêu cầu phải tải lại trang.
FetchAPI: là một API đơn giản cho việc gửi và nhận request bằng js. Với fetch thì việc thực hiện các yêu cầu web và xử lý phản hồi dễ dàng hơn so với XMLHttpRequest cũ, nó khá tương đồng với XMLHttpRequest nhưng cải tiến hơn và được xây dựng dựa trên ECMAScript 2015 Promises.
CORS: viết tắt cho Cross-Origin Resource Sharing, CORS là một cơ chế cho phép nhiều tài nguyên khác nhau (fonts, Javascript, v.v…) của một trang web có thể được truy vấn từ domain khác với domain của trang đó. Xem thêm cách sử dụng CORS tại đây.
WebSocket: là một giao thức giúp truyền dữ liệu hai chiều giữa server-client qua một kết nối TCP duy nhất. Không giống với giao thức HTTP là cần client chủ động gửi yêu cầu cho server, client sẽ chờ đợi để nhận được dữ liệu từ máy chủ. Hay nói cách khác với giao thức Websocket thì server có thể chủ động gửi thông tin đến client mà không cần phải có yêu cầu từ client.
Trên đây là 25 web terms thường gặp nhất. Hy vọng sẽ giúp các bạn có thêm thông tin trong quá trình tìm hiểu về web development nhé.
DevOps khá là hot vào lúc này! Có nhiều cơ hội làm việc đang nằm chờ các kỹ sư DevOps xuất sắc cùng chuyên gia trong năm 2020 và những năm tới. Đối với 1 người lập trình Java có kinh nghiệm và muốn trở thành 1 kỹ sư DevOps làm mình nghĩ mình đã đến đúng nơi rồi.
Ưu điểm quan trọng nhất của DevOps là nó giúp mình cung cấp phần mềm tốt hơn và cung cấp nhiều quyền kiểm soát hơn đối với quy trình phát triển phần mềm và môi trường của bản thân với sự trợ giúp của các công cụ hiện đại và tự động hóa.
Đó là lý do tại sao đề nghị cho các chuyên gia DevOps ngày càng tăng theo cấp số nhân. Nó còn là 1 trong những công việc có thu nhập cao bên cạnh chuyên gia Data Science và Machine learning.
Các kỹ sư DevOps khắp nơi đang kiếm khoản $105,000 1 năm và trung bình $ 146,000 tại San Francisco, theo Glassdoor. Điều này làm mình nghĩ rằng nếu muốn tăng lương hay kiếm nhiều tiền hơn trong lúc bản thân còn phong độ kèm theo 1 công việc thú vị, nghiên cứu DevOps là 1 sự lựa chọn tốt.
Trước đây, mình đã chia sẻ DevOps Developer RoadMap, thứ cung cấp hướng dẫn đầy đủ và tầm nhìn để trở thành 1 kỹ sư DevOps. Trong bài viết này, mình sẽ chia sẻ vài khóa học online mà bạn cần để trở thành 1 Kỹ sư DevOps.
Ngày nay, việc tìm hiểu về các công cụ tích hợp liên tục như Jenkins và container như Docker (Jenkins là gì? và Docker là gì?, hãy click vào đường link để tìm hiểu thêm nhé) cùng với các kỹ năng DevOps chung đang đạt được động lực lớn trong lĩnh vực công nghệ. Tương tự như cách phát triển 1 ứng dụng di động vài năm trước.
Các công ty đang mong chờ các nhà phát triển mới quản lý trọn vòng đời các ứng dụng web của họ. Nghĩa là cả phát triển lẫn triển khai các ứng dụng đó.
Để trở thành Kỹ sư DevOps hiệu quả, mình đã phải mở rộng kiến thức về các công cụ sử dụng trong phát triển phần mềm. Điển hình như là Maven, ANT, và Gradle. Công cụ kiểm tra đơn vị như JUnit và Selenium. Công cụ triển khai như Docker, công cụ giám sát như New Relic.
Các công cụ tự động hóa cơ sở hạ tầng như Chef và Puppet. Các công cụ kiểm soát nguồn như Git và Github. Và các công cụ tích hợp liên tục như Jenkins và TeamCity. Các khóa học này cung cấp các giới thiệu tốt về công cụ DevOps cần thiết.
10 khóa huấn luyện DevOps tốt nhất cho các nhà phát triển kinh nghiệm
Không phải mất nhiều thời gian nữa, đây là danh sách của mình về vài khóa tuyệt nhất để học DevOps và công cụ thiết yếu được yêu cầu cho thực hiện tự động hóa trong quá trình phát triển và triển khai phần mềm.
Dự án DevOps: CI/CD với Jenkins Ansible Docker Kubernetes.
Jenkins rõ ràng là công cụ quan trọng nhất cho các kỹ sư DevOps vì cung cấp tích hợp liên tục.
Cho 1 chuyên gia DevOps, kiến thưc tốt về kiểm tra liên tục, tích hợp liên tục và triển khai liên tục và sự khác biệt giữa chúng là bắt buộc.
Khóa học này bao gồm tất cả cơ bản về Jenkins và dạy mọi thứ mà mình cần để thiết lập 1 ‘Jenkins build pipeline‘. Bắt đầu với việc kiểm tra liên tục (xây dựng, kiểm tra và phân tích tĩnh) tất cả các cách để triển khai liên tục (triển khai để dàn dựng và sản xuất).
Dự án DevOps: CI/ CD với Jenkins Ansible Docker Kubernetes
2.Học DevOps: Khóa Kubernetes hoàn chỉnh
Khi Google bắt đầu chạy container cách đây một thập kỷ, không ai có thể đạt được sự linh hoạt và hiệu quả của cơ sở hạ tầng như vậy. Sử dụng kiến thức này, Google đã phát hành Kubernetes như một dự án nguồn mở và miễn phí.
Ngày nay Kubernetes được sử dụng bởi các công ty nhỏ và các doanh nghiệp lớn muốn đạt được hiệu quả và vận tốc mà Google có. Khóa học này đã dạy cho mình cách chạy, triển khai, quản lý và duy trì các ứng dụng Docker được đóng gói trên Kubernetes
Học DevOps: Khóa Kubernetes hoàn chỉnh
3.Học DevOps: Liên tục cung cấp phần mềm tốt hơn
Đây là 1 trong những khóa học đầy đủ nhất về DevOps trên Udemy. Nơi đã hầu hết các công cụ và công nghệ thiết yếu được sử dụng bởi kỹ sư DevOps.
Khóa học nhắm đến các kỹ sư phần mềm và quản trị viên hệ thống muốn cung cấp phần mềm tốt hơn. Giúp mình thành thục trong việc cung cấp và triển khai phần mềm qua Git, Vagrant, Chef, Ansible, Jenkins, Docker, và Kubernetes.
DevOps nhìn nhận việc phát triển phần mềm 1 cách hoàn toàn mới. Mình đã có thể tự động hóa và dựng cấu hình cho các máy chủ cơ sở hạ tầng và sau đó giải quyết các lĩnh vực tự động hóa, triển khai liên tục, container và giám sát.
Git, Docker, và Puppet là những công cụ quan trọng nhất trong thế giới DevOps hiện đại và khóa học này đã dạy mình tất.
Nói ngắn gọn, 1 khóa giới thiệu tuyệt vời cho bất kỳ ai còn mới với lĩnh vực DevOps như quản trị viên hệ thống, nhà phát triển, chuyên gia IT. Và nó còn cung cấp cái nhìn tổng quát tốt về các công cụ DevOps cần thiết.
5. Công nghệ Docker cho DevOps và các nhà phát triển
Docker là 1 trong những công nghệ quan trọng cho DevOps. Nó cho phép mình kết hợp các thành phần lại với nhau và triển khai chúng trên container trên bất kỳ nền tảng nào như Linux hoặc Windows.
Khóa học này bao gồm tất cả các nguyên tắc cơ bản của các container Docker và dạy cho mình mọi thứ cần biết về việc phát triển và triển khai các ứng dụng hiện đại với phần mềm Docker.
6. Docker cho khóa DevOps: từ phát triển đến thành phẩm
Khóa này đã cho mình thấy bản thân có thể dựng gì với Docker cùng cách làm. Mình đã học các phần Docker cơ bản suốt chặn đường dài!
Cùng nhau chúng mình đã vượt qua phát triển và triển khai một ứng dụng Flask và Ruby on Rails đa dịch vụ.
7.Tìm Hiểu DevOps: Tự động hóa cơ sở hạ tầng với Terraform
Tự động hóa cơ sở hạ tầng là một phần lớn của DevOps và các công cụ như Ansible, Chef, Puppet giúp ích rất nhiều nhưng gần đây, Terraform đã trở nên phổ biến và là công cụ mình cần nắm vững nếu mình có ý định sắp hoặc vào vai trò Ops / DevOps.
Terraform bắt đầu từ cùng một nguyên tắc, cơ sở hạ tầng như mã, nhưng tập trung vào tự động hóa cơ sở hạ tầng. Toàn bộ cơ sở hạ tầng Đám mây của bạn (phiên bản, khối lượng, mạng, IP) có thể được mô tả ở terraform.
Trong khóa học này, mình đã tìm hiểu về cách tự động hóa cơ sở hạ tầng của bản thân với terraform cùng với AWS, Packer, Docker, ECR, ECS và Jenkins.
8.DevOps cùng AWS CodePipeline, Jenkins và AWS CodeDeploy
Đôi lúc mình khó hiểu về tích hợp liên tục (CI), phân phối liên tục và triển khai liên tục (CD) và cách thực hiện DevOps với Dịch vụ web của Amazon như AWS và Jenkins thì đây rõ ràng là khóa học phù hợp với bản thân.
Trong khóa học này, mình sẽ học các kỹ năng DevOps cần thiết cùng với tích hợp liên tục và phân phối liên tục trong đám mây AWS.
9.DevOps: CI/CD với Jenkins pipeline, Maven, Gradle
Khóa học DevOps trực tuyến này đãhướng dẫn mình cách xây dựng một đường ống tích hợp liên tục và phân phối liên tục tinh vi bằng cách sử dụng Jenkins và nhiều plugin của nó. Đặc biệt là các plugin đường ống.
Khóa học này được thiết kế để dạy về ins và outs của Jenkins và thiết lập các DevOps pipeline, ngay cả khi mình không có chút kinh nghiệm nào với nó, để giúp triển khai các thực tiễn DevOps này sẽ hợp lý hóa các quy trình phát triển.
Nói tóm lại, mình nghĩ đây là một khóa học tuyệt vời để xây dựng tích hợp liên tục, phân phối liên tục và các đường ống DevOps với Java, Gradle, Maven, Artifactory và Sqitch.
10.Hoàn tất DevOps với Docker, Jenkins, GIT, Vagrant, và Maven
Đây là một khóa học DevOps thực hành không chỉ giải thích cho bản thân vai trò của kỹ sư DevOps mà còn cung cấp kinh nghiệm thực hành trên các công cụ DevOps cần thiết.
Nó cung cấp một hướng dẫn đầy đủ về công nghệ DevOps cần thiết. Mình đã học Docker Mastery, Jenkins, GIT, Vagrant và Maven bằng cách làm theo hướng dẫn thực hành.
Đó là tất cả về một số khóa học tốt nhất để học DevOps trong 2019 và trở thành kỹ sư của DevOps. Như mình đã nói, nhu cầu về các kỹ sư và nhà phát triển phần mềm DevOps giỏi đang tăng theo cấp số nhân và không có đủ chuyên gia DevOps trên thị trường để hỗ trợ nhu cầu này.
Điều này có nghĩa là một cơ hội tuyệt vời để học DevOps và chuyển sang công việc có trách nhiệm hơn, lương cao hơn và thú vị hơn này. Các động cơ DevOps đang kiếm trung bình từ 120K USD đến 150K USD. Theo mình nghĩ, để trở thành một kỹ sư DevOps vào năm 2019, những khóa học này là một nơi tuyệt vời để bắt đầu.
Cảm ơn các bạn vì đã đọc hết bài viết. Nếu bạn thích các Khóa học DevOps này thì xin hãy chia sẻ với bạn bè và đồng môn của bạn. Có thắc mắc hay feedback gì cũng đừng ngại để lại lời nhắn nhé !
Mình không thể ngờ rằng mình đã trở thành kỹ sư phần mềm thực tập tại 1 công ty có tiếng chỉ với 4 tháng tự học, dù từng là 1 tay mơ và tự học lập trình chỉ vào khoản tháng Giêng đầu năm.
Trong xã hội ngày nay, dù ở bất cứ lĩnh vực nào, để tìm 1 internship (thực tập) khá là khó khăn, nói chi là trở thành 1 kỹ sư phần mềm thực tập, nhất là đối với 1 tay lơ-tơ-mơ như mình. Trải qua cả 1 quá trình dài với khá nhiều công đoạn: gửi CV ITnè, nghiên cứu để trả lời các câu hỏi chuyên ngành, dĩ nhiên nó làm mình ám ảnh trong suốt 1 thời gian, và phần tệ hơn: các bạn sẽ trải qua nó hết lần này đến lần khác. Và để nhận được lời đề nghị cho bản thân như bây giờ, các bạn chắc cũng không ngờ là mình đã phải rải đơn tới hàng trăm công ty, nước chảy đá mòn, giờ thì mình đã quá quen thuộc với những khó khăn này rồi.
Đừng quá lo lắng, mình đã làm được, vậy thì các bạn, các lập trình viên, cũng sẽ làm được, chỉ cần cứng rắn 1 tí và học đúng phương pháp thôi.
Giới thiệu khá dài dòng rồi, giờ mình sẽ đi vào phần chính, và dưới đây là bản ghi chép các bước hướng dẫn và những bước quan trọng qua kinh nghiệm để trở thành 1 kỹ sư phần mềm thực tập mà mình đã trải qua và đã thực hiện.
BƯỚC 1: ĐỂ TRỞ THÀNH KỸ SƯ PHẦN MỀM THỰC TẬP – HÃY HỌC CĂN BẢN !!!
Rõ ràng dù có là thiên tài và làm được nhiều thứ, thì cơ bản vẫn luôn quan trọng và nền móng cho các kiến thức chuyên sâu sau này.
Mình thường sử dụng 2 nguồn: freeCodeCamp và CodeCademy, theo mình thì đây là 2 nơi tốt nhất cho người mới bắt đầu, và chắc là ai cũng đều thấy vậy.
Cả 2 đều đưa ra các lý giải 1 cách đơn giản nhất và giúp mình có kiến thức cơ bản để có thể theo đuổi lĩnh vực này. Mình bắt đầu với freeCodeCamp, để học syntax về ngôn ngữ lập trình và nó đã giúp mình chọn lựa ngôn ngữ phù hợp cho bản thân.
Chú ý nào: Bạn nên xác định vai trò của mình là gì để dành thời gian nghiên cứu để nộp đơn ứng tuyển. Nó khá là quan trọng, giúp bản thân tiết kiệm được nhiều thời gian và công sức, không bị lan man trước cả rừng kiến thức. Ví dụ: nếu bạn đang hướng đến 1 vé thực tập để trở thành lập trình viên front-end, thì freeCodeCamp luôn có sẵn các khóa học về phát triển web. Đặc biệt là nó khá hữu ích và cụ thể, vì đa phần nó chỉ xoay quanh phần front-end !
Mình luôn cảm thấy bị cuốn hút khi làm việc trên mảng front-end và theo mình nghĩ để trở thành 1 nhà phát triển front-end thì nên thu nạp các kiến thức chuyên sâu khá là quan trọng về Javascript, HTML và CSS.
Khi bắt đầu, mình dành hẳn 1 tuần đầu tiên bằng việc tự học và danh tất cả thời gian cho khóa “Giới thiệu về Javascript”. Dù chỉ mới là 1 tay mơ lúc đó, mình hoàn toàn thấy nó khá thân thiện và dễ hiểu, và hoàn toàn có thể phù hợp với những ai mới tập tành. Mình khá là nghiêm túc, nên để việc học trở nên hiệu quả hơn, mình thường ghi chú lại những gì đã học được và cả những thứ còn thắc mắc, sau đó dành thời gian ôn lại chúng. Việc này làm đầu óc mình khá thoải mái và giúp mình không quên những gì đã học được.
HTML và CSS có liên hệ mật thiết và học khá dễ. Sau đó mình tiếp tục khóa “Hoàn thành thiết kế website” trên freeCodeCamp, mà mình nghĩ rằng đây chính là 1 trong những tài nguyên miễn phí tuyệt cú mèo nhất mà mình đã có. Trải qua suốt khóa học, bên cạnh các căn bản cho việc phát triển web, mình còn thu nạp nhiều kiến thức hơn nữa.
Và khi cảm thấy phần căn bản của mình đã vững, mình tiếp tục nghiên cứu “Sổ tay Front-end của anh Lập trình viên”. Nó cung cấp cho mình 1 danh sách khá đầy đủ về mọi nguồn tài nguyên cho người học nâng cao, trả phí lẫn miễn phí. Chắc phải mất hàng ngàn giờ để đọc và nó dạy mình mọi thủ thuật mà 1 nhà bậc thầy phát triển web nên biết.
BƯỚC 2: LẬP NÊN CÁC DỰ ÁN
Sau 1 vài tuần, mình đã sẵn sàng để tạo ra 1 dự án nhỏ. Theo mình, các dự án này khá quan trọng và sẽ giúp ích cho hồ sơ của mình, nhất là khi mình không có quá nhiều kinh nghiệm.
Và mình lại tiếp tục và freeCodeCamp vì nó cho mình nhiều ý tưởng tốt cho dự án, và mình cũng muốn bắt đầu từng bước nhỏ trước.
Cũng có lúc bí ý tưởng, mình đã thử hỏi a Google: “100 ý tưởng dự án trong ngôn ngữ X” và thủ thuật này khá ổn với mình. Mình còn xem các phản hồi trên Github và học hỏi các code của họ nữa.
Khi đã hoàn tất, mình sẽ kiểm tra nó và đưa mã nguồn lên Github. Mình nghĩ việc này khá quan trọng và còn là cách duy nhất để các công ty có thể xác nhận các kĩ năng của 1 tay chưa có kinh nghiệm như mình. Để chắc chắn, mình đã đưa các code có chất lượng tốt kèm tài liệu tham khảo.
Khi nhận được lời đề nghị, mình đã làm được 4 – 5 dự án rồi. Bắt đầu từ ứng dụng web trò chơi typing mini cùng với 1 sinh viên khác, Github và mình đã học được rất nhiều từ các đoạn code của họ, và sau đó mình tự thêm vào.
Dần dần, mình tiếp tục với các dự án phức tạp hơn. Có lẽ nên bật mí 1 chút về danh sách các dự án mình đã làm trước khi được nhận làm thực tập sinh, mình còn kèm theo mô tả và các stack đã dùng:
Các game mini đa dạng như Minesweeper, mình làm tất cả với React và tạo kiểu với CSS.
Bản đồ trực quan hóa với hơn nửa triệu điểm dữ liệu giao thông được mình tạo ra bằng Javascript và mapbox.
Ứng dụng làm việc React Native để người dùng đăng những tấm ảnh đẹp nhất của họ, với back-end thực hiện bằng Node.js và Mongoose, lưu trữ trên Heroku. (Heroku là gì?Heroku là nền tảng đám mây cho phép các lập trình viên xây dựng, triển khai, quản lý và mở rộng ứng dụng)
BƯỚC 3: XIN VIỆC
Như đã kể ở trên, về khoản xin việc thì kinh nghiệm mình có thừa. 1 vài mẹo của mình về tìm việc và về phỏng vấn được đút kết lại như vầy:
Linkedln, Glassdoor và Indeed Easy Apply rõ ràng không phải là bạn của mình, theo mình những loại bài này các nhà tuyển dụng đã có quá nhiều. Thường họ sẽ dùng 1 ATS (Application Tracking System) để lọc hết các sơ yếu lí lịch. Và rõ ràng là mình dễ dàng bị loại ngay vòng gửi xe vì thiếu kinh nghiệm hay vì các dự án không đủ ấn tượng (mình chỉ ví dụ thôi nhé)
Đơn xin việc là 1 con dao 2 lưỡi. Vì chỉ khi làm đúng, thì mình mới có cơ may khác biệt so với ứng cử viên còn lại, tuy nhiên khi làm sai, nó có thể làm cho tình huống của mình tồi tệ hơn. Nên là mình liên tục điều chỉnh, điều chỉnh, điều chỉnh cho từng đơn cụ thể phù hợp với công ty mà mình nộp vào. Mình nghĩ tốt nhất là không nên dùng chung 1 đơn và rải đến mọi nơi vì rõ ràng các nhà tuyển dụng chắc chắn sẽ biết mình đã gởi hơn 100 cái rồi. Lưu ý nhỏ là các đơn mà mình vô tình đánh sai chính tả, dù nhỏ, cũng đủ làm nó bị loại.
Mình đã thành công nhất khi đăng ký trực tiếp trên trang web của công ty hoặc thông qua các nhà tuyển dụng gửi cold email. Mình còn thử gửi cho các CEO nữa, đương nhiên là đối với các công ty quy mô nhỏ). Nếu công ty mà mình đang nhắm đến không công khai email, mình thường có thể đoán vì hầu như lúc nào nó cũng có form: hello @ têncôngty chấm com. Và rõ là nó giúp mình có NHIỀU cơ hội để họ xem hồ sơ của mình hơn là thông qua Indeed/Glassdoor. Mình dùng 1 template chung và thay đổi linh động cho từng công ty kahsc nhau.
Mặt mình bây giờ chắc còn dày hơn cả da trâu.. Các công ty thường từ chối với mọi lý do ngẫu nhiên và các nhà tuyển dụng còn cắt đứt mọi liên lạc với mình nữa. Có lẽ với hồ sơ ít hấp dẫn, mình sẽ khó có cơ hội để nhận phỏng vấn. Nhưng không sao cả mình vẫn tiếp tục nộp và không bỏ cuộc và mình đã được đền đáp xứng đáng.
Cuối cùng thì mình cũng nhận được cuộc gọi phỏng vấn, và chắc chắn mình đã chuẩn bị kĩ lưỡng cho nó. Để an tâm, mình đã tìm hiểu khá nhiều nguồn trên mạng chỉ để đối đầu cho buổi phỏng vấn kỹ thuật, và ‘Phỏng vấn Cracking the Coding’ là 1 trong những cái mà mình rất kết.
Buổi phỏng vấn kỹ thuật khá căng thẳng, mình phải nghiền nát các câu hỏi thuật toán, nếu không mình sẽ khó mà giải quyết được chúng. Nhưng không sao vì nhờ Leetcode mình đã tham khảo được 1 đống câu hỏi và đã luyện tập với nó.
Tuy nhiên, những câu hỏi phổ biến vốn đầy rẫy trên mạng mình ít khi gặp phải, các nhà phỏng vấn thường dự trữ cả tá câu hỏi ngẫu nhiên mà không hề đăng chúng trên mạng. Đừng lo vì các ý cơ bản vẫn giữ tương tự và cách mình vượt qua là biết rõ các cấu trúc dữ liệu của bản thân và Big O 1 cách kỹ lưỡng.
Có vài thứ mình lưu ý nữa là với các công ty đã phỏng vấn thường hỏi các câu hỏi kỹ thuật cho các dự án của mình và cách thực hiện chúng. Có lẽ như họ muốn kiểm tra rằng mình không hề xạo hay mượn chúng từ đâu đó.
Đối với bất kỳ ai cũng sẽ có những buổi phỏng vấn tệ hại trong các lần đầu tiên, mình cũng là 1 trong số đó, thậm chí mình còn rối tung và nhắc lại khá là xấu hổ.
Mình nhận ra mình đã không chuẩn bị kĩ cho các câu hỏi kỹ thuật, nên để trao dồi mình bắt đầu làm Leetcode 2 – 3 tiếng mỗi ngày. Thứ quan trọng nhất là không nên dành quá nhiều thời gian cho 1 vấn đề lẻ tẻ, và chắc chắn mình cũng sẽ không có thời gian vô hạn cho buổi phỏng vấn. Cách mình vượt qua chính là đặt hẹn giờ trong lúc luyện tập và dành khoản 10 phút cho các câu dễ và 20 phút cho các câu trung bình (hiếm khi đi phỏng vấn mà mình gặp các câu hỏi Leetcode khó trong các buổi ứng tuyển vị trí nhập môn hay thực tập)
Mình còn thấy rằng cũng sẽ ổn thôi nếu lỡ mình không kịp giải nó kịp thời hạn. Cách mình làm là nhìn vào giải pháp và cố hiểu được nó, mình còn đánh dấu lại các câu mình không có đáp án và thử lại chúng trong vòng 1 tuần.
Khả năng giao tiếp cũng là thứ mà họ, các nhà phỏng vấn, sẽ kiểm tra. Vì thế mình đã chuẩn bị băng cách nói to và rõ ràng trong lúc luyện tập ở nhà. Theo kinh nghiệm của mình, nó thực sự có ích và tạo ra sự khác biệt khá lớn.
Các nguồn tài nguyên để mình tìm công việc nhập môn và thực tập bên cạnh các nơi đã phổ biến như Glassdoor, Indeer và Linkedin chính là Breakout List và AngelList.
Theo mình, thật không đơn giản để tìm ra danh sách đầy đủ các công ty đang tuyển thực tập, nhưng mình đã làm được nhờ vào cộng đồng của freeCodeCamp. Mình được giúp đỡ khá nhiều trong công việc cũng như kinh nghiệm nhờ vào nó và bản thân mình cũng muốn được đóng góp lại.
Đây là 1 ứng dụng mình đang phát triển như 1 dự án phụ sau kỳ thực tập và nhiệm vụ của nó là biên soạn 1 danh sách công ty và các vị trí thực tập/ nhập môn được lọc bởi địa điểm, tags, điều khoản, vân.. vân.. và mình sẽ giải thích thêm về nó sau.
KẾT LUẬN
Tìm 1 công việc nhập môn hay thực tập là 1 quá trình khá dài, khó chịu và đầy tẻ nhạt. Nhưng mình đã học được rất nhiều kinh nghiệm và từ đó mà mình đã tìm được nơi làm việc thích hợp. Cuối cùng mình nghĩ rằng cũng nhờ nó mà mình đã được đền đáp thích đáng và trở thành 1 kỹ sư phần mềm thực tập.
‘Dự án của mình được dùng để giúp các sinh viên, tân binh và những người tự học tìm thực tập và công việc’
‘Dự án đầu tiên mình tự làm. Minesweeper + hẹn giờ’
Khá là khác biệt, phải không nào?
Đây là lý do tại sao mình cảm thấy kỳ thực tập hoàn toàn xứng đáng. Vì nếu không có nó, mình đã khó có thể hoàn thành dự án gần đây. Dự án của mình là nền tảng và bảng công việc để các sinh viên, các nhà phát triển tự học và học sinh mới khám phá các vị trí thực tập/ nhập môn.
Mình đã cố cải thiện và chào đón bất kỳ phản hồi nào và còn muốn viết tiếp chủ đề như từng bước hướng dẫn về cách mình đã thiết kế và cấu tạo ứng dụng này. Nếu bạn cảm thấy hứng thú đừng ngần ngại cho mình biết nhé. Đối với những bạn mới bắt đầu cũng như hiểu rõ các khó khăn, mình rất vui lòng giúp đỡ. Nếu có câu hỏi nào, đừng do dự và hãy gửi cho mình 1 tin nhắn.
Một trở ngại lớn tôi thường tạo cho bản thân là không xem lại các kế hoạch sau khi lên được chúng. Tôi thường dễ chán nản khi phải quay lại làm một thứ nhàm chán nhiều lần. Nhưng nó cũng ám chỉ rằng “Tôi có thể sẽ không làm theo đầy đủ những cam kết của bản thân”, và nó khá là đúng với đa số các trường hợp và việc này thật sự nguy hiểm. Một trong những ưu tiên hàng đầu cho năm 2020 sẽ là thận trọng hơn trong những gì tôi đang làm hoặc không làm. Tại sao không bắt đầu trước khi năm cũ kết thúc?
Trong bài viết trước trong seri này, tôi nêu ra vài hành động cho bản thân mình. Khi tôi xem xét lại chúng, ngay lập tức tôi nhận ra vài điều:
Quá nhiều tiêu đề cùng 1 lúc = thiếu tập trung
Tôi đã không theo sát mọi thứ (có thể xem 1 phần hậu quả của điền #1)
Một vài thứ khá là mờ nhạt. Thông thường tôi sẽ đổ lỗi cho điều này để khiến tôi thêm thời gian chần chừ, trừ khi tôi cho đó là một cái gì đó thú vị thôi!\
Hãy cùng xem tôi đã tiến hành được đến đâu và xem xét lại những chỗ cần thiết.
Mục cuối có vẻ là mục thú vị nhất: Tôi biết cách nó vận hành như thế nào và học những thứ này có thể cần thiết cho vài công việc cụ thể nhưng vào lúc này trong hành trình thì nó chỉ làm tôi mất ngủ. Tôi xem nó như là 1 lựa chọn vào lúc này và nó không phải là ưu tiên hàng đầu của mình. Thôi tạm biệt, React & Material! Tôi sẽ tiếp tục với Bulma và than phiền về JavaScript thêm 1 thời gian nữa..
Ngoài ra, những điều trên cũng là bài giảng cần thiết cho Nanodegree của tôi và là nền móng cho tương lai tôi đang hướng đến. Tôi sẽ chia sẻ thêm những khó khăn tôi trải qua để đạt được Nanodegree trong một bài viết khác, nhưng về tổng thể thì nó vẫn đang đúng hướng. Thời gian thì khá là hạn hẹp nhưng cái chính lúc này là sắp xếp ưu tiên rõ ràng. Và tôi thực sự muốn trả cho tháng thứ 4, phải, có cả lợi nhuận trong đó nữa.
Bằng cách nào – “How”
Học Nanodegree qua Udacity
Các project riêng, vd website hiện tại của tôi
Code Camp miễn phí
Nanodegree khá là dễ hiểu rồi, chúng ta không cần nói nhiều thêm về nó nữa. Còn lại thì vẫn rất mơ hồ và tôi vẫn chưa định thần lại tâm trí về việc phải làm gì với website của tôi. Nó dựa trên nền tảng Django & không phải Flask và hiện tại tôi chưa có nhiều cảm hứng để đặt vào đó cái gì đó có ý nghĩa lắm. Thứ tôi vẫn muốn làm đó là add thêm Google Analytics, nhưng lần nữa, phần này là tuỳ chọn và thường không được chọn để web gọn gàng.
Free Code Camp giúp tôi duy trì cuộc chiến với Javascript. Cụm từ “kiến thức cơ bản” là một hành trình dài dăng dẳng và tôi đã cố gắng né tránh nó bằng mọi lí do lí trấu. Tuy nhiên, tôi đã nhận thức về tầm quan trọng và thấy được những lợi ích đáng kể khi nắm được nó, cũng là nguyên do tôi quyết định hoàn thành 3 bài học mỗi ngày trên Free Code Camp.
Tôi đã và đang làm nó như thế nào
Đây là lúc nhìn lại và những tuần vừa qua được khá là hỗn độn, về nghĩa tiến bộ. Tôi đã đánh giá quá thấp sự chặt chẽ của Nanodegree và trong trường hợp của tôi, sự tập trung là một điểm thiếu sót lớn. Tuy nhiên, tôi sẽ không thể đắm chìm quá lâu vì tôi biết đây cũng chỉ là 1 phần của nó – phần còn lại phụ thuộc vào tôi. Cụ thể hơn: tôi sắp kết thúc phần đầu của Nanodegree và chỉ chậm nhịp 1 chút so với kế hoạch.
Lập kế hoạch trước
Hai tuần vừa qua đã trở nên khá khả quan, nói về khoản tập trung & tiến độ và tôi muốn vực lại phong độ như thế đến sau cả dịp nghỉ Giáng Sinh. Vì phần đầu tương đối dài (và không thú vị cho lắm – database…), tôi tin rằng vấn đề nằm ở lên kế hoạch cho nó. Sự thật là tôi đã bỏ thói quen viết JS sau vài ngày, khá đáng buồn nhưng tôi chỉ cần đơn giản nhặt nó lại thôi!
Học Machine Learning
Gồm những cái gì – “What”
Khía cạnh research (Computer vision và NLP)
Keras & Tensorflow
Triển khai Cloud
Dù cho phần “what” này còn khá chung chung, tôi đã hiểu rõ tôi cần làm gì với mỗi thứ. Thứ duy nhất có vẻ không phù hợp trong nhóm này đó là triển khai Cloud và, mặc dù khá là quan trọng, quan trọng nhất vẫn là việc xem trọng mọi việc như nhau.
Tensorflow là trường hợp khác khá quan trọng nhưng không phải bây giờ. Trong khi nó là nền tảng cho Keras, 1 người có thể đi rất xa tới đích trước khi đi 1 lớp sâu hơn. Tôi thích so sánh 2 thứ đó như Python và C: Bạn có thể dành cả đời làm việc với Python và làm mọi thứ xong xuôi mà không cần phải lo lắng về cách nó thực hiện ra sao. Sự so sánh này không hoàn hảo cho lắm nhưng ít ra nó cũng chứng minh cho quan điểm của mình.
Bằng cách nào – “How”
Thực tập không lương tại colabel
Đọc 1 trang research mỗi ngày
Kaggle
… và cái hay là dạo này tôi không cần phải viết quá nhiều code cho machine learning nữa! Kaggle vui đấy nhưng bạn chỉ có thể ngồi xuống khoảng 20 phút và không trông đợi điều kì diệu xảy ra. Như thế cũng tốt thôi: tôi đã hiểu được phần lớn câu chuyện rồi – chắc chắn là nhiều hơn về phát triển web – điều ngạc nhiên tới tự nhiên thông qua việc giải quyết vấn đề hay 1 cuộc thi, điều mà tôi không có thời gian để làm.
Liên quan tới sách vở, tôi đã đọc được khoản 12 trong 20 sách đã định. Theo lịch làm việc của tôi suốt những tuần vừa qua vẫn làm tôi khá hài lòng dù tôi đã bỏ lỡ cái dự định đầy tham vọng.
Lên kế hoạch trước
Về khoản machine learning, và cụ thể là về deep learning, nó thật sự rất khó – tôi nhận ra điều này mỗi khi tôi đụng đến 1 trong 2 thứ đó. Khi so với lập trình web, thuật toán đóng vai trò thiết yếu và các ý tưởng có thể khá là trừu tượng. Ngoài ra, mục tiêu của tôi là để thấu hiểu “bleeding edge of research”, đơn giản nghĩa là tôi cần phải đối đầu với những “bộ óc” siêu khủng tại Facebook, Google và những nơi “ông lớn” công nghệ tương tự. Và tôi cam đoan rằng những gã này chỉ như đang làm bài tập về nhà.
Về phần sách vở, tôi tiếp tục theo đuổi kế hoạch ban đầu. Tôi có thể nói rằng đọc sách ít làm tôi căng não bây giờ hơn là nó từng làm cách đây 6 tuần về trước và tôi mong đợi kiến thức tổng hợp như mọi khi. 1 điều tôi muốn trải nghiệm là luân phiên đọc sách và đọc code. Xem được 1 đoạn code tốt thực sự có tác dụng đòn bẩy trên từng vùng (kỹ thuật phần mềm) và trong hầu hết trường hợp nó còn thực tế hơn là chỉ trên sách vở.
Về Keras, tôi không chắc có hợp lí không khi thêm nó vào trong quá trình làm việc với Nanodegree. Có vẻ là không. Chỉ nhắc tới cho vui thôi, nhưng những khoảnh khắc đó cũng khá là hiếm mà.
Có 2 cách tôi có thể duy trì mọi thứ, Pomodoro và tự tránh xa xã hội: Pomodoro là 1 kĩ thuật phổ biến cho việc quản lý thời gian và cũng là bài viết thường xuyên về chống chọi với trì hoãn. Tôi tìm ra rằng nó khá là hữu dụng cho cả 2, và cũng là 1 cách để não tôi khỏi quá sức: tôi không có vấn đề gì với việc đọc sách khoa học tận 45 tới 60 phút dài. Tuy nhiên, căng thẳng đầu óc trong thời gian dài để lại hậu quả phải phục hồi lâu hơn – thời gian mà thường phải dành cho thư giãn đầu óc trong trường hợp của mình. Pomodoro khá hợp với tôi, nhưng chỉ nếu tôi bỏ công nghệ tầm 20-25 phút 1 lúc thôi.
Nhốt mình vào trong phòng hoạt động khá ổn chỉ khi đi tàu và máy bay, nơi kết nối internet tệ hại hay không tồn tại. Tôi thường chọn 1 thứ để làm cho xong trong chuyến đị và thấy rằng nó cũng khá dễ dàng để tập trung trong vài tiếng đồng hồ. Cho 1 vài lí do kì lạ, nó vẫn chưa có tác dụng khi tôi ở nhà…
Kết luận
Cũng như bạn đã thấy, tôi chỉ mới dừng hoạt động và có vài lí do: việc thêm vào 1 danh sách thì rất dễ ai cũng làm được. Nhiều người đã làm thay bạn rồi, cho dù là ngụ ý hay muốn nói với bạn như vậy. Và bởi vì chúng ta được huấn luyện để tuân theo thẩm quyền khi nhắc đến chuyện học, lùi bước cũng là 1 lỗi lầm tệ hại và dẫn tới thất bại. Tập trung vào thứ quan trọng mới là kỹ năng cần phải có được.
Mọi thứ mà tôi đã ghi rõ chính là những kỹ năng thích hợp, và thích hợp cho 1 vài người. Nhưng nó không có nghĩa rằng tôi (hay bạn) phải ưu tiên nó. Nó có thể ngăn tôi thoát ra khỏi cuộc tranh luận đầu tiên với các nhà tuyển dụng tài năng. Nhưng tôi thà chọn phải làm vậy hơn là lạc lối trong kiến thức đã học. Không gian đó như là bất tận…
Bonus: Social Media – Các kênh mạng xã hội
Trong quá khứ, tôi dễ bị phân tâm bởi rất nhiều nội dung không liên quan trên mạng xã hội. Cụ thể là Facebook, Linkedin và Youtube đều nằm trong top list của tôi. Không cần phải giải bày vấn đề là gì, và bằng cách nào đó tôi cắt giảm hầu hết những platform này vì mục tiêu tốt hơn và chỉ sử dụng có chủ đích.
Hiểu rõ tính gây nghiện của những thứ này, càng làm tôi tránh xa Twitter.
Đó là chưa đến 1 vài tuần trước khi tôi đăng nhập lại vào tài khoản đóng đầy bụi và vô tình khám phá lệnh ‘Tìm kiếm’. Và thành ra, những người dùng vi tính dường như thích bàn luận về những thứ thú vị trên mạng, với cả thế giới dõi theo!
Trong trường hợp bạn vẫn chưa dùng Twitter, tôi rất khuyến khích bạn nên lướt qua 1 chút, tôi đảm bảo sẽ có nhiều nội dung làm bạn thích thú.
Cách học để trở thành fullstack developer từ một lập trình viên lâu năm – Đây là giai đoạn thứ 2 trong hành trình trở thành Full-stacker của tôi. Những bước đầu đã được nêu ở đây. Tôi cần hình dung ra làm cách nào để làm nên các bảng đánh dấu này…
“Tôi không có được những kỹ năng lập trình. Sự thiếu sót đó sẽ làm cho thằng này lây lất trên những con phố, gia đình và bạn bè sẽ bỏ rơi tôi và bị đào thải ra khỏi xã hội. Sau tất cả, tôi lại cô độc và chẳng còn ai đoái hoài gì tới. Và điều tồi tệ nhất: Mọi người rồi sẽ biết và bị cười vào mặt!” Nghe quen chứ ? Thôi hãy cùng nhau đối diện với nó nào!
Mong Muốn vs. Quyết Định
Có sự khác biệt giữa Muốn và Quyết. Muốn là 1 con đường dài trải đầy hoa hồng. Muốn dễ dàng bị kích thích chỉ qua 1 cái chạm nhẹ dịu dàng, khi mà tương lai còn mơ hồ, chìm đắm trong viễn tưởng người đẹp và danh vọng, chỉ làm mà chẳng cần phải suy nghĩ. Nói luôn cho vuông: Chẳng có gì xấu về Muốn cả, nhưng trừ khi là bạn đang cược liều lĩnh trên vận may, bạn nên tiến thêm một bước xa hơn.
Còn Quyết thì lại là 1 con thú hoàn toàn khác, và có thể thực sự bẩn tính: Chúng bắt bạn phải ngồi xuống, lập hẳn kế hoạch và, rõ ràng là phần tệ nhất, làm những thứ cần phải làm. Cho dù đó là học thêm kỹ năng mới hay đảm bảo rằng những người khác đang làm việc của họ để được trả lương, rất có thể là bạn phải làm điều gì đó cho bản thân.
Chướng ngại vật
Đã lâu, tôi xem lập trình như 1 thú vui mà hiển nhiên cho phép tôi có 1 đoạn hội thoại đầy ý nghĩa với các nhà lập trình phần mềm chuyên nghiệp. Cũng không mất quá nhiều thời gian để hiểu ra rằng tôi thực sự tận hưởng nhiều khía cạnh xung quanh việc coding: tư duy phát triển, ta nghĩ về việc gây dựng nên cái gì đó hữu dụng và qua đó làm cho cuộc sống con người dễ dàng hơn, thúc dục tôi học hỏi qua nhiều hiệu ứng trộn lẫn và thay đổi font IDE của tôi thành Source Code Pro (hầu như là vì nó có chữ Pro trong đó). Hơn thế nữa, mạng Internet cam đoan là hoàn toàn có thể trở thành 1 developer tốt ngay cả khi tôi chưa hoàn thành giáo trình “thần đồng máy tính”.
Và rồi, có thứ gì đó cản tôi lại. Sự thật là tôi vẫn suy nghĩ và đọc về xây dựng phần mềm giá trị nhiều hơn là làm ra nó. Nói cách khác, tôi vẫn còn ở xứ thần tiên và chưa sẵn sàng để tạo nên cú bật. Nó làm tôi mất hơn 2 năm chỉ để từ vết ngứa ngáy đó ban đầu cho tới bài viết trước đó của tôi hay làm những hành động tương ứng. Nghe có vẻ ngắn cho vài người nhưng trên mốc thời gian của riêng mình thì nó như là bất tận vậy.
Bản Draft đầu tiên của tôi khá là kỹ lưỡng về các chi tiết nhưng tôi tin rằng mỗi chúng ta đều có riêng nhiều thứ để sợ hãi. Nếu tôi tóm tắt chuyện riêng mình, hầu hết chúng đã và đang liên quan tới chuyện tôi hoài nghi về khả năng của mình, chi phí tài chính/ cơ hội và liệu tôi có nên tìm mục đích khi làm việc đó vui vẻ thêm vài năm nữa.
Vài lúc tôi nhận ra rằng sẽ không có ai khác trả lời những câu hỏi này và việc xác định mục tiêu là của riêng mình và tiến bước. Mục đích trước đó của tôi giờ nó dính khá nhiều “bụi” và tôi còn nhớ nó có tên là “Học machine learning”. Không quá lời nhưng tôi cảm thấy mình có thể cất nó vào trong xó được rồi.
Suốt tầm 1 tuần tôi ngồi xuống vài lần và xác định mục tiêu của mình, làm cách nào để tôi đạt được nó và vượt qua các chướng ngại. Nó quả là 1 bài tập khó khăn vì tôi phải thành thật với chính bản thân và phải bỏ qua khá nhiều thứ mà tôi muốn biết, như cái framework front end sang chảnh hay mỗi cái thư viện machine learning. Bên cạnh đó, nó có nghĩa là tôi phải cho đi bớt vài mục tiêu rõ ràng và tiềm ẩn của mình, ngoài ra còn phải giải thích hướng đi mới này cho bạn bè và gia đình.
Trong lúc làm chuyện đó, tôi nhận ra rằng mình không nhất thiết phải trở thành 1 con người khác. Không cần trong khái niệm như phải cư xử như một người hoàn toàn khác nhưng mà là 1 phiên bản khác của bản thân. Loại người mà có những thói quen nhất định mà tôi chưa có (cho tới hiện tại thôi). Lộ trình quản lý sắp xếp công việc cũng cho tôi vài kỹ năng có giá trị nhưng có một điều chắc chắn là tư duy học vượt (binge-learning) không còn hữu ích nữa.
Bạn không thể đánh trúng 1 mục tiêu mà bạn không nhìn thấy
Chỉ sau này tôi mới nhận ra 1 quyết định có thể thúc đẩy tôi nhiều thế nào. Hầu hết ai cũng sẽ né tránh việc quá cụ thể, và tôi cũng vậy. Tôi nghĩ rằng nó xuất phát từ một cái gì đó sâu xa hơn nhiều. Bằng việc không cam kết hoặc ràng buộc bản thân sẽ cho bạn được ít nhiều sự thoải mái, cho dù là ngắn ngủi. Nhưng thế giới xung quanh chúng ta vẫn cứ xoay đều và chậm rãi và chắc chắn là cuộc sống vẫn tiếp diễn, dẫn đầu bởi những người tự sở hữu và có trách nhiệm cho chính số phận của họ. Và tôi muốn trở thành 1 trong số đó.
Có khi nào tôi miễn nhiễm với sợ hãi không? Chắc chắn là không. Phép ẩn dụ tốt nhất mà tôi có được ví von như là: Nó ám tôi như một cái đĩa than dính lấm tấm bụi và khi kim máy hát cứ tiếp tục quay trên cùng 1 làn đường trên mặt đĩa, lặp đi lặp lại hết lần này tới lần khác. Tôi từng nghĩ rằng cái vòng lẩn quẩn đáng sợ này sẽ làm bản thân bị hạn chế cũng như ngăn tôi tiếp cận được những ý tưởng mới thực sự sẽ gây hại cho tôi bằng cách này hay cách khác. Nhưng hi vọng vẫn còn đó và mục tiêu là thứ gì đó rất khác: Giữ tôi ở đúng tốc độ ổn định của mình. Thứ còn quan trọng hơn việc hạ gục nỗi sợ là để thấu hiểu cảm giác đó từ đâu đến rồi học hỏi và lên kế hoạch để chống lại nó.
Tất cả tuỳ thuộc vào bạn!
Tôi bắt đầu viết bài này vì tin rằng nhiều người đang bị nỗi sợ giữ lại phía sau, không còn quan trọng nó là thứ gì cụ thể đi nữa. Nói thì nói thế thôi, đừng xem đây như là 1 kế hoạch, ngồi xuống và tự quyết định với chính mình! Những “cục nhọt” mà tôi đang mô tả là chủ quan và chỉ có tác dụng với tôi thôi. Mình khuyến khích các bạn cho phép bản thân sự xa hoa của việc viết ra những nguyện vọng, thậm chí có thể là công khai như tôi đã làm. Có thể nhiều người sẽ nghĩ bạn thật là ngốc nghếch, nhưng mà liệu họ có đủ quan trọng để bạn quan tâm không?
Ghi chú: Có khá nhiều sách tuyệt vời về chủ đề xây dựng thói quen (riêng tôi rất thích Atomic Habits và 4DX), cho nên tôi cũng không muốn quá dong dài nữa. Nếu bạn đang ở giai đoạn sơ khai và gặp khó khăn để bắt đầu, có 1 quyển khác mà tôi xin được giới thiệu ‘The war of Art’ bởi Steven Pressfield.
Bonus 1: Những nỗi sợ hàng đầu của tôi
Thứ tự giảm dần
Sợ những nỗi sợ chưa từng gặp
Tôi không đủ thông minh/ nhanh nhạy
Vài lúc tôi sẽ không nắm bắt điều gì (hàm đệ quy là 1 ứng cử viên đáng nói..)
Tôi sẽ không còn hạnh phúc như hiện tại nữa
Tôi sẽ bị từ chối
Tôi sẽ không thể kiếm (đủ) tiền với nó nữa
Những người khác đã làm những điều này từ năm 12 tuổi rồi
Các giải pháp của tôi sẽ thua kém những người khác
Và tất cả có vẻ buồn cười khi tôi viết ra chúng thế này và tôi còn có hẳn những khái niệm mạnh mẽ về việc chống lại từng nỗi sợ mà tôi đã tạo ra. Nhưng bất kể là gì đi nữa thì đó là những thứ quỷ quái đã ngăn tôi làm được nhiều thứ to tác hơn. Nỗi sợ của bạn là gì?
Bonus 2: Không phải lúc nào những điều này cũng đúng nhưng khi đọc lại bản nháp cuối của mình, tôi cảm thấy như 2 năm ròng rã lăn lộn chỉ dồn vào đúng vài đoạn code, thật khó mà chấp nhận được. Để bổ sung cho những quyển mà tôi đã nhắc đến, có 1 vài câu hỏi mà tôi cảm thấy khá là hữu ích trong lúc chiến đấu với bọn quái mang tên ‘sợ hãi’ mà tôi đã miêu tả như ở trên.
Đọc
Bạn có đọc sách không?
Bạn hay đọc thể loại gì?
Bạn lựa sách dựa trên tiêu chí nào? Bạn tìm thấy chúng hay chúng đã tìm thấy bạn?
Những vấn đề nào làm bạn nghĩ ‘thà không tranh luận thì hơn’ với bạn bè hoặc người thân?
Những người bên cạnh bạn
Những con người trong cuộc đời bạn
Ai là người giỏi nhất về ….?
Bạn có bao giờ hỏi người đó thêm về x chưa? Tại sao chưa?
Mạng Internet
Bạn sử dụng Social Media như thế nào? Bạn tiếp nhận bao nhiêu & cho đi bao nhiêu?
Lần cuối cùng bạn cảm ơn ai đó khi gặp được 1 nguồn framework, hướng dẫn hay Tweet hay là khi nào?
Tại sao bây giờ bạn lại đọc chủ đề này?
Mục tiêu
Hai hay ba mục tiêu nào quan trọng nhất trong cuộc đời mà bạn sẽ không cam kết theo đuổi?
Liệu bạn có thể đo được hay đánh giá khách quan những mục tiêu nào quan trọng nhất?
Nếu lỡ bạn đang ở dưới vực sâu ngay bây giờ: Bạn sẽ làm gì trong 10 phút tiếp theo để tiến gần hơn đến mục tiêu nào bạn có?
Trong suốt thời gian đi học, đi làm, trao đổi cùng nhiều anh em trên các cộng đồng lập trình trên thế giới. Trước đó mình học tiếng Anh theo cách khá sai lầm. Nên mình đã nghiên túc nghiên cứu và sưu tầm một “kho tài liệu” học tiếng Anh giao tiếp, để tiện trao đổi về những vấn đề mình gặp khi lập trình. Kèm theo đó là khi trao đổi với client không bị sót thông tin do qua một bạn thông dịch. Hôm nay mình sẽ share bộ bí kíp này, nhưng anh em nhớ đừng chỉ tải về rồi để đó. Nên tải từng cuốn rồi đọc cho thấy ít ít nha.
Như tiêu đề thì mục đích của cuốn sách này là phân tích ngữ pháp giúp anh em biết sử dụng các loại “thì” đúng trường hợp. Giúp cuộc hội thoại bớt “kì” hơn
Có thêm vốn từ thì không bao giờ là thừa nhỉ anh em?
Download tại đây
Hy vọng những tài liệu này sẽ giúp anh em cải thiện vốn tiếng Anh hơn. Ngoài ra, còn tài liệu hay ho nào mà mọi người sưu tầm được thì chia sẻ tại phần bình luận nhé.
Lập trình và cuộc sống – Tôi đã giảm 20kg trong 6 tháng qua. Mà không cần phải ăn kiêng hoặc nhịn đói. Tôi đã sử dụng các phương pháp cơ bản được hầu hết các lập trình viên biết đến để tối ưu hóa hành vi của tôi.
Dưới đây là một hướng dẫn ngắn để tối ưu hóa bản thân cho việc giảm cân.
Sức mạnh ý chí == Sức mạnh của CPU
Đây là một trong những giả thuyết của tôi: Bạn nên dành ít “sức mạnh ý chí” nhất có thể, khi đưa ra quyết định về việc sẽ ăn cái gì để giảm cân. Bạn càng sử dụng nhiều sức mạnh ý chí, bạn sẽ càng ít có khả năng thành công trong việc giảm cân.
Hãy tưởng tượng sức mạnh ý chí, giống như sức mạnh của CPU. Chúng là một nguồn tài nguyên hạn chế, nếu mỗi ngày bạn đều tiêu tốn rất nhiều sức mạnh ý chí để phấn đấu giảm cân, bạn sẽ thất bại tại một thời điểm hoặc không thể làm được vì bị quá tải. Và vì sức mạnh ý chí là một tài nguyên hạn chế. Nên nếu bạn dùng hết chúng để ép buộc cơ thể đi đến phòng tập gym, thì bạn sẽ không thể cố gắng trong những việc khác.
“Thuật toán ăn kiêng” phổ biến
“Thuật toán ăn kiêng” thường được sử dụng sẽ trông như này:
Map NhungThuToiKhongTheAn = ...
Int SMYC = ..
function boolean ToiCoTheAn(duong){
if(NhungThuToiKhongTheAn.contains(duong) and SMYC>0){
SMYC --
return False
}
return True
}
Điều này tương tự như những điều được đề cập đến trong các app chế độ giảm cân. Tuy nhiên sau khi trao đổi với một thằng bạn chuyên tập gym, thì tôi đã kết luận được thuật toán mới.
static final boolean _CoTheAnDuong = False
function boolean CoTheAnDuong(){
return _CoTheAnDuong
}
Ủa khoan… vậy còn sức mạnh ý chí (SMYC) đâu?
Nếu như bạn đã có biến vừa khai báo từ khóa final vừa khai báo từ khóa static thì nó được xem như là một hằng số, từ đó bạn sẽ không cần tới SMYC nữa. Đó là mục đích chính mà mình hướng tới. Nếu bạn không ăn thứ gì đó vì bạn ghét nó, bạn dị ứng với nó hoặc nó bị cấm kỵ trong tôn giáo của bạn, thì bạn không cần phải tiêu tốn sức mạnh ý chí (SMYC) trong việc cố gắng kiêng cữ nữa.
Đoạn “cheat” đó là
static final boolean CoTheAnDuong = False
static final boolean CoTheAnMiY = False
static final boolean CoTheAnCom = False
static final boolean CoTheAnTinhBot = False
Như vậy tôi không cần sức mạnh ý chí để duy trì thói quen ăn uống của mình. Tôi ăn những thứ tôi thích (thịt, cá, rau, pho mát) với hàm lượng đủ nhiều => không bao giờ đói. Như vậy tôi có thể dồn toàn lực vào công việc của mình.
Bằng cách này, tôi không bao giờ gặp phải hoàn cảnh:
Giải pháp tối thượng – Đi bộ brainstorm
Làm lập trình lúc nào chúng ta cũng phải nghiên cứu ra những giải pháp mới, hướng đi mới (vì bug luôn thông minh và nham hiểm hơn trước). Vì vậy cứ mỗi khi chúng ta brainstorm thì hãy đứng lên đi vài vòng, vừa giúp máu lưu thông lên não tốt hơn, minh mẫn hơn. Ra ngoài còn vận động đốt được một ít mỡ thừa (nhưng nên cầm điện thoại để có ý tưởng là ghi lại ngay. Chứ không, chạy về chỗ ngồi thì lại quên mất).
Sử dụng “sức mạnh ý chí” một cách thông minh. Mỗi suy nghĩ vừa khai báo từ khóa final vừa khai báo từ khóa static. Tuy nhiên vẫn cần dùng “sức mạnh ý chí” cho những thói quen cần tập như đi bộ brainstorm. Chúc các bạn thành công và mau giảm cân.
JavaScript thì “ngầu” thật đấy, nhưng làm sao để máy có thể hiểu được code bạn viết nghĩa là gì? Nếu là lập trình viên JavaScript, bạn sẽ không phải đích thân đi xử lý các compiler. Tuy nhiên, bạn vẫn cần phải biết những kiến thức căn bản về cơ chế vận hành của JavaScript, cũng như cách nó xử lý phần JS code bạn đã viết và “gửi gắm” nó sang ngôn ngữ mà máy móc có thể hiểu được.
Note: Bài viết này sẽ nói theo V8 engine và các trình duyệt dựa trên Chrome.
HTML parser sẽ gặp tag script cùng 1 source. Code từ source này sẽ được load hoặc từ network, cache, hoặc một service worker đã cài trước. Response trả về sẽ là một đoạn script dưới dạng 1 stream byte, phần này sẽ do byte stream decoder xử lý. Byte stream decoder sẽ decode chuỗi byte này ra khi nó được down về.
Byte stream decoder sẽ khởi tạo các mã token từ luồng byte đã được decode. Ví dụ, 0066 decode thành f, 0075 thành u, 006e thành n, 0063 thành c, 0074 thành t, 0069 thành i, 006f thành o, 006e thành n với khoảng trắng. Đây là keyword dành riêng cho JavaScript, mã token được tạo và gửi đến parser (và cả các pre-parser nữa, tôi không có gif để mô tả kỹ hơn nhưng tôi sẽ giải thích thêm bên dưới). Và đối với phần còn lại của byte stream cũng sẽ diễn ra tương tự.
Engine sử dụng 2 parser: pre-parser và parser. Pre-parser có nhiệm vụ kiểm tra lỗi cú pháp từ các mã token. Từ đó làm giảm thiểu được không ít thời gian trong việc tìm lỗi trong code, dù đương nhiên sẽ có trường hợp sau đó parser vẫn phát hiện thêm lỗi.
Trường hợp nếu không có lỗi, parser sẽ tạo ra các node được dựa trên mã token nó nhận được từ byte stream decoder. Với các node này, nó tạo ra Abstract Syntax Tree (AST).
Tiếp theo là đến công đoạn của interpreter (trình phiên dịch). Interpreter đi qua AST và tạo byte code dựa trên thông tin AST chứa. Sau khi hoàn thành công đoạn tạo byte code, AST sẽ bị xóa để giải phóng bộ nhớ. Cuối cùng chúng ta đã có “nguyên liệu” có thể làm việc máy.
Mặc dù byte code đã khá nhanh nhưng vẫn có thể tối ưu hóa tốc độ hơn nữa. Thông tin được tạo ra khi byte code hoạt động. Nó có thể phát hiện những hành vi nào thường diễn ra, và loại data được sử dụng. Có thể bạn thường lặp đi lặp lại một chức năng, thì đây cũng là lúc tối ưu hóa để đẩy nhanh tốc độ.
Byte code cùng với feedback type đã được tạo sẽ được gửi đến optimizing compiler (compiler tối ưu hoá). Optimizing compiler lấy byte code và type feedback để tạo nên machine code cực kỳ tối ưu hóa.
JavaScript là ngôn ngữ dạng dynamic typing, vì các loại data luôn thay đổi. Nếu JavaScript engine phải kiểm tra liên tục giá trị của mỗi loại data thì sẽ rất chậm.
Thay vào đó engine có thể sử dụng bộ nhớ đệm nội tuyến (inline caching), có chức năng lưu trữ code trong bộ nhớ và hy vọng trả về cùng một giá trị với cùng một behavior trong tương lai. Giả sử một hàm nhất định được sử dụng 100 lần và luôn trả về cùng một giá trị, thì lần thứ 101 sử dụng nó cũng sẽ trả đúng về giá trị này.
Ví dụ như có hàm chức năng sum như sau, luôn được gọi với giá trị numerical (số) dưới dạng đối số (argument) mỗi lần:
Kết quả sẽ trả về số 3! Lần tới, khi chúng ta nhập lại hàm này, nó sẽ giả định chúng ta lại nhập hai giá trị numerical.
Nếu đúng, thì nó sẽ yêu cầu thêm dynamic lookup, và chỉ có thể sử dụng kết quả được lưu trong bộ nhớ đã lưu trước đó. Nếu không phải, nó sẽ de-optimize (đảo ngược tối ưu hóa) code và trả lại về byte code ban đầu thay vì machine code đã được tối ưu hóa.
Ví dụ lần sau khi đã nhập, tôi sẽ truyền một string (chuỗi) thay vì một number (số). Vì JavaScript là dynamical type nên sẽ không xảy ra bất kỳ lỗi nào.
Điều này nghĩa là số 2 sẽ bị ép thành một chuỗi và thay vào đó hàm sẽ trả về chuỗi “12”. Nó sẽ quay lại xử lý byte code đã nhập và cập nhật thêm type feedback.
Tôi mong bài viết trên phần nào giúp ích được các bạn dù có nhiều phần tôi chưa đề cập (JS heap, call stack,..) Thế nhưng tôi nghĩ các bạn hoàn toàn có thể tự nghiên cứu nếu có hứng thú với JavaScript, với V8 là mã nguồn mở và hiện có khá nhiều tài liệu về cách hoạt động khá thú vị!
Phát triển phần mềm: Làm cách nào để chuyển từ nghiệp dư thành chuyên nghiệp?
Khép lại thập kỷ 2010, thế giới đã thay đổi đáng kể, từ chỗ việc sử dụng được máy tính là một kỹ năng cộng thêm thì bây giờ nó trở thành một kỹ năng phải có để làm được bất cứ việc gì. Chuyện viết được phần mềm máy tính, hiểu và viết được code để tự động hóa công việc của mình ở trong một chừng mực nào đó cũng đang tiến trên con đường như vậy. Từ chỗ nó là một kỹ năng cộng thêm, làm vì thích, thì bây giờ nó trở thành một kỹ năng rất nên có, công việc nào cũng cần. Mình nghĩ rằng nhiều bạn đọc các bài viết của mình là những người thích máy tính, và đang (hoặc có ý định) viết phần mềm. Nhiều người có thể ít nhất là viết code, làm web, làm tự động hóa cho một công ty hoặc dự án nào đó ở một chừng mực nào đó. Nếu như mong muốn của bạn là trở thành người viết phần mềm chuyên nghiệp, thì đây là bài viết dành cho bạn.
Trước tiên, mình nghĩ quan trọng là sự nhận thức rằng việc làm chuyên nghiệp khác với nghiệp dư, và làm phần mềm không nằm ngoài quy luật đó. Nói chúng khác nhau không phải là nói để tâng bốc, quan trọng hóa cá nhân. Một ví dụ là việc đi hát: Cuộc sống của chúng ta có rất nhiều người hát được. Có thể bạn hát karaoke nghe rất hay. Có thể bạn hát hay đến mức có người bạn của bạn mời bạn hát đám cưới. Nếu bạn đồng ý rằng “tôi chỉ muốn hát karaoke đám cưới cho vui” cả đời thì không vấn đề gì. Mặt khác, việc nghĩ rằng một người ca sĩ chỉ là một người hát karaoke hay hát đám cưới mà may mắn có nhiều người nghe là rất sai. Mặc dù nhiều người ca sĩ được khám phá ra vì họ hát đám cưới hay, sẽ tốt hơn nếu chúng ta nhận ra khoảng cách giữa hai người đó là rất xa nhau. Việc ca sĩ chuyên nghiệp như Mỹ Tâm hay Taylor Swift chẳng hạn có cống hiến hàng chục năm mà vẫn có bài hát mới không phải chỉ bởi vì người ta làm vì thích hay người ta may mắn. Mình chắc chắn một điều, phần lớn những thành công đó không nhờ họ có hứng hay họ may mắn.
Điểm giống nhau giữa hai việc hát và code là rất nhiều người làm vì thích, đó là một phần của sự sáng tạo và đi lên từ việc làm nghiệp dư, làm cho vui. Cá nhân mình viết phần mềm đầu tiên từ khi 12 tuổi. Mình viết báo PCWorld về lập trình cho vui từ năm 14 tuổi để lấy tiền tiêu vặt. Phần mềm đầu tiên mình viết “nguồn mở” cũng là vào những năm đó và mình nói chung đều viết code cho đến giờ. Đó đều là những việc làm chơi, nghiệp dư. Mình bây giờ được người ta trả tiền để viết phần mềm – đó là biết mình đã chuyển từ việc làm chơi thành làm thật.
Trong thời gian đó đến giờ, rất nhiều khi mình tự hỏi: Khi biết mình thích, thì làm cách nào để mình biết là mình đang làm đúng hoặc đi đúng hướng trên con đường đó? Làm cách nào để chuyển từ làm chơi thành làm thật?
Trong thời gian đó, mình có những điều hiểu sai về việc này mà mình nghĩ rằng mình biết nhưng thực tế thì không. Nếu mà mình biết trước thì đã tiết kiệm được vô khối thời gian.
1. Nên học ít nhất đến hết đại học chuyên ngành
Nếu có thể, bạn nên học tiếp bằng Master. Bạn không nên nghĩ rằng mình có thể “tự học” được tất cả mọi thứ bằng cách mày mò, và dành thời gian đó để làm việc khác (ví dụ làm startup). Tuy “nghề” viết phần mềm là mới so với nhiều nghề khác, nhưng nó cũng không mới lắm. Và khi một con đường đã được người khác khai hoang từ lâu thì bạn sẽ nên đi con đường người khác đã biết và đã tạo lập sẵn, chứ không cần phải khai phá lại. Bạn có thể nghĩ mình có thể học được bằng cách tự học tự làm nhưng việc đó sẽ rất tốn thời gian, và bạn sẽ phải đối mặt với muôn vàn câu hỏi mà bạn không có câu trả lời (nhưng người khác có, và nếu bạn theo người ta thì bạn đã không vướng vào đó rồi).
Sẽ có nhiều điều bạn không biết rằng mình không biết nếu không học đại học. Không ai bây giờ đi nghiên cứu vũ trụ bằng cách tự chế ra một cái kính viễn vọng rồi tự nhìn lên trời để phát minh ra định luật mới cả, mặc dù sách danh nhân hay nói với bạn nhiều người đã làm như vậy (những việc đó bạn đã chậm chân 500 năm). Cũng như vậy, bạn không nên nghĩ rằng mình sẽ hiểu được máy tính bằng cách ngồi ở nhà và tự học: Đại học, được đào tạo chính quy, nghiêm chỉnh luôn là con đường tốt nhất, ngay cả khi bạn đã có vốn liếng kha khá về kiến thức lập trình khi vào đại học/master.
Sự thật với cá nhân mình là mình không ghi danh nhập học ngành máy tính khi bước vào đại học vì mình nghĩ mình đã hiểu được làm cách nào để code rồi thì học cái khác chứ học máy tính làm gì nữa. Sau này khi nhận ra mình phải học nghiêm túc vì có rất nhiều điều mình chưa biết, thì mình chuyển qua học Khoa học máy tính.
Nếu bạn muốn làm startup thì bạn nên làm startup, nhưng nếu bạn không phải là xuất chúng thiên hạ, bạn chỉ có thể chọn giữa làm startup hay làm phần mềm, chứ không phải cả hai. Có nhiều người sẽ hỏi: Vậy tại sao các ông trùm về công nghệ như Bill Gates hay Mark Zuckerberg đều là những kẻ bỏ học? Mình xin được trích lời Gấu: Có bao nhiêu người là người bỏ học và trở thành Bill Gates và bao nhiêu người bỏ học và trở thành đi ăn xin?
2. Viết phần mềm thì cần tập trung.
Đừng là nghệ sĩ, nhà hoạt động xã hội, kẻ khôn lỏi, hay người làm việc tùy hứng cùng lúc với viết phần mềm. Làm phần mềm là một công việc kỹ thuật sáng tạo, nhưng là một công việc kỹ thuật trước tiên. Viết code không phải là đi viết thơ hay viết văn. Viết code là đi viết lệnh mạch lạc để máy tính làm một việc rõ ràng. Làm máy tính là phải học cách làm một người kỹ sư chứ không phải là đi làm nghệ sỹ. Vì thế về mặt kỹ thuật, viết code, viết tài liệu cho phần mềm, viết comment cho code, viết commit message đều phải mạch lạc, rõ ràng và đi vào gốc rễ của vấn đề. Mỗi dòng lệnh bạn viết cần phải có một mục đích cụ thể và duy nhất. Bạn sẽ sai rất nhiều và sẽ phải rất thẳng thắn về việc nhận cái sai của mình.
Về công việc, bạn cần có kỷ cương và làm việc một cách chuyên nghiệp chứ không phải làm tùy hứng. Bạn cần nhận ra đâu là làm có hiệu quả và đâu là làm để lấy le với người khác (trong đó, làm không điều độ, thức đêm hôm là những việc điển hình của người làm việc nghiệp dư).
Khi viết code, người làm nghiệp dư thường mắc phải những lỗi mà mình nghĩ là mình “thông minh.”
Ví dụ, lần đầu tiên mình nhận ra là mình không thông minh như mình tưởng là khi ông giáo sư dạy Khoa học máy tính đi bắt mình những lỗi như không viết dấu {} khi câu lệnh if chỉ có một dòng như thế này:
if (condition) doSomething(); return 0;
Vấn đề của việc viết không có dấu {} là khi người khác làm việc trên code của mình mà muốn làm thêm một việc khác nữa, mà viết như thế này:
if (condition) doSomething(); doSomethingAfterwards(); return 0;
Như vậy mà gặp phải lỗi thì rất khó để nhận ra vấn đề nằm ở đâu. Người làm việc chuyên nghiệp không chỉ biết làm một việc hiệu quả, mà biết làm việc để người khác hiểu được mình, kế tục được việc mình làm và ít bị bất ngờ nhất chứ không phải là người làm ma mãnh khôn lỏi thông minh nhất. Nếu bạn muốn là người tỏ ra thông minh nhất, bạn cần phải tham gia game show chứ không phải đi viết phần mềm.
Một ví dụ cụ thể cho việc một hệ thống không thể hiện sự làm việc chuyên nghiệp là một dự án về trao đổi, lưu trữ tiền (lớn?) mà có những commit message rất kỳ khôi, có khi chỉ là một chữ “n.” Khi người sau tiếp tục kế tục một chân làm phát triển cho công ty như vậy thì họ sẽ không biết tại sao thay đổi đó đã diễn ra, diễn ra để làm gì, vấn đề nó khắc phục là gì, kết quả như thế nào. Như vậy là khi dự án trở nên rắc rối hơn, con người đông lên, việc một câu lệnh làm gì sẽ vượt khỏi tầm tay và có thể có những hậu quả đáng tiếc xảy ra.
3. Đừng là một kẻ đơn độc
Có rất nhiều người trong thế giới này giỏi hơn bạn và bạn sẽ học được rất nhanh khi làm việc với người giỏi hơn mình. Một vấn đề của người làm vì thích là việc thấy mình có thể tự làm được rất nhiều thứ. Vì thế người làm vì thích tự làm rất nhiều thứ một mình ở trong bóng tối. Bạn làm thế nào thì bạn cũng có niềm vui. Bạn có thể nhốt mình ở trong căn phòng 24/7 không tiếp xúc với ai, không nói chuyện với ai, không ai biết bạn đang làm gì, và bạn nghĩ mình vẫn học được nhiều điều mới lạ từng ngày. Bạn vẫn có những sáng tạo của mình hàng ngày và thấy việc đó rất tốt. Vấn đề của việc làm việc một mình là bạn không thấy điểm mù của mình và vùi đầu vào một việc không đáng làm, hoặc nếu có người chỉ cho đã nhanh hơn rất nhiều rồi. Điều này đặc biệt đúng với các bạn học sinh học phổ thông hay sinh viên mới vào trường đại học, vì bạn thấy mình đơn độc khi có sở thích riêng, kỳ lạ khác người và không chơi được với những người cùng trang lứa.
Để giải quyết vấn đề tự hát tự thâu băng tự đưa lên Youtube này thì giải pháp là phải học thầy và học bạn. Khi bạn có những người ít nhất là tốt bằng mình thì bạn sẽ nhận ra cần phải làm gì rất nhanh. Để làm được việc đó, việc tốt nhất là thay vì làm một dự án của riêng mình hay làm trong nhóm nhỏ thì bạn nên tìm hiểu và tham gia vào một dự án phần mềm chuyên nghiệp. Các dự án này phải có một đội ngũ làm nghiêm túc hẳn hoi. Tất cả các dự án có nhiều người làm ở các công ty làm phần mềm chuyên nghiệp (như Google, Facebook, Redhat) tham gia điều hành và gửi mã nguồn lên đều là những dự án “đạt chuẩn.” Những dự án như thế này không khó để tìm trên Internet, những dự án có uy tín có thể kể ngay ra như Debian, Linux Kernel, Buildroot, OpenWRT, KDE, GNOME, OpenSSL, Python đều là những dự án rất chuyên nghiệp và họ luôn tìm người tham gia. Khi bạn commit code vào những dự án đó, những người đi trước sẽ rất nhanh chóng chỉ cho bạn những lỗ hổng trong kiến thức và kỹ năng của mình. Cộng với việc khi đóng góp bạn luôn có thể nói với mọi người rằng bạn đã tham gia đóng góp mã nguồn vào những dự án đó.
Các dự án nhỏ hơn của những cá nhân làm web, như các web framework hay thư viện javascript hay ứng dụng nhỏ trên Github, trừ khi có lý do rõ ràng, mình nghĩ rằng sẽ không hiệu quả cho việc phát triển cá nhân. Lý do là những người làm những framework hay dự án nhỏ cũng chỉ là những người làm nghiệp dư và họ sẽ không có thời gian công sức và kinh nghiệm để nắn sửa cho bạn nếu bạn sai.
Nếu bạn muốn tham gia nghiên cứu, các lab có uy tín ở trong đại học lớn sẽ tốt hơn các lab có ít người ở các đại học nhỏ hơn. Các lab có nhiều sinh viên học Khoa học máy tính sẽ có nhiều người để bạn học hỏi hơn. Có nhiều trường hợp, như trường hợp của mình, mình đã làm việc Khoa học máy tính trong một lab mà mình là người duy nhất được đào tạo về máy tính. Trong thời gian đó, mình không phát triển được nhiều kỹ năng về làm phần mềm tốt của mình.
4. Nhiều tiền hay nổi tiếng không phải là vấn đề
Mình nghĩ một cạm bẫy lớn của các bạn trẻ (teen) là nghĩ việc làm của mình rất tốt, rất quan trọng nếu như mình làm được tiền hoặc sự chú ý của ai đó. Bạn sẽ gây dựng nên được Microsoft hay Facebook vì bạn thu được một ngàn đô la một tháng vì bạn nghĩ ra một điều gì đó mọi người đang cần. Mình nghĩ việc nông nổi đó sẽ giảm dần đi theo thời gian khi mỗi người lớn lên, và nếu có phụ huynh nào có con nhỏ thuyết phục cha mẹ như vậy thì cũng không nên lo quá. Nhưng có chút tiền không thôi thì không phải là lý do để không thèm học đại học, không thèm mở rộng chân trời của mình. Mặt khác, đó có thể là lý do ngu ngốc nhất để không học tiếp.
Cùng lúc đó, nếu bạn phát hành phần mềm miễn phí thì bạn cũng chẳng làm thế giới tốt đẹp hơn là bao. Đó là cách bạn nghĩ về xã hội, nhưng mỗi người trong xã hội có một mối quan tâm riêng và có sự lựa chọn cho mình, và đừng bắt người khác “mang nợ” bạn vì bạn quyết định không bán phần mềm của mình.
Còn hack để kiếm tiền hay phục vụ mục đích của người khác thì luôn luôn sai. Cái đó không cần bàn cãi, và nếu ai nghĩ rằng mình hoành tráng vì có thể hack thì đó là người không chỉ không có khả năng, nghiệp dư, trẻ con mà còn là một người độc hại cho cuộc sống.
Các điểm trên đây đều không cái nào dễ làm trong ngày một ngày hai, không dễ thay đổi trong ngày một ngày hai và đó chính là lý do mình viết bài này: Nếu mình biết trước thì đã dễ dàng tiết kiệm được rất nhiều năm rồi. Nhưng mình hy vọng là ai đọc thì may ra có thể tiết kiệm được vài năm không như mình chăng.
Lập trình là một công việc khó nhằn và có những đặc thù riêng. Để dễ dàng hơn trong các thao tác, mình chia sẻ một số tips dành cho coder như sau:
1. Phím tắt
Khi coding, cần phải sử dụng bàn phím rất nhiều, và việc nhớ các phím tắt rất cần thiết, giúp tăng hiệu quả khi coding và tăng tốc độ làm việc. Hãy cố gắng luyện tập sử dụng bàn phím nhiều nhất có thể để nhớ được các phím tắt và tránh sử dụng chuột. Điều này có thể chưa cần thiết vào lúc này, nhưng khi bạn xây dựng một dự án và phải thêm, chỉnh sửa và xóa nhiều dòng code trên một dự án với hàng trăm dòng code, thì việc sử dụng phím tắt cực kỳ hữu dụng.
2. Độ thụt dòng
Lỗi thụt dòng trong Python có thể làm ngắt chương trình hoàn toàn. Mặc dù các ngôn ngữ khác không bị tình trạng như vậy, nhưng bạn nên check kỹ để nâng cao khả năng đọc bao quát.
3. Quy ước đặt tên
Các bạn nên đặt tên functions bằng động từ và tham biến bằng danh từ. Lý do cho việc đặt tên này đó là functions biểu thị hành động và lấy động từ miêu tả cho hành động là logic. Mặt khác, danh từ được sử dụng để nhận diện người, sự vật và nơi chốn.
Sẽ tốt hơn nếu bạn có tên đầy đủ cho các chức năng và tham biến, điều này giúp bạn hiểu được bạn đang làm gì. Vì vậy, bạn nên ngừng lười biếng và rút ngắn tên các chức năng và tham biến (ví dụ như auth thay vì authentication), trong tương lai nó sẽ đỡ gây phiền phức hơn cho bạn.
Nên để lại chú thích bên cạnh những dòng code, điều này sẽ cải thiện khả năng đọc và giúp bạn duy trì dòng code ở các giai đoạn sau. Thống nhất cách chú thích và đặt tên chức năng/ tham biến, điều này sẽ khiến bạn giảm stress và ít tốn thời gian vì bạn sẽ không phải mất thêm thời gian để sửa code.
5. Tính nhất quán
Có nhiều quy định mà các lập trình viên phải tuân theo để duy trì sự nhất quán trong/trên toàn bộ dự án. Bạn có thể xây dựng những quy tắc riêng miễn là các quy tắc đó nhất quán. Dưới đây là một số khuyến nghị của tôi:
Đặt tên files/ hình ảnh – kebab-casing
Đặt tên đối tượng – PascalCasing
Đặt tên chức năng/ tham biến – camelCasing
LỜI KHUYÊN BỔ SUNG
Bạn có thể học hỏi thêm kinh nghiệm coding ở Github để thấy cách họ viết code và và chính mình cải thiện khả năng viết code. Tìm kiếm thêm các tài liệu về code, tệp, độ thụt dòng, vv…
1. Username
Bạn nên sử dụng username giống nhau ở mọi nơi bạn sign-up, điều này cho phép người khác dễ dàng tìm kiếm và nhận ra bạn ở các platform khác nhau. Một vài gợi ý cho developer:
Github
Twitter
Stack Overflow
Dev
Medium
Envato
2. Trình duyệt web
Internet là một không gian mở và đa dạng, nếu mà nói không bị xao nhãng bởi Internet thì là điều không thể, đó là lý do vì sao trong khi lập trình cho dù bạn đang học hay đang làm việc nên chia trình duyệt ra làm 2 phần: lập trình và cá nhân. Ví dụ: sử dụng Chrome cho các mục đích liên quan đến lập trình và Firefox cho mua hàng trên Amazon, redditing, 9gaging và bất cứ điều gì làm bạn thích thú. Điều này sẽ giúp bạn tập trung và không mở các website khác khiến bạn phân tâm trong việc học và công việc.
Hầu hết những khuyến nghị/ lời khuyên trên là ý kiến cá nhân được tổng hợp thông qua kinh nghiệm bản thân và lập trình viên làm việc với các công cụ khác nhau dưới điều kiện khác nhau có thể có các ý kiến khác nhau. Anh em có kinh nghiệm vào chia sẻ thêm với TopDev nhé!
Ngày hội lớn nhất về công nghệ lớn nhất về web và digital marketing – Vietnam Web Summit 20 đã chính thức trở lại với cộng đồng đam mê công nghệ tại TP.HCM vào sáng ngày 6/12. Sự kiện năm nay có sự tham gia của nhiều diễn giả kinh nghiệm lẫn đại diện các tập đoàn lớn trên thế giới cũng như Việt Nam, những cái tên như Google, Lazada, Grab, Axon, Appier, và FPT…đã hâm nóng hàng ngàn khán giả, tạo nên những phút giây bùng nổ bằng nhiều nội dung độc quyền hấp dẫn, mở ra nhiều ý tưởng đột phá.
Hơn 3500+ lượt khách tham dự đã đến check-in chỉ trong buổi sáng ngày 6 tháng 12 tại TP.HCM
Được biết, sự kiện Vietnam Web Summit năm nay đã đón chào hơn 5.000 khán giả tại TPHCM đến tham dự. Đây cũng được xem là một sự kiện được cộng đồng công nghệ mong chờ nhất vào dịp cuối năm, sự kiện đã đem đến cho toàn thể khán giả TPHCM hơn 100 nội dung độc quyền và đặc sắc nhất trên thị trường Tech. Sự kiện sẽ tiếp tục diễn ra vào ngày 13/12 tại Hà Nội.
Việt Nam chuyển mình trong thời đại Digital Transformation
Ba từ khóa được đề cập đến nhiều nhất trong sự kiện năm nay vẫn là: Digital Transformation (chuyển đổi số), AI (trí thông minh nhân tạo, ứng dụng trong tài chính, bán lẻ, quảng cáo xử lý hành vi tiêu dùng) và Data Driven (tối ưu hóa và tận dụng những lợi thế từ các thiết bị khác nhau). Các báo cáo và số liệu chỉ ra nhiều xu hướng và cơ hội cho các doanh nghiệp tại Việt Nam nói riêng và Đông Nam Á nói chung. Theo báo cáo của Ngân hàng Merrill Lynch (Mỹ), giá trị thị trường công nghệ AI sẽ đạt 70 tỷ USD vào năm 2020, tương đương với mức tăng trưởng 36% mỗi năm. Những công nghệ của “tương lai” đang âm thầm diễn ra và thay đổi cuộc sống chúng ta mỗi ngày.
Diễn giả Boice Lin – Regional VP, Business Development Appier – Với chủ đề về AI-powered personalization.
Thị trường công nghệ tại Việt Nam được nhiều chuyên gia nhận định là khá giống với bối cảnh của một số thị trường lớn tại Đông Nam Á như Indonesia trong khoảng 5 năm gần đây. Tuy nhiên, vẫn còn một số khó khăn như việc làm sao để những nguồn vốn đầu tư có thể tiếp cận được với hàng ngàn các doanh nghiệp công nghệ lớn nhỏ tại Việt Nam, hiện có đến 90% trong số các startup này chưa nhận được nguồn vốn cần thiết từ các quỹ đầu tư chính thức cho giai đoạn phát triển của mình, đặc biệt là các startup đang phát triển các công nghệ về AI.
Việc số hoá doanh nghiệp là một trong những ưu tiên hàng đầu, ứng dụng phân tích dữ liệu nhằm đưa ra các chiến lược mang tính quyết định. Các chuyên gia dự đoán, đây là một trong những hướng đi mà các doanh nghiệp tại Việt Nam cần chú ý đến trong thời gian tới nếu muốn vươn xa hơn đến các thị trường quốc tế. Cụ thể hơn, việc tiếp cận người dùng và khách hàng hiện nay cần ứng dụng của Programmatic Marketing, vận dụng AI vào việc cá nhân hóa ngữ cảnh và cách hiện thị các quảng cáo đến người dùng.
Chị Nguyễn Hoài Trang – Associate Director – Kantar Vietnam nói về những phương thức giúp các digital marketer có thể thu hút được sự chú ý của các khách hàng tìm năng trong thời đại số.
Từ những thay đổi tích cực này, chuyển đổi số sẽ là chiếc chìa khóa quyết định tính sống còn của doanh nghiệp trong những năm sắp tới. Dù được đánh giá là một trong những đất nước triển khai số hóa doanh nghiệp khá muộn trong khu vực, nhưng nhiều chuyên gia quốc tế nhận định rằng, Việt Nam sẽ có những bước tiến vượt bậc trong việc nâng tầm doanh nghiệp cũng như thúc đẩy nhanh quá trình đưa những sản phẩm mang tầm quốc tế ra thị trường thế giới trong một tương lai không xa. Thị trường AI tại Việt Nam cũng đã đạt được sự chính mùi nhất định. Ông Vito Sabella – Vice President of Software Engineering của AXON Việt Nam nhận định rằng:
“Các kỹ sư và lập trình viên tại Việt Nam chưa bao giờ làm tôi hết bất ngờ. Từ thủ đô Hà Nội đến thành phố Hồ Chí Minh, tôi nhận thấy các bạn đều có nền tảng rất tốt về toán học và khoa học cơ bản, và điều đó là vô cùng quan trọng khi bạn bắt tay vào thiết kế các hệ thống AI và phần mềm phức tạp và độ chính xác cao. Lập trình viên Việt Nam có nền tảng để trở thành những chuyên gia AI hàng đầu Đông Nam Á.”
Ông Vito Sabella – Vice President of Software Engineering tại AXON chia sẻ những kinh nghiệm “xương máu” trong sự nghiệp phát triển phần mềm của mình
Các doanh nghiệp công nghệ tại Việt Nam sẽ chuẩn bị gì cho những cơ hội mới đang được mở ra trong năm 2022?
Ở thời điểm hiện tại, chính phủ Việt Nam đã ban hành nhiều chính sách với ưu đãi cho các doanh nghiệp khởi nghiệp lĩnh vực khoa học công nghệ, gửi gắm vào trong đó sự kỳ vọng “tăng tốc” và bứt phá của cộng đồng startup đặc biệt là ở những lĩnh vực liên quan đến AI và Machine Learning. Việt Nam sẽ chứng kiến sự xuất hiện của hàng loạt những kỳ lân mới. Cuộc chơi AI không chỉ còn là cuộc chơi của những ông lớn, các doanh nghiệp startup cũng đang dần khẳng định mình bằng những sản phẩm không hề thua kém.
Diễn giả Damien Velly – Data Architect tại KMS Technology – một trong những công ty công nghệ hàng đầu tại Việt Nam
CEO TopDev Nguyễn Hữu Bình – đại diện ban tổ chức sự kiện Vietnam Web Summit 2019 cho biết, điểm đáng chú ý nhất chính là việc Việt Nam đã chính thức có kỳ lân startup mới – VNPay, sau khi đơn vị này nhận được 300 triệu USD đầu tư, đặc biệt là trong lĩnh vực Fintech. Startup kỳ lân được hiểu là những công ty khởi nghiệp tư nhân lớn mạnh với mức định giá từ 1 tỷ USD trở lên.
“Việc này rất có ý nghĩa. Bởi lẽ, sau đợt các startup về trí tuệ nhân tạo – AI được đầu tư lớn như Cinnamon (9 triệu USD), Logivan (5,5 triệu USD), ELSA (7 triệu USD) lập tức đã gây áp lực lên lực lượng nhân sự AI do nhận thức về việc phải ứng dụng AI của các startup và doanh nghiệp trở nên nở rộ”, ông Nguyễn Hữu Bình đánh giá.
Ilya Isaev – Head of Transportation tại Lazada chia sẻ về những công nghệ hiện đang ứng dụng tại một trong những nền tảng thương mại điện tử lớn nhất Đông Nam Á.
Nhiều chuyên gia cho rằng, không chỉ chờ đợi chính sách phát triển của quốc gia, mà các công ty cần phải đầu tư cho nghiên cứu, phát triển sản phẩm sử dụng trí tuệ nhân tạo ngay từ bây giờ để có được lợi thế về lâu dài. Gặp gỡ và hợp tác với những doanh nghiệp đang phát triển trong lĩnh vực này, là một trong những lựa chọn hàng đầu giúp các doanh nghiệp có thể bắt kịp xu hướng AI đang bùng nổ trên toàn thế giới.
VIETNAM WEB SUMMIT sẽ tiếp tục diễn ra tại Hà Nội vào ngày 13/12 mang đến hơn 100 chuyên đề hấp dẫn xoay quanh 6 nhóm chủ đề chính:
Digital Transformation: Survive and Thrive – Cách mạng số và những bước ngoặt lịch sử.
Beyond Digital Marketing: Humanize Customer Experiences – “Người hóa” trải nghiệm khách hàng thời đại số.
AI-Powered Future: Data drive product – Trí tuệ nhân tạo vận hành thế giới.
Operations in a ‘Serverless’ World – Vận hành doanh nghiệp trong thời đại serverless
Cloud-based & Intelligence-driven Cybersecurity – An ninh mạng và những giải pháp của thời đại mới.
The new era of web development – Kỷ nguyên mới của công nghệ phát triển web
Đã bao lâu rồi bạn chưa thử sức với lập trình thuật toán, tư duy logic và giải quyết vấn đề?
Code Tour là sân chơi online dành cho các bạn đam mê thuật toán do TopDev & VNG tổ chức dưới sự bảo trợ chuyên môn của BigO Coding.
Đây chắc chắn là cơ hội rèn luyện kĩ năng và thử thách bản thân, đồng thời kết nối cộng đồng coder bất kể vùng miền. Code Tour 2019 gồm 5 Code Challenge định kỳ hàng tháng (từ tháng 8/2019 đến 12/2019). Bạn chỉ cần 2 tiếng online cùng chiếc laptop của mình, còn lại hãy để BTC lo!
Coding tại nhà, “rinh” giải giá trị – Tham gia ngay CODE TOUR 2019!
Code Challenge #5 diễn ra lúc 18:30 – 20:30 ngày 21/12/2019 (Thứ Bảy) sẽ mang đến cho coder trải nghiệm mới khi phân chia 2 phòng thi có độ khó và giải thưởng khác nhau: Nâng cao O(1) và Cơ bản O(n).
Nếu như O(n) là nơi để coder cọ xát và giảm áp lực thứ hạng thì O(1) lại là chốn hội tụ cao thủ với Top 20 coder có điểm cao nhất Code Challenge #3, cộng thêm 30 suất dành cho coder đủ điều kiện:
+ Đã tham gia thi ít nhất 01 Code Challenge trước đó. + Điểm 1 vòng thi bất kỳ trên 10.
Room O(1): Nâng cao và Room O(n): Cơ bản vẫn tiếp tục là 2 đấu trường song song của chặng thi tháng 12 này!
Giải thưởng hấp dẫn gồm có:
Phòng O(1) – có giới hạn số lượng thí sinh:
✦ 1 Giải Nhất (2.000.000 VND)
✦ 1 Giải Nhì (1.500.000 VND )
✦ 1 Giải Ba (1.000.000 VND)
✦ 2 Giải Khuyến khích nhận được quà từ VNG.
Phòng O(n) – không giới hạn người tham dự:
✦ 1 Giải Nhất (1.000.000 VND)
✦ 1 Giải Nhì (700.000 VND )
✦ 1 Giải Ba (500.000 VND)
✦ 2 Giải Khuyến khích nhận được quà từ VNG.
Dù là bạn đã quen thuộc hay mới biết đến Code Tour 2019 thì càng không thể bỏ qua “đặc quyền” mà BTC gửi gắm nhé:
Chờ ngày nhận chủ đề chính của Code challenge #5 cho phòng O(n) tại CODE TOUR 2019
Khoảng cách địa lý không còn là vấn đề, quy mô tổ chức được mở rộng cùng những phần quà hấp dẫn dành cho Top 17 coder xuất sắc tại mỗi Code Challenge. Như vậy đã đủ hấp dẫn bạn tham gia Code Tour 2019?
Nhanh tay đăng ký tại website www.codetour.vn bạn nhé!!! Hẹn gặp lại tại Code Challenge #5 lúc 18:30 ngày 21/12 nhé coder ơi!
===========
Thông tin Code Challenge #5: Thời gian: 18:30 – 20:30 thứ Bảy, ngày 21/12/2019
Địa điểm: Thi online tại www.codetour.vn
Kỹ năng tìm kiếm dành cho lập trình viên – Search Google cũng phải có kỹ năng xịn. Tất cả cách Google Search chỉ dành cho những thứ được chia sẻ công khai. Các bạn có thể tham khảo những cách google search hay nhất trên google mà không phải ai cũng biết được
Cách tìm và tải xuống bất kỳ bộ phim nào bạn muốn
Cách 1: Vào google và gõ dòng lệnh sau:
index of Movie name (Trong đó Movie name là tên bộ phim bạn muốn tải)
Ví dụ: Mình muốn tìm và tải Joker thì trên google bạn gõ như sau:
index of Joker
(sau đó chọn ngay link đầu tiên hoặc t2…. và sau đó nó sẽ hiện 1 danh sách link phim để bạn chọn và tải xuống)
Nếu không thấy thì làm tiếp cách 2
Cách 2: Vào google và gõ dòng lệnh sau:
Movie name -inurl:(htm|html|php|pls|txt) intitle:index.of “last modified” (mp4|wma|aac|avi)
(Trong đó Movie name là tên bộ phim bạn muốn tải)
Ví dụ: Mình muốn tìm và tải Joker thì trên google bạn gõ như sau:
JavaScript – Hẳn anh em nào cũng thích việc tối ưu hóa sản phẩm. Nhưng người dùng không quan tâm đến code có được tối ưu hóa hay không, mà họ chỉ quan tâm trang web có chạy được trên Internet Explorer 11 hay không.
Thế nên tôi đã sử dụng Endtest để tạo các bài test tự động và cho chúng test chéo trên đám mây trình duyệt (cross-browser cloud).
Netflix cũng sử dụng nền tảng tương tự để kiểm tra các ứng dụng web của họ.
Nó thậm chí còn được liệt kê trong danh sách kỹ năng yêu cầu của các vị trí.
Endtest có một số tính năng thực sự hay, chẳng hạn như:
• Lưới trình duyệt chéo, chạy thử trên Windows và macOS
• Chế độ Codeless Editor cho các bài test tự động
• Hỗ trợ cho các ứng dụng web
• Hỗ trợ cho cả ứng dụng Android, iOS native và hybrid
• Quay lại video cho các lần chạy thử của bạn không giới hạn
• So sánh ảnh chụp màn hình
• Geolocation (Định vị)
• If Statements (Câu lệnh if)
• Loops (Vòng lặp)
• Cho phép upload file trong bài test của bạn
• API Endtest, dễ dàng tích hợp với hệ thống CI/CD của bạn
• Advanced Assertions
• Thực hiện mobile test trên các thiết bị di động thực
• Thực hiện email test với hộp thư của Endtest
1. Replace All
Chúng ta biết rằng hàm string.replace() chỉ thay thế lần xuất hiện đầu tiên. Bạn có thể thay thế tất cả các lần xuất hiện khác bằng cách thêm /g vào cuối regex.
var example = "potato potato";
console.log(example.replace(/pot/, "tom"));
// "tomato potato"
console.log(example.replace(/pot/g, "tom"));
// "tomato tomato"
Như vậy sẽ tiết kiệm thời gian hơn.
2. Extract Unique Values
Chúng ta có thể tạo một mảng mới với các giá trị duy nhất bằng cách sử dụng đối tượng Set và toán tử Spread.
Tôi nghĩ thật tuyệt khi bạn biết những chiêu “hack” JavaScript này, nhưng bạn nếu không chắc ứng dụng web của bạn hoạt động chính xác trên tất cả các trình duyệt và thiết bị.
Bạn có thể sử dụng Endtest để nhanh chóng tạo các bài test tự động và thực hiện chúng trên cross-browser cloud.