Nhằm tiếp cận với các cơ hội việc làm hiện có, cũng như tham gia các buổi chia sẻ Technical Event do Gamba Team tổ chức, thì việc đăng ký tài khoản và tạo hồ sơ năng lực trên Gambaru.io là điều không thể thiếu.
Làm việc từ xa – Nhận lương thật đã – Ngay tại Gambaru
Bài này sẽ hướng dẫn bạn các bước cần thiết để thực hiện điều này.
Có nhiều lựa chọn khi đăng ký tài khoản Gambaru.io
2. Nhập mã xác nhận
Lưu ý: Nếu đăng ký bằng Google hoặc Facebook, bạn sẽ không cần thưc hiện bước 2 mà chuyển sang bước 3.
Bạn sẽ nhận được một email từ Gambaru Support Team có chứa mã xác nhận. Mã xác nhận là một dãy 6 chữ số và có hiệu lực trong vòng 2 phút.
Do đó, bạn cần nhanh tay kiểm tra hộp thư đến. Để chắc chắn hơn, bạn nên xem cả hộp thư spam và thư quảng cáo nữa nhé.
Mã xác nhận được gửi qua email ngay sau khi đăng ký
Vì đây là email tự động, đừng phản hồi lại bạn nhé. Nếu gặp vấn đề với việc đăng ký hay mã xác nhận, hãy liên lạc ngay với chúng tôi qua email: contact@gambaru.io.
3. Tạo hồ sơ
Bước cuối cùng nhưng cũng không kém phần quan trọng. Hồ sơ của bạn được duyệt hay không đều phụ thuộc vào bước này.
Tuy nhiên, bạn đừng quá lo lắng! Gambaru sẽ tường tận những gì cần lưu ý để hồ sơ được duyệt nhé.
Cách tạo profile 100% được duyệt
Hồ sơ càng chỉn chu, cơ hội được mời phỏng vấn càng cao
1. Ảnh đại diện
Ảnh đại diện mặc dù không bắt buộc, nhưng thông tin cá nhân đầy đủ và hình ảnh rõ ràng sẽ giúp tăng uy tín profile của bạn.
Một hình ảnh gọn gàng, sáng sủa cũng được xem như lời chào đầu tiên đến Nhà tuyển dụng.
Càng tốt hơn nếu bạn có thể để lại vài câu giới thiệu sơ lược về bản thân, ngắn gọn nhưng súc tích.
2. Kỹ năng chính và phụ
Bạn càng liệt kê được nhiều kỹ năng liên quan (tại mục “Nghề nghiệp”), profile của bạn càng có giá trị hơn.
Những công cụ, nền tảng, ngôn ngữ lập trình bạn đã từng có kinh nghiệm sử dụng qua, hay là những kỹ năng mềm thiết yếu, phong phú sẽ làm nổi bật profile của bạn.
3. Kinh nghiệm làm việc
Một IT-er có thâm niên, đã trải qua nhiều dự án ắt hẳn là sẽ không hào hứng khi phải nhập tất cả Kinh nghiệm làm việc của mình.
Thế nhưng, những kỹ năng bạn có, công việc bạn đã từng làm qua sẽ gián tiếp kết nối bạn với Nhà tuyển dụng và cho họ biết mức độ phù hợp của bạn với công việc họ đang tuyển dụng nữa đấy. Hãy cho mình cơ hội tăng sức cạnh tranh, được tỏa sáng trước hàng trăm profile khác, bằng cách liệt kê đầy đủ quá trình công tác và giá trị mà nó mang lại.
*Bật mí nho nhỏ: tính logic của bạn được thể hiện thông qua sự liên kết xuyên suốt profile. Đừng quên chú ý nhé!!!
4. Link, porfolio
Sẽ tuyệt vời hơn nếu như profile của bạn được chứng thực tại những nền tảng uy tín như Linkedin (dẫn link) hoặc có thể phô trương một chút với Porfolio đa dạng thể hiện trực quan những thành tích của bạn.
Nhà tuyển dụng chắc là sẽ thích thú hơn với việc xem xét hồ sơ qua Porfolio, vừa sinh động, vừa nhanh chóng. Porfolio cũng được xem là một bước đi khéo léo đúng không?
5. Trước khi xác nhận
Nghe có vẻ khó, nhưng hãy thử đặt mình vào vị trí người xét duyệt hồ sơ, hoặc Nhà tuyển dụng để đánh giá xem hồ sơ của mình đã thật sự đạt yêu cầu chưa, đã đủ chuyên nghiệp chưa, đủ hấp dẫn để nhận được thư mời phỏng vấn chưa,…
Một khi câu trả lời “có” chiếm ưu thế, hãy tự tin nhấn “Xác nhận” để gửi profile chờ xét duyệt. Chắc chắn câu trả lời từ Gambaru sẽ không làm bạn thất vọng đâu.
E-mail chấp thuận profile Gambaru – chỉ trong tầm tay bạn
6. Nếu profile không được duyệt thì thế nào?
Không có gì phải lo lắng cả, trường hợp hồ sơ bị từ chối, bạn sẽ nhận được một email thông báo.
Đa phần lý do bị từ chối là thông tin về kinh nghiệm làm việc hay kỹ năng khá sơ sài, hoặc không tương quan với trình độ mà bạn đã đưa ra.
Vậy nên hãy trở lại cập nhật profile và gửi lại một lần nữa theo các lưu ý bên trên.
Nhân sự kiện ra mắt Gambaru phiên bản mới vào ngày 11.08, bài viết này sẽ giúp bạn làm rõ những thắc mắc của bạn trước khi đăng ký và ứng tuyển công việc trên nền tảng của chúng tôi.
Gambaru là ai? Tại sao ra đời Gambaru?
Gambaru được ra mắt vào đầu năm 2019 dưới dạng một trang tin tức việc làm, được thành lập bởi Gianty Group – Tập đoàn với hơn 15 năm kinh nghiệm làm công tác tuyển dụng tại thị trường Nhật, Mỹ.
Trang web Gambaru thời gian này làm nhiệm vụ đăng tải thông tin về các vị trí đang tuyển tại GNT hoặc đối tác tại Nhật.
Cuối năm 2019, Đại dịch Covid-19 xảy ra, hoạt động kinh doanh của các công ty trên toàn cầu trở nên khó khăn, đòi hỏi thay đổi sang các mô hình hoặc hình thức làm việc mới để tiếp tục tồn tại.
Cuối năm 2020, nhận thấy nhu cầu làm việc từ xa là rất lớn, đồng thời việc tuyển dụng nhân sự vào làm trực tiếp tại các công ty đối tác và toàn bộ thị trường ngày càng khó khăn, sự thay đổi trong phương thức làm việc này là động lực rất lớn thôi thúc Gianty quyết định nâng cấp Gambaru lên phiên bản mới, trở thành một nền tảng toàn diện hỗ trợ doanh nghiệp trong việc tìm kiếm nhân sự làm việc từ xa, đồng thời mang lại cơ hội việc làm nước ngoài với mức thu nhập cao cho cộng đồng kỹ sư IT Việt Nam.
Chỉnh thức ra mắt Gambaru – nền tảng việc làm IT nước ngoài
Hiện nay, Gambaru được định nghĩa là một nền tảng việc làm IT nước ngoài dành cho cộng đồng kỹ sư IT Việt Nam.
Ý nghĩa của Gambaru trong tiếng Nhật là “hãy cố gắng“, thông qua đó chúng tôi muốn truyền tải tới các thành viên trên Gambaru rằng chúng tôi cố gắng mang lại giá trị tốt nhất cho các kỹ sư IT Việt thông qua công việc với mức lương xứng đáng, cơ hội đãi ngộ như người lao động bản địa, cơ nội được nâng cao, rèn luyện kỹ năng và lớn hơn là một phong cách sống & làm việc hoàn toàn mới trong tương lai.
Đồng thời chúng tôi cũng cố gắng đem đến cho NTD những kỹ sư tài năng và tiềm năng nhất của Việt Nam.
Gambaru cam kết mang lại những giá trị sau cho thành viên:
Các công việc có mức lương từ $,2000 (đối với trình độ Senior) và từ $1,000 (với trình độ Fresher)
Toàn bộ công việc đều 100% làm việc từ xa (Remote) và toàn thời gian (Full-time)
Miễn phí tất cả tính năng từ cơ bản đến nâng cao mà thành viên sử dụng
Các khóa đào tạo, sự kiện được thiết kế dành riêng cho thành viên.
Gambaru phiên bản mới khác gì so với trước đây?
Với sự nâng cấp trở thành một nền tảng tuyển dụng, Gambaru phiên bản mới thể hiện sự khác biệt đáng kể so với phiên bản đầu tiên.
Về giao diện
Gambaru phiên bản mới có giao diện hoàn toàn mới so với phiên bản trước đây. Chúng tôi có cả giao diện cho ứng viên cũng như NTD tiện thao tác.
Số lượng màn hình cũng nhiều hơn do độ chi tiết về các bước trong toàn bộ quá trình tuyển dụng cũng nhiều hơn.
Trang chủ dành cho ứng viên được làm lại
Giao diện chuyên mục blog
Giao diện trang tìm kiếm việc làm
Về tính năng
Gambaru cung cấp các tính năng cơ bản và nâng cao tại mỗi bước của quá trình tuyển dụng, từ Sàn lọc hồ sơ, tới phỏng vấn, gửi đề nghị tuyển dụng, nhận việc và kết thúc hợp đồng.
Trực quan tại mỗi bước của toàn bộ quá trình tuyển dụng
Là ứng viên, bạn có thể ứng tuyển cùng lúc nhiều công việc khác nhau và chắc chắn mỗi công việc bạn ứng tuyển sẽ đang ở giai đoạn cũng rất khác nhau.
Vì vậy việc nắm bắt bạn đang ở giai đoạn nào khi ứng tuyển một công việc hoặc hoặc những công việc bạn đang ứng tuyển ở một giai đoạn là điều rất cần thiết để dễ dàng quản lý.
Chỉ số cho biết mức độ hoàn thiện của hồ sơ được tạo
Chấm điểm, cho biết mức độ hoàn thiện hồ sơ
Có nhiều yếu tố để NTD đánh giá một hồ sơ có tiềm năng hay không, một trong số đó là mức độ hoàn thiện của hồ sơ.
Hồ sơ càng chi tiết về kỹ năng, kinh nghiệm và cung cấp được các dẫn chứng trực quan thì NTD càng dễ quan tâm tới ứng viên.
Cung cấp chỉ số cho biết mức độ phù hợp của hồ sơ và mô tả công việc
Để tìm được việc làm phù hợp trong danh sách nhiều việc làm trên bất kỳ nền tảng nào, bạn có thể tìm kiếm thông qua từ khóa, từ đó mới xem lần lượt từng vị trí đang tuyển để tìm được mô tả công việc phù hợp.
Gambaru giúp quá trình này nhanh chóng và dễ dàng hơn cho bạn nhờ việc gợi ý độ phù hợp giữa bạn và công việc của NTD thông qua điểm phù hợp (Matching score) để từ đó rút ngắn thời gian tìm ra công việc ưng ý.
Lưu ý khi đăng ký và sử dụng Gambaru
Để đăng ký Gambaru, bạn đơn giản truy cập địa chỉ https://gambaru.io , sau đó chọn Tạo tài khoản.
Tuy nhiên trải nghiệm lúc này sẽ rất khác, bạn khó thấy ở một nền tảng tuyển dụng.
Đầu tiên, phải có Invitation Code
Gambaru hiện đang trong giai đoạn chưa công khai hàng loạt nên bạn phải có Invitation Code (mã mời) mới có thể truy cập và tạo tài khoản được.
Nếu bạn đã có Code (nhờ đăng ký trước từ ngày 19.07), hãy nhập vào khi được yêu cầu và bắt đầu 3 bước tạo tài khoản.
Trang nhập Invitation Code cho người đăng ký trước
Tất nhiên, ở giai đoạn công khai sau này, người dùng sẽ có thể đăng ký theo 3 bước luôn mà không cần phải qua bước nhập Code.
Thứ 2, Tạo hồ sơ
Bạn cần tạo hồ sơ với thông tin chi tiết nhất có thể khi thực hiện đăng ký
Tạo hồ sơ năng lực chi tiết
Mục đích của việc này là để team Gambaru có cơ sở đánh giá và duyệt hồ sơ của bạn, hồ sơ sau khi duyệt mới xem được mức lương, cũng như sử dụng các tính năng khác trên Gambaru.
Mặc khác, một hồ sơ đã duyệt sẽ được công khai trước các NTD, bạn sẽ không muốn NTD xem hồ sơ của mình mà không có lấy một thông tin nào để rõ hơn về bạn đâu. Gambaru cũng không muốn như vậy.
Bạn đã nắm rõ cách thức sử dụng Gambaru chưa? Hy vọng với hướng dẫn và giải thích đơn giản của bài viết này, bạn sẽ hiểu rõ hơn về giá trị Gambaru mang lại.
Nếu còn bất kỳ thắc mắc nào, hãy comment bên dưới bài viết này, gửi tin nhắn cho fanpage Gambaru, hoặc email đến địa chỉ contact@gambaru.io.
Chỉnh thức ra mắt Gambaru - nền tảng việc làm IT nước ngoài
Sau hơn 6 tháng nỗ lực liên tục trong việc hoàn thiện các tính năng, luồng sử dụng, hôm nay chúng tôi trân trọng thông báo việc ra mắt Gambaru – Nền tảng việc làm IT nước ngoài dành cho kỹ sư IT Việt.
Ra mắt chính thức Gambaru – Nền tảng việc làm IT cho dev Việt
Ngay bây giờ, bạn có thể truy cập nền tảng Gambaru tại đây và nhanh chóng đăng ký tài khoản để xem và ứng tuyển các cơ hội việc làm phù hợp với khả năng, đến từ các doanh nghiệp công nghệ tại Mỹ, Nhật.
Lưu ý: Để trải nghiệm được tốt nhất, hãy truy cập và sử dụng Gambaru trên Desktop! Phiên bản mobile hiện đang được hoàn thiện và sớm cung cấp đến thành viên.
Gambaru ra đời nhằm giải quyết bài toán mà cộng đồng IT ở Việt Nam gặp phải:
Làm thế nào để làm việc toàn thời gian cho doanh nghiệp nước ngoài khi vẫn ở Việt Nam?
Làm thế nào để tăng thu nhập trong thời kì Covid đầy khó khăn?
Trong bối cảnh dịch bệnh Covid và nhu cầu làm việc từ xa tăng lên, việc trả lời câu hỏi này trở nên ngày càng khó và đòi hỏi một giải pháp mang tính cách mạng.
Là một thành viên trên nền tảng Gambaru, bạn dễ dàng hơn trong việc:
Tiếp cận nhiều việc làm IT tại nước ngoài, 100% độc quyền, mức lương từ $2,000 (đối với trình độ Senior) và từ $1,000 (với Fresher) trên Gambaru. Điều không dễ có ở các nền tảng tuyển dụng khác tại VN.
Làm 100% Remote, Full-time. Điều này giúp bạn tạo dựng phong cách sống – làm việc mới: Làm từ xa, bất cứ đâu, bất cứ lúc nào.
Sử dụng Miễn phí các tính năng từ cơ bản tới nâng cao có trên Gambaru
Có cơ hội tham gia các chương trình đào tạo, sự kiện mà Gambaru tổ chức cho thành viên.
Gambaru hứa hẹn mang lại sự thay đổi trong phong sống, làm việc của cộng đồng IT trong thời đại mới.
Hãy đăng ký tài khoản và tiếp cận nhiều đầu việc IT nước ngoài phù hợp với năng lực của bạn tại đây.
Ngoài ra, bạn có theo dõi fanpage Gambaru để cập nhật tin tức mới nhất.
Juan Cruz Martinez sẽ hướng dẫn chúng ta tạo một smart contract(hợp đồng thông minh) nhỏ để lưu trữ và truy xuất dữ liệu trên Ethereum blockchain và tạo một web app cho phép truy cập và thay đổi dữ liệu trên smart contract này.
Hãy thực hành cùng Gambaru nhé!
Smart Contract
Đầu tiên, tôi sẽ trình bày về smart contract mà ta sẽ sử dụng để xây dựng các ứng dụng web.
Vì bài viết tập trung vào việc liên kết JavaScript với blockchain, nên tôi tạo contract càng đơn giản càng tốt:
Tạo một Smart Contract đơn giản. Xem code gốc ở đây
Hợp đồng CoolNumberContract chứa một biến trên blockchain được gọi là coolNumber với giá trị ban đầu là 10.
Biến này là public, nghĩa là ta có thể truy cập giá trị của nó từ blockchain mà không cần tạo hàm getter.
Ngoài ra, contract này chứa một hàm public là setCoolNumber, sẽ thay đổi giá trị của biến trên blockchain.
Điều quan trọng cần nhớ ở đây là bất kỳ thay đổi nào trong dữ liệu blockchain đều cần được thể hiện bằng một giao dịch.
Có nghĩa là việc gọi phương thức setCoolNumber sẽ yêu cầu một giao dịch và giao dịch đó sẽ có phí gas đi kèm.
Hãy triển khai hợp đồng trên một test network trước khi tiếp tục.
Thiết lập project và dependency
Để tương tác với bất kỳ Ethereum blockchain nào từ JavaScript, bạn sẽ cần một library.
Trong trường hợp này, hãy sử dụng web3 https://web3js.readthedocs.io/en/v1.3.0/
Web3 sẽ cho phép tương tác với bất kỳ Ethereum network nào thông qua MetaMask hoặc provider của web3 như Ganache.
Hãy bắt đầu một project mới. Tôi sẽ sử dụng JavaScript và HTML, nhưng mọi người có thể sử dụng bất kỳ framework nào mình muốn như React hoặc Vue.
Tất cả code sẽ đi vào một file là index.html và hãy bắt đầu với cấu trúc sau:
Thiết lập project và dependency. Xem code gốc ở đây
Hãy xem thử thẻ body.
Đây là một giao diện người dùng đơn giản với hai button và một khoảng biểu thị trạng thái.
Cả hai button đều gọi các hàm JavaScript mà hiện tại vẫn chưa được định nghĩa.
Trên thẻ head, thẻ quan trọng là script ta đang import. Đó là thành phần phụ thuộc vào web3.
Hãy thêm thành phần phụ thuộc này vào code như tôi đã làm hoặc nếu đang sử dụng một framework, chỉ cần import package này với:
Import Package
Nếu chưa cài đặt library, bạn có thể thông qua NPM:
Cài thông qua NPM
Cuối cùng, trước khi tiếp tục, lời khuyên là hãy cài đặt tiện ích mở rộng MetaMask.
Nếu muốn sử dụng bất kỳ provider nào khác, bạn có thể phải thay đổi các phần của code cho phù hợp, vì các sample được cung cấp sử dụng provider web3 được MetaMask đưa vào.
Kết nối web app với Ethereum Blockchain
Khi cấu trúc cơ bản và các thành phần phụ thuộc sẵn sàng, ta có thể thêm code để kết nối ứng dụng với blockchain.
Bên trong script tag ở body, hãy thêm:
Kết nối web app với Ethereum Blockchain. Xem code gốc ở đây
Các đoạn code trên khá đơn giản ngoại trừ hàm loadWeb3.
Chức năng này chịu trách nhiệm thiết lập kết nối và cấp quyền tương tác với blockchain.
Để làm việc với smart contract này, ta sẽ cần một instance Web3 mới. Khi tạo instance này, cần chỉ định provider ta muốn sử dụng.
Vì đang sử dụng MetaMask làm proxy nên hãy dùng provider window.ethereum được đưa vào bởi tiện ích mở rộng MetaMask.
Khi truy cập trình duyệt và tải trang (bằng file hoặc trình duyệt web), ta sẽ thấy luồng ủy quyền MetaMask như sau:
Cấp quyền kết nối cho app thông qua MetaMask
Hãy nhấn Next và Connect.
Truy cập vào smart contract
Đến lúc này, code đã có quyền truy cập để tương tác với blockchain.
Tạo một chức năng mới để tạo một contract instance phù hợp với giao diện contract.
Tạo Contract Instance
Để có được một instance của bất kỳ contract nào trên blockchain, tất cả những gì chúng ta cần là: thông số ABI của contract và địa chỉ contract, cả hai đều có thể trích xuất từ Remix.
Để có thông số kỹ thuật ABI của contract, hãy đến Remix trên tab Compile. Compile và nhấp vào ABI.
Sao chép ABI specification của contract
Nút này sẽ sao chép thông số ABI cho contract dưới dạng một JSON array trên clipboard mà ta có thể sử dụng trực tiếp như một phần của tham số đầu tiên.
Tham số thứ hai là địa chỉ contract đã triển khai, có thể lấy từ Remix tại thời điểm triển khai hoặc Etherscan.
Sao chép địa chỉ contract từ Remix
Sao chép địa chỉ contract từ Remix
Code chức năng hoàn chỉnh cho contract này sẽ như sau:
Code chức năng hoàn chỉnh cho Contract. Xem code gốc ở đây
Sau khi hoàn tất, ta có thể chỉ cần gọi loadContract từ hàm loader:
Gọi loadcontract từ hàm loader
Đọc các giá trị từ smart contract
Nay ta đã sẵn sàng để bắt đầu gọi các chức năng của smart contract và sẽ bắt đầu bằng cách lấy coolNumber từ contract này.
Có thể lấy dữ liệu từ contract rất nhanh nhờ web3. Đây là một ví dụ để lấy giá trị của biến public coolNumber:
Lấy giá trị của biến public coolNumber. Xem code gốc ở đây
Siêu dễ đúng không?
Sử dụng instance contract từ phần trước, hãy lấy các phương thức và gọi một hàm với tên biến (đây là getter đã được đề cập ở phần đầu), và cuối cùng, sử dụng lệnh call để bắt đầu yêu cầu từ xa.
Cập nhật các giá trị vào smart contract
Cuối cùng, cần đảm bảo rằng ta cũng có thể giao dịch với smart contract.
Do đó, hãy hiển thị một instance bằng cách truy cập hàm setter để thay đổi coolNumber được lưu trữ trong contract.
Chức năng change sẽ chỉ định một số ngẫu nhiên mới và lưu nó trên blockchain:
Truy cập hàm setter để thay đổi coolNumber. Xem code gốc ở đây
Có hai điều cần chú ý:
Đầu tiên, chúng ta đề cập đến một hàm getCurrentAccount() hiện chưa được định nghĩa. Ta sẽ làm việc này sau.
Thứ hai là cách gọi setter. Hãy chú ý đến dòng gọi phương thức setCoolNumber từ contract, nó trông hơi khác so với những gì đã làm cho caller:
Cách gọi setter
Thay vì sử dụng phương thức call, ta đang sử dụng phương thức send. Ta cần xác định tài khoản người gửi. Tại sao? Phải cần một giao dịch để thay đổi các giá trị trên blockchain. Như đã nói, một giao dịch yêu cầu tài khoản từ và đến phải hợp lệ – từ người khởi tạo giao dịch và trong trường hợp này, là địa chỉ của smart contract này.
Có thể sử dụng bất kỳ tài khoản nào làm từ giá trị không? Không! Đó phải là tài khoản bạn có quyền truy cập (và trong trường hợp này, tài khoản được đăng ký trên ví MetaMask của bạn), vì bạn sẽ cần ủy quyền giao dịch và xác nhận hóa đơn tiền gas.
Vấn đề đã được giải quyết, hãy xây dựng phương thức getCurrentAccount():
Xây dựng phương thức getCurrentAccount
Web3 thực sự tuyệt vời. Mọi người có thể tương tác với blockchain và ví của mình, vì vậy có thể thông qua Web3 để yêu cầu thông tin về các tài khoản đã đăng ký trên ví. Trong trường hợp này, chỉ cần lấy tất cả và sử dụng tài khoản đầu tiên để thực hiện các giao dịch.
Vận dụng những gì đã học
Tôi đã tải code lên GitHub gist để bạn so sánh và tham khảo. Hãy thử xây dựng dự án nhỏ nhưng thú vị này nào!
Application Flow
Nếu thành công, bạn hãy comment phía dưới cho Gambaru biết nhé!
Nếu bạn đang tìm danh sách các công cụ CSS giúp việc học và thành thục CSS trở nên dễ dàng và hiệu quả hơn, đây là bài viết dành cho bạn.
CSS là một trong những nền tảng cơ bản của lập trình web. Tuy nhiên, để hiểu thấu đáo về cách vận hành CSS lại không hề đơn giản.
Làm thế nào để code CSS với sự trợ giúp của các công cụ chuyên dụng cũng như học về CSS trong môi trường tương tác?
Hãy khám phá cùng Gambaru!
Công cụ tạo CSS trực tuyến
1. EnjoyCSS
Công cụ cực kỳ đơn giản này được coi là vị cứu tinh cho web developer đang mày mò CSS, cho phép thiết kế các element với UI đơn giản và đưa ra output phù hợp.
EnjoyCSS giảm thiểu thời gian và công sức cho lập trình viên để tạo các style phức tạp vì nó rất dễ sử dụng.
Đồng thời, bạn không bắt buộc phải có nền tảng quá sâu để hiểu về CSS phức tạp.
EnjoyCSS mang đến sự thay đổi quy trình làm việc đáng kể.
2. CSS Arrow Please!
CSS Arrow Please! giúp tạo và xuất code cho các hộp với một mũi tên và có thể tùy chỉnh mũi tên kéo dài từ bất kỳ phía nào bạn muốn.
CSS Arrow Please! giúp tạo và xuất code cho các hộp với một mũi tên
Mặc dù điều này nghe có vẻ khá phức tạp để viết code từ đầu, nhưng công cụ này giúp chúng ta nhận được code chỉ sau vài cú nhấp chuột.
Khi nhận được, bạn có thể bắt đầu sử dụng code đó và thực hiện những thay đổi nhỏ, như thêm shadow chẳng hạn.
3. CSSmatic
CSSmatic có giao diện người dùng đơn giản và trực quan.
Công cụ tất cả trong một này cung cấp những tính năng như:
Tạo gradient: Ta có thể sử dụng nhiều màu sắc và độ mờ để có được độ chuyển màu gradient đẹp đáng kinh ngạc.
Border radius: Siêu dễ sử dụng và siêu tiết kiệm thời gian. Tất cả các đường viền được chọn có thể được thay đổi cùng một lúc.
Noise texture: Tạo các background pattern tinh tế với các pixel chất lượng thấp và bị nhiễu, thay đổi màu sắc, giá trị và đồng thời xem trước được kết quả trong thời gian thực.
Box Shadow: Thay đổi độ mờ, màu sắc và kích thước đổ bóng – mọi thứ bạn cần để tạo bóng tuyệt vời cho 1 vật thể.
Tất cả những điều này có sẵn trên CSSMatic với một giao diện người dùng đơn giản và trực quan. Đây chắc chắn là một công cụ buộc phải có.
4. Patternizer và Patternify
PatterNizer
Cả hai công cụ này cho phép tạo ra các pattern tuyệt vời với CSS trên giao diện thân thiện người dùng.
Với sự trợ giúp của Patternizer và Patternify, bạn có thể tạo các pattern thú vị có thể dễ dàng áp dụng trên trang web của mình do nó được viết trực tiếp bằng CSS.
Công cụ học CSS trực tuyến
1. CSS Grid
Khám phá 25 video bổ ích từ CSS Grid!
Trang web cung cấp một khóa học ngắn bốn giờ để hiểu được nền tảng căn bản về CSS Grid.
Khóa học hoàn toàn miễn phí này được sáng tạo bởi developer nổi tiếng – Wes Bos.
Hiện đang có tổng cộng 25 video đang chờ bạn mày mò và khám phá đấy.
2. Grid Garden
Vừa làm vườn vừa viết code cùng Grid Garden!
Trò chơi tương tác Grid Garden nhắc bạn phải viết CSS code để trồng và chăm sóc vườn cà rốt của riêng mình.
Thật thú vị phải không?
Cách học này đảm bảo người dùng học được những điều cơ bản về CSS Grid theo một cách không hề khô khan chút nào.
Trò chơi bao gồm 28 cấp độ, mỗi cấp độ yêu cầu người dùng viết một CSS code để đáp ứng từng yêu cầu cụ thể.
3. Flexplorer
Một ứng dụng hữu ích để học CSS.
Là một ứng dụng đơn giản, Flexplorer cho phép bạn mày mò nhiều tính năng Flexbox khác nhau và xem kết quả trực tiếp trên màn hình cùng với code.
Bạn cũng có thể chỉnh sửa văn bản trong các hộp và xem cách bố trí của các hộp này. Cách học mới lạ này hướng đến làm cho việc học dễ dàng và thuận lợi hơn.
4. Image Effects with CSS
Một công cụ học CSS bổ ích khác đáng để tìm hiểu.
Công cụ tuyệt vời này là sản phẩm của Bennett Feely, cũng là nhà sáng tạo Flexplorer.
Là một công cụ thực sự hữu ích, Image Effects with CSS cho phép người dùng thử nghiệm các thuộc tính CSS, như background-blend-mode, mix-blend-mode và filter để thao tác và tạo ra những hình ảnh tuyệt đẹp.
Những lần gặp khó khăn khi code là những lần ta tích lũy kinh nghiệm, nhận ra được các mẫu có tính lặp lại và khám phá những chiến lược nhất định. Nếu phân loại được đoạn code và những vấn đề tương tự sẽ giúp ích rất nhiều cho lập trình viên.
Tập trung giải quyết vấn đề để cải thiện kỹ năng lập trình. Ảnh: lloorraa – Pixabay
Việc học giải quyết vấn đề theo hệ thống như vậy đã được thảo luận từ rất lâu.
Gambaru xin giới thiệu với các bạn một trong những nhà toán học tuyệt vời đã chia sẻ về vấn đề này, George Polya, qua cuốn sách nổi tiếng How to solve it, a new aspect of mathematical method xuất bản lần đầu năm 1945.
Không rõ George Polya có mong đợi lập trình viên thế kỷ 21 đọc được tác phẩm toán của mình hay không, nhưng tôi mong các bạn nhận ra được những góc nhìn của ông có giá trị đến thế nào.
Nhà toán học George Polya. Ảnh: Alchetron
Sách How to Solve it – A new aspect of mathematical method viết bởi George Polya. Ảnh: Amazon
Giải quyết vấn đề không phải là một năng khiếu
“Giải toán là một kỹ năng thực tế như bơi lội. Chúng ta thành thục được bất kỳ kỹ năng nào bằng cách bắt chước và thực hành. Khi tập bơi, bạn bắt chước theo cách mọi người dùng tay và chân để giữ cho đầu ở trên mặt nước và cuối cùng, bạn biết bơi nhờ tập luyện. Khi tập giải toán, bạn quan sát và bắt chước những gì người khác làm khi giải toán và cuối cùng, bạn biết giải toán nhờ thực hành.”
– George Polya, How to solve it
Giải quyết vấn đề không chỉ là về “trí óc”
“Dạy giải toán chính là sự rèn luyện ý chí. Để giải quyết những bài khó, người học sẽ học cách kiên trì vượt qua thất bại, trân trọng những tiến bộ nhỏ, chờ đợi ý tưởng cần thiết và tập trung hết sức khi ý tưởng xuất hiện.”
– George Polya, How to solve it
Quyết tâm và cảm xúc đóng một vai trò quan trọng khi giải quyết các vấn đề khó.
Quy trình giải quyết vấn đề
Bất cứ khi nào thực hiện quá trình giải quyết vấn đề, hãy ghi nhớ bốn bước sau:
Hiểu vấn đề
Lập kế hoạch
Thực hiện kế hoạch
Nhìn lại và đánh giá
1. Hiểu vấn đề
“Thật ngớ ngẩn khi trả lời một câu hỏi bạn không hiểu. Thật đáng buồn khi làm việc để ra một kết quả bạn không mong muốn.” – George Polya, How to solve it. Nguồn ảnh: Rawpixel
Trước khi đi tìm giải pháp, cần phải trình bày được tất cả các yếu tố của vấn đề để hiểu nó rõ hơn.
Bạn có thể nêu vấn đề trong một câu không?
Bài tập nhỏ này rất hữu ích: thuyết phục bản thân rằng bạn đã hiểu mục tiêu và không tốn quá nhiều năng lượng để hiểu nó nữa khi đang tập trung giải quyết vấn đề.
Như được đề cập trong sách The Pragmatic Programmer, khi lập trình viên debug với “vịt cao su” chính là buộc bản thân phải hiểu rõ vấn đề để có thể dạy nó cho người khác.
Kỹ thuật debug đỉnh cao với vịt cao su: Bạn có giải thích được vấn đề cho người khác
Có những ràng buộc nào cần phải đáp ứng không?
“Trước hết, hãy hiểu vấn đề một cách tổng thể. Từ đó, ta mới có thể đánh giá những điểm cụ thể nào là quan trọng nhất. Sau khi xem xét một hoặc hai điểm trọng yếu, ta mới có thể đánh giá xem chi tiết nào đáng để điều tra kỹ hơn. Hãy đi vào sâu chi tiết và phân tích vấn đề dần dần, nhưng không đi xa hơn mức mình cần.” – George Polya, How to solve it. Ảnh: Freepik
Những hạn chế trong vấn đề bạn đang giải quyết là gì?
Hãy viết chúng ra. Nó có thể là một comment phía trên dòng đầu tiên của một hàm bạn viết, một danh sách các gạch đầu dòng trên đầu tài liệu thiết kế.
Điều quan trọng là phải tập trung vào chúng khi cố gắng tìm giải pháp.
Gỡ bỏ nhiều ràng buộc khỏi bộ não cũng là một cách loại bỏ một số quả bóng khi tâm trí ta chơi trò “tung hứng” trong khi cố gắng đưa ra một ý tưởng hay.
Ngoài ra, hãy cẩn thận nếu có quá nhiều ràng buộc.
Theo Polya, nếu xem xét quá nhiều chi tiết cùng một lúc, bạn có thể lạc lối. Chúng có thể khiến bạn mất tập trung vào điểm chính yếu hoặc thậm chí không nhìn thấy điểm chính yếu đó.
Bạn có thể vẽ hình minh họa hay một hệ thống ký hiệu phù hợp?
Vẽ minh họa hay hệ thống ký hiệu “Một bước quan trọng khi giải toán là chọn hệ thống ký hiệu. Điều này cần được thực hiện một cách cẩn thận. Làm được ta sẽ tiết kiệm thời gian cho sau này do tránh được những do dự và nhầm lẫn không đáng.” – George Polya, How to solve it. Nguồn ảnh: Sarah Pflug – Burst
Các bản vẽ hay phác thảo sẽ giúp bỏ bớt một số suy nghĩ ra giấy và tạo nhiều khoảng trống hơn cho bộ não tập trung vào những phần khó.
Hãy chọn hệ thống ký hiệu giúp bạn hiểu rõ mọi thứ hơn: diagram, flowchart….
2. Lập kế hoạch
“Ta có kế hoạch khi biết, hoặc ít nhất là biết sơ bộ, mình phải thực hiện những phép tính, thuật toán hoặc cấu trúc nào để tìm ra lời giải. Con đường từ hiểu vấn đề đến hình thành một kế hoạch có thể dài và quanh co. Thành tựu chính khi tìm ra giải pháp là hình thành ý tưởng về một kế hoạch.” – George Polya, How to solve it. Nguồn ảnh: ThisIsEngineering – Pexels
Giải quyết vấn đề trên giấy trước. Việc viết code luôn có vẻ dễ dàng hơn trong đầu và trở nên phức tạp hơn nhiều khi làm nó chạy được.
Đừng làm cả hai việc cùng một lúc. Đầu tiên, hãy giải quyết vấn đề. “Chạy thử” một ví dụ trên sổ hoặc trên pseudocode. Sau đó, chạy trên máy.
Bạn có biết một vấn đề liên quan?
Bạn cần biết ít nhất loại vấn đề hoặc nhóm vấn đề bạn đang giải quyết. Đối với dân phần mềm, hãy thử trả lời những câu hỏi sau:
Đây có phải là vấn đề kiến trúc không?
Có những mẫu kiến trúc nào thường được sử dụng trong kịch bản này không?
Vấn đề này có nhiều hơn ở cấp độ của một giải thuật không?
Có giải thuật đã được chứng minh có thể giải quyết loại vấn đề này không?
Khi có thể tìm thấy một vấn đề liên quan đến vấn đề của mình và đã được giải quyết trước đó, bạn nên ăn mừng.
Đặt tiếp câu hỏi: “Mình có thể sử dụng nó không?”
Nhiều vấn đề có thể có một số điểm chung, nhưng những vấn đề có chung các yêu cầu hoặc nền tảng cốt lõi nhất có lẽ sẽ hữu ích nhất.
Bạn có thể trình bày lại vấn đề được không?
Bạn có thể nhìn nhận vấn đề ở một góc độ khác? Có thể bỏ một phần điều kiện hoặc một số yêu cầu không? Có thể nêu vấn đề này theo một kịch bản cụ thể hơn không?
Nếu đang viết các bài test, hãy thử nghĩ đến các ví dụ đơn giản được tạo ra chỉ bởi các điều kiện cụ thể của vấn đề để tìm ra giải pháp cuối cùng, tổng quát hơn.
Điều này dẫn chúng ta đến…
Nếu không thể giải quyết vấn đề được đề xuất, hãy cố giải quyết một số vấn đề liên quan trước tiên
Hoặc một vấn đề liên quan và đơn giản hơn.
Giống như viết phần mềm hiệu quả, việc thực hiện giải quyết vấn đề hiệu quả có thể được coi là một quá trình mang tính tịnh tiến.
Đừng cố làm mọi thứ cùng một lúc.
Xây dựng code cuối cùng hoặc thậm chí là các sơ đồ và ý tưởng thiết kế hệ thống là một quá trình sẽ mang lại lợi ích rất nhiều từ việc thực hiện điều tương tự cho các vấn đề quy mô nhỏ hơn.
3. Thực hiện kế hoạch
“Đề ra phương án, hình thành ý tưởng giải pháp không hề đơn giản. Ta cần rất nhiều yếu tố để thành công: kiến thức tích lũy, thói quen tư duy, sự tập trung và may mắn. Thực hiện kế hoạch lại dễ hơn nhiều; yếu tố chủ chốt là kiên nhẫn.” – George Polya, How to solve it. Nguồn ảnh: Pixabay
Phiên bản dành cho lập trình viên của câu trên là “Nghĩ trước, code sau”. Khi đã hiểu các bước của giải thuật hoặc thiết kế hệ thống, việc triển khai sẽ dễ dàng hơn rất nhiều.
Polya cho rằng những người giải toán giỏi có khả năng kiểm tra từng bước trong giải pháp sau khi hoàn thành và chất vấn từ đầu đến cuối.
Chỉ một dòng suy nghĩ về phân tích, phép toán sai sẽ làm hỏng mọi thứ.
Điều này có vẻ không mang đến nguy hiểm tức thì trong lập trình phần mềm, nhưng nó có thể là nguy hiểm chí mạng, vì bug nghiêm trọng sẽ xuất hiện trong thời điểm tồi tệ nhất – và có thể trong trường hợp rất cụ thể.
Điều này có nghĩa là cần có phạm vi kiểm thử tốt.
Nếu không kiểm thử, bạn sẽ không chất vấn, cứ tự tin coi giải pháp của mình là hoàn hảo.
Rất hữu ích khi có tư duy “Nó sẽ có lỗi chứ?” và liên tục đưa ra tất cả các kịch bản thất bại khác nhau trong giải pháp của mình và tư duy này sẽ được thể hiện rõ trong các bài test phần mềm.
4. Nhìn lại
“Ngay cả học sinh khá giỏi, khi đã có được lời giải bài toán và viết xong các lập luận, các bạn liền đóng tập lại. Các bạn đã bỏ lỡ một giai đoạn quan trọng. Khi nhìn lại bài giải, xem xét và nhìn nhận lại kết quả và con đường dẫn đến nó, các bạn có thể củng cố kiến thức và phát triển khả năng giải quyết vấn đề của mình.” – George Polya, How to solve it. Nguồn ảnh: Reshot
Không nhìn lại và đánh giá sự đánh đổi của giải pháp thường xảy ra khi mọi thứ được thực hiện trong vội vàng.
Nếu đó là một giải thuật, bạn có thể nói rõ độ phức tạp về thời gian và không gian không? Code có đọc tốt không?
Nếu đang đưa ra quyết định sẽ có tác động đến toàn hệ thống, hãy ghi ra những đánh đổi.
Dành một giờ để xem xét lại kết quả công việc sẽ giúp bạn tiết kiệm hơn rất nhiều sau này.
Bạn có thể nghỉ ngơi rồi quay lại với nó sau. Việc đắm chìm sâu vào vấn đề đang giải quyết có thể sẽ khiến bạn quên mất những chi tiết liên quan.
Ngoài ra, giải pháp cho vấn đề cụ thể đó có thể được tổng quát hóa để được sử dụng trong nhiều tình huống.
Dùng sự nhạy bén và tư duy cẩn thận để tạo ra những abstraction mới là một cách giải quyết vấn đề đó cho những người khác đối mặt với nó sau này.
Kết
Dù là một cuốn sách dạy giải toán, nhưng How to solve it của George Polya với những lời khuyên vượt thời gian của ông lại hữu ích với dân lập trình như tôi khi tập giải quyết vấn đề bởi lập trình thực sự là một quá trình sử dụng nhiều tư duy và kỹ năng giải quyết vấn đề hiệu quả.
Làm việc từ xa và giãn cách xã hội ảnh hưởng lớn đến hầu hết mọi người; song khi nói đến chuyển đổi kỹ thuật số và phần mềm, mọi thứ vẫn diễn ra sôi nổi hơn bao giờ hết.
Đại dịch đã buộc rất nhiều doanh nghiệp phải thay đổi và thích ứng sự hiện diện trực tuyến của mình bằng cách này hay cách khác.
Đồng thời, các dịch vụ phát triển phần mềm trở nên ngày càng quan trọng.
Đây là lý do tại sao việc cập nhật các xu hướng hiện tại đang diễn ra trong ngành là vô cùng cần thiết.
5 Xu hướng phát triển phần mềm thống trị năm 2021
Dưới đây là một số xu hướng dự đoán sẽ thống trị lĩnh vực phát triển phần mềm cho năm 2021. Hãy cùng Gambaru cập nhật và thảo luận!
1. Điện toán không máy chủ (Serverless Architecture)
Serverless Architecture. Ảnh: AWS Amazon
Điện toán không máy chủ là sự kết hợp của Chức năng như một Dịch vụ (stateless Function as a Service – FasS), chẳng hạn như AWS Lambda và Máy chủ lưu trữ như một Dịch vụ (stateful storage Backend as a Service – BaaS), chẳng hạn như AWS S3.
“Theo định nghĩa của chúng tôi, một dịch vụ được coi là không có máy chủ khi nó cho phép thanh toán dựa trên mức độ sử dụng, tự động mở rộng quy mô mà không cần cấp quyền thủ công.”
– A Berkeley View on Serverless Computing
Điện toán không máy chủ là nơi các dịch vụ đám mây được quản lý hoàn toàn. Nó cho phép ta viết code để phát triển ứng dụng mà không cần quản lý hoặc duy trì các cơ sở hạ tầng, chẳng hạn như máy chủ.
Điện toán không máy chủ hỗ trợ phương thức thanh toán: dùng bao nhiêu thanh toán bấy nhiêu. So với các nền tảng điện toán truyền thống, điện toán không máy chủ cho phép người dùng lựa chọn phương thức thanh toán dựa trên các tình huống cụ thể, giúp giảm chi phí.
Điện toán không máy chủ hướng đến ứng dụng, khác với các nền tảng điện toán hướng đến tài nguyên, chẳng hạn như các máy ảo và container.
Với lập trình đa nền tảng, cùng một đoạn code sẽ có khả năng chạy được trên nhiều nền tảng khác nhau.
Đa nền tảng ngày càng trở nên phổ biến vì ta có thể sử dụng lại rất nhiều code của dev và các công việc khác.
Ví dụ, một ứng dụng có thể dùng Kotlin/JVM cho back-end và Kotlin/JS cho front-end.
Điều này mang đến một số lợi ích: ngoài cú pháp, nó còn cho phép chia sẻ library và paradigm (chẳng hạn như sử dụng coroutines), trên cả front-end và back-end.
Sử dụng Kotlin cũng giúp viết các lớp và hàm có thể được sử dụng cho cả JVM và JS.
Ta còn có thể sử dụng KMM (Kotlin Multiplatform Mobile) để tạo một ứng dụng di động hoạt động trên cả iOS và Android!
Kotlin Multiplatform Mobile. Nguồn ảnh: Kotlin
Ta hoàn toàn có thể phát triển một ứng dụng hoàn chỉnh chỉ sử dụng một ngôn ngữ lập trình. Nguồn ảnh: Freepik
3. Công nghệ Low-Code/No-Code
Lập trình low-code cho phép doanh nghiệp nhanh chóng xây dựng và triển khai các ứng dụng phần mềm mà không cần đến một lập trình viên chuyên nghiệp.
Thay vì viết từng dòng code cho một ứng dụng nhất định, người dùng của nền tảng low code hoặc no code có thể xây dựng các dự án bằng giao diện point-and-click.
Bằng cách này, doanh nghiệp có thể tạo website từ các building block được lập trình sẵn, thiết lập trao đổi dữ liệu với các giải pháp CRM, bổ sung tính năng thanh toán trực tuyến qua Stripe và thậm chí thu thập phản hồi của khách hàng qua Google Forms hoặc một nhà cung cấp khác.
Các doanh nghiệp có thể tiết kiệm thời gian và nguồn lực với công nghệ low code/no code. Ảnh: Rawpixel
Gartner dự đoán rằng hơn một nửa số doanh nghiệp vừa đến lớn sẽ áp dụng các nền tảng ứng dụng low-code trong vòng hai năm tới.
Các công cụ như Salesforce Flow Builder giúp người dùng tạo quy trình làm việc kỹ thuật số từ đầu đến cuối.
Công cụ này cũng tự động hóa các quy trình.
Nó có các thành phần và dịch vụ để người dùng lựa chọn và sử dụng lại.
Cộng đồng các nhà phát triển ứng dụng của Salesforce Flow Builder là một cộng đồng lớn, được hỗ trợ tích cực.
4. Sự thống trị của Native App
Native App mang đến trải nghiệm người dùng xuất sắc. Ảnh: cottonbro – Pexels
Trước xu hướng cross-platform và sự nổi lên của Flutter hiện nay, sẽ thật lạ khi tôi đưa ra dự đoán trên; nhưng quả thực, khi nói đến việc cung cấp trải nghiệm người dùng tốt hơn và hiệu suất mạnh mẽ hơn, bạn phải sử dụng native app.
Ngày càng có nhiều doanh nghiệp đầu tư vào các ứng dụng gốc cho iOS và Android để mang đến cho người dùng trải nghiệm xuất sắc.
Tuy nhiên, tôi thực sự cảm thấy rằng Fluttercó một tương lai rất hứa hẹn. Flutter đã có cú chạy đà tốt và kết quả rất khả quan.
Tham khảo thêm bài so sánh chuyên sâu về Flutter và các ứng dụng gốc tại đây.
Nếu là dev về native app và chịu khó học thêm về Flutter thì bạn sẽ càng có nhiều lợi thế.
Với sự thống trị ngày càng tăng của hệ điều hành iOS và Android trên thị trường, việc đầu tư vào phát triển ứng dụng dường như khó mà suy giảm.
5. AI và ML
Artificial Intelligence – trí tuệ nhân tạo và Machine Learning – học máy đã trở thành tâm điểm nóng trong một thời gian dài – và sẽ tiếp tục như vậy vì rất nhiều tiềm năng khả thi chúng mang lại.
Tiềm năng vô hạn từ Artificial Intelligence và Machine Learning. Nguồn ảnh: Alex Knight – Unsplash
Chúng ta chỉ mới bắt đầu khám phá các khả năng đó mà thôi.
Ví dụ, ta đang hướng tới một tương lai với xe hơi không người lái, hay sử dụng drone không người lái để giám sát tình hình giãn cách xã hội trong thời kỳ đại dịch.
Các công cụ và nền tảng AI đã sẵn sàng để giúp các doanh nghiệp nắm bắt cách khách hàng của mình đang thích ứng ra sao với thực tại mới hậu đại dịch.
“Nghiên cứu AI mới nhất của chúng tôi cho thấy 86% doanh nghiệp hiện đang gặt hái được những lợi ích từ trải nghiệm khách hàng tốt hơn thông qua AI và 25% doanh nghiệp áp dụng AI sẽ có doanh thu tăng trong năm 2021 nhờ vào công nghệ này. Đại dịch COVID-19 đã hé mở những giá trị của AI, hoàn toàn phù hợp với việc cải thiện các nhiệm vụ liên quan đến lập kế hoạch nguồn nhân lực, lập mô phỏng và dự báo nhu cầu.”
– Rohan Amin, CIO của Chase
Trong năm 2021 này, khả năng bổ sung các năng lực AI tiên tiến vào các dự án và quy trình kinh doanh sẽ là cực kỳ quan trọng đối với các doanh nghiệp, đặc biệt với doanh nghiệp mong muốn đạt được những bước tiến đột phá trong ngành.
Mục đích chính của thuật toán tìm kiếm là để kiểm tra một phần tử hoặc truy xuất nó từ bất kỳ cấu trúc dữ liệu nào. Các thuật toán tìm kiếm này được phân loại thành hai phần, thường là dựa trên kiểu tìm kiếm.
1. Tìm kiếm tuần tự (Sequential search)
Danh sách hoặc mảng được duyệt qua (traverse) tuần tự và mọi phần tử đều được kiểm tra. Ví dụ: Tìm kiếm tuyến tính
2. Tìm kiếm theo khoảng thời gian (Interval search)
Được thiết kế cho các cấu trúc dữ liệu được sắp xếp và hiệu quả hơn giải thuật tìm kiếm tuần tự vì giải thuật này liên tục nhắm đến trung tâm của cấu trúc dữ liệu và chia đôi không gian tìm kiếm. Ví dụ: Tìm kiếm nhị phân
Trong bài viết này, chúng ta sẽ thảo luận về hai thuật toán tìm kiếm: tìm kiếm tuyến tính và tìm kiếm nhị phân.
Tìm kiếm tuyến tính (Linear Search)
Tim kiếm tuyến tính (Linear search). Ảnh: GeeksforGeeks
Giải thuật này rất đơn giản, độ phức tạp là O(N). Một tìm kiếm tuần tự được thực hiện cho từng phần tử trong cấu trúc dữ liệu.
Nếu kết quả phù hợp được tìm thấy, nó sẽ được trả về; nếu không, quá trình tìm kiếm sẽ tiếp tục cho đến hết cấu trúc dữ liệu.
Cách tìm kiếm tuyến tính hoạt động
Giả sử ta muốn tìm giá trị x trong mảng A.
Cách tìm kiếm tuyến tính hoạt động
Pseudocode
Tìm kiếm tuyến tính – Pseudocode
Java code
Tìm kiếm tuyến tính – Java code
Tìm kiếm nhị phân (Binary Search)
Tìm kiếm nhị phân – Binary search. Ảnh: GeeksforGeeks
Đây là một giải thuật tìm kiếm nhanh độ phức tạp là O(logN).
Giải thuật O(logN) được xem là có tính hiệu quả cao vì tỷ lệ giữa số lượng hoạt động so với kích thước của input giảm và có xu hướng bằng không khi N tăng lên. (N là kích thước input tính bằng đơn vị bit cần để đại diện cho input đó).
Việc thu thập dữ liệu phải ở dạng được sắp xếp để giải thuật này hoạt động chính xác.
Cách tìm kiếm nhị phân hoạt động
Tìm kiếm nhị phân tìm kiếm một phần tử cụ thể bằng cách so sánh với phần tử nằm ở ngay chính giữa của mảng.
Nếu kết quả tìm kiếm khớp, thì index của phần tử này sẽ được trả về. Nếu kết quả không khớp, nó sẽ kiểm tra xem phần tử ở giữa có lớn hơn item này hay không, sau đó nó sẽ tìm kiếm phần tử này trong mảng con bên trái của phần tử ở giữa.
Trường hợp phần tử ở giữa nhỏ hơn, nó sẽ tìm kiếm phần tử trong mảng con ở bên phải của phần tử ở giữa. Cho đến khi kích thước mảng con giảm xuống còn 0, quá trình này sẽ tiếp tục tại mảng con.
Để tìm kiếm nhị phân hoạt động, mảng phải được sắp xếp trước.
Giải thuật
Giả sử ta muốn tìm giá trị x trong mảng A đã sắp xếp.
Cách tìm kiếm nhị phân hoạt động
Pseudocode
Tìm kiếm nhị phân – Pseudocode
Java code
Tìm kiếm nhị phân – Jave code
Đây là hai giải thuật tìm kiếm được sử dụng phổ biến nhất. Hãy cùng theo dõi các bài viết tiếp theo và thảo luận cùng Gambaru các giải thuật hữu ích khác.
Doanh nghiệp Nhật dùng AI chống lãng phí thực phẩm
Các công ty Nhật Bản đang tăng cường sử dụng trí tuệ nhân tạo (AI) và các công nghệ tiên tiến khác để giảm thiểu lượng thực phẩm lãng phí và cắt giảm chi phí trong đại dịch COVID-19, đồng thời hướng đến đạt được các mục tiêu bền vững trong quá trình này.
Nhật Bản cần tìm giải pháp cho bài toán lãng phí thực phẩm. Ảnh: Falco Negenman – Unsplash
Báo cáo dữ liệu của chính phủ Nhật cho thấy, việc bỏ hơn 6 triệu tấn rác thải thực phẩm ở quốc gia này khiến nền kinh tế thứ 3 thế giới lãng phí khoảng 2 nghìn tỷ yên (19 tỷ USD) mỗi năm.
Với tình trạng lãng phí thực phẩm trên đầu người cao nhất ở châu Á, chính phủ Nhật Bản vừa ban hành bộ luật mới để giảm một nửa chi phí trước năm 2030, thúc đẩy các công ty tìm kiếm giải pháp cho bài toán trên.
Chống lãng phí thực phẩm bằng công nghệ AI
Lawson Inc
Chuỗi cửa hàng tiện lợi Lawson Inc đã bắt đầu sử dụng AI của công ty DataRobot của Hoa Kỳ để ước tính lượng sản phẩm trên kệ, như cơm nắm onigiri, sandwich trứng và cá ngừ, có thể không bán hết được hoặc cung không đủ cầu.
Lawson đặt mục tiêu giảm lượng hàng dư thừa xuống 30% ở những khu vực có sản phẩm đã tung ra thị trường và muốn giảm một nửa lượng thực phẩm bị lãng phí tại tất cả các cửa hàng của mình vào năm 2030 so với mức của năm 2018.
Xử lý chất thải thực phẩm là chi phí lớn nhất đối với các chủ sở hữu nhượng quyền của Lawson chỉ sau chi phí nhân công.
Suntory Beverage & Food Ltd
Nhà sản xuất đồ uống Suntory Beverage & Food Ltd đang thử nghiệm một sản phẩm AI khác của Fujitsu Ltd để xác định xem các sản phẩm như chai trà ô long và nước khoáng có bị hư hỏng trong quá trình vận chuyển hay không.
Trước đến nay, đây là một nỗ lực tiêu tốn nhiều thời gian của con người.
Với công nghệ AI mới này, Suntory hy vọng có thể nhanh chóng xác định khi nào các chai hộp hoặc nước bên trong đã bị hỏng và cần được trả lại.
Suntory đặt mục tiêu giảm 30-50% lượng hàng hóa bị trả lại, cắt giảm chi phí lãng phí thực phẩm và phát triển một hệ thống tiêu chuẩn chung được đồng thuận giữa các nhà sản xuất thực phẩm khác cũng như các công ty vận chuyển.
Công nghệ giúp đạt mục tiêu phát triển bền vững
Người tiêu dùng Nhật nổi tiếng là kén chọn đang có dấu hiệu ủng hộ phong trào này, đặc biệt là khi đại dịch COVID-19 ảnh hưởng lớn đến thu nhập chung của họ.
Doanh nghiệp sử dụng công nghệ nhằm đạt được mục tiêu phát triển bền vững.
Vào năm 2014, ông Tatsuya Sekito đã thành lập Kuradashi, một công ty thương mại điện tử kinh doanh thực phẩm chưa bán hết với mức giá chiết khấu, sau khi nhận thấy rất nhiều thực phẩm bị lãng phí từ các nhà chế biến thực phẩm khi làm việc cho một công ty thương mại Nhật Bản tại Trung Quốc.
Doanh nghiệp trực tuyến này hiện đang phát triển mạnh một phần do nhu cầu về thực phẩm chưa bán hết với giá rẻ tăng vọt khi người tiêu dùng trở nên có ý thức hơn về chi phí trong bối cảnh đại dịch.
Sekito chia sẻ với Reuters:
Doanh số bán hàng của chúng tôi đã tăng 2,5 lần vào năm ngoái so với năm trước đó, còn lượng thực phẩm dư thừa đã tăng gấp đôi kể từ khi virus corona làm ngưng trệ chuỗi cung ứng thực phẩm.
Kuradashi có mạng lưới 800 công ty, bao gồm Meiji Holdings Co, Kagome Co và Lotte Foods Co, chuyên bán cho Kuradashi tổng cộng 50.000 mặt hàng như gói cà ri ăn liền, sinh tố và rong biển chất lượng cao.
Sekito cho biết:
Người tiêu dùng Nhật Bản thường kén chọn, nhưng chúng tôi thu hút khách hàng bằng cách không chỉ cung cấp sản phẩm giá chiết khấu mà còn cơ hội quyên góp một phần tiền mua hàng cho các tổ chức từ thiện, giúp mọi người nâng cao nhận thức về các vấn đề xã hội.
Các doanh nghiệp khác cũng hợp tác với những công ty thực phẩm trong việc phát triển nền tảng công nghệ mới với mục tiêu cắt giảm lãng phí thực phẩm hòa chung nỗ lực toàn cầu nhằm đạt được các mục tiêu phát triển bền vững (Sustainable Development Goals – SDGs).
NEC Corp đang sử dụng AI không chỉ có thể phân tích dữ liệu như thời tiết, lịch và xu hướng của khách hàng để ước tính nhu cầu mà còn đưa ra lý do cho bản phân tích của mình.
NEC đã triển khai công nghệ này cho một số nhà bán lẻ và nhà sản xuất thực phẩm lớn, giúp họ giảm chi phí từ 15% -75%.
NEC hy vọng sẽ chia sẻ và xử lý dữ liệu thông qua một nền tảng chung giữa các nhà sản xuất, nhà bán lẻ và công ty logistics, nhằm giảm thiểu những trường hợp không tương khớp trong chuỗi cung ứng.
Ryoichi Morita, quản lý cấp cao giám sát quá trình tích hợp kỹ thuật số của NEC cho biết:
Giảm lãng phí thực phẩm không phải là mục tiêu cuối cùng của chúng tôi. Chúng tôi mong rằng dự án này có thể giải quyết những thách thức kinh doanh khác như giảm thiểu chi phí, khắc phục tình trạng thiếu lao động, tinh giản chu trình liên quan đến hàng tồn kho, đơn đặt hàng và hậu cần.
Giao tiếp và điều phối trong phát triển phần mềm ngày càng phức tạp, nên việc bám sát phương pháp truyền thống không còn là lựa chọn tối ưu. Ảnh: Burst
Tháng 2 năm 2021 tròn đúng kỷ niệm 20 năm Tuyên ngôn phát triển Phần mềm Agile – một cuộc cách mạng trên thị trường phần mềm và có tầm ảnh hưởng trên nhiều ngành nghề.
Tuyên ngôn phát triển phần mềm Agile
Ngay cả khi bản tuyên ngôn không thay đổi, việc áp dụng cách hiểu của nó cũng khác nhau ở mỗi nơi.
Trong bài viết này, chúng ta sẽ xem xét khái niệm về Agile, những thực tiễn đã thay đổi theo thời gian và hướng đi của nó trong một thế giới đang thay đổi.
Tuyên ngôn Agile
Phát triển phần mềm theo Agile
Chúng tôi đã tìm ra được những cách thức phát triển phần mềm tốt hơn bằng cách thực hiện và giúp đỡ người khác áp dụng chúng. Qua đó, chúng tôi đánh giá cao:
Cá nhân và sự tương tác hơn là quy trình và công cụ
Phần mềm hoạt động tốt hơn là tài liệu đầy đủ
Sự cộng tác với khách hàng hơn là đàm phán hợp đồng
Phản hồi trước thay đổi hơn là bám sát kế hoạch.
Mặc dù những hạng mục bên phải có giá trị của chúng, chúng tôi vẫn đánh giá cao những hạng mục ở bên trái hơn.
12 Nguyên tắc Agile
12 nguyên tắc Agile. Ảnh: Unsplash
Làm hài lòng khách hàng thông qua việc chuyển giao sớm và liên tục phần mềm có giá trị là ưu tiên cao nhất.
Đón nhận những thay đổi trong yêu cầu, thậm chí thay đổi muộn trong quá trình phát triển. Các quy trình Agile khai thác những thay đổi vì lợi thế cạnh tranh của khách hàng.
Thường xuyên chuyển giao phần mềm hoạt động tốt tới khách hàng, từ vài tuần đến vài tháng, khoảng thời gian càng ngắn càng tốt.
Đội ngũ business và đội ngũ lập trình phải cùng làm việc hàng ngày xuyên suốt dự án.
Xây dựng dự án với những cá nhân có động lực cao. Mang đến cho họ môi trường và sự hỗ trợ cần thiết, đồng thời tin tưởng họ có thể hoàn thành tốt công việc.
Phương pháp hiệu quả nhất để truyền đạt thông tin là đối thoại trực tiếp.
Phần mềm hoạt động tốt là thước đo chính của tiến độ dự án.
Các quy trình Agile thúc đẩy phát triển bền vững. Các nhà đầu tư, lập trình viên, và người dùng nên luôn duy trì nhịp độ phát triển liên tục.
Liên tục quan tâm đến các công nghệ và thiết kế tiên tiến để gia tăng tính linh hoạt.
Sự đơn giản – nghệ thuật tối đa hóa lượng công việc chưa hoàn thành – là vô cùng quan trọng.
Các kiến trúc, yêu cầu, và thiết kế tốt nhất được tạo ra bởi các team tự quản.
Theo định kỳ, đội ngũ phát triển cùng nghiệm lại cách làm việc hiệu quả hơn, sau đó sẽ điều chỉnh và thay đổi hành vi cho phù hợp.
Những thay đổi trong quy trình phát triển phần mềm Agile
Trong một thế giới đang thay đổi, kỳ vọng về phần mềm ngày càng tăng và lập trình viên độc lập nay đã được thay thế bằng nguyên một đội ngũ lập trình.
Giao tiếp và điều phối trong phát triển phần mềm ngày càng phức tạp, nên việc bám sát phương pháp truyền thống không còn là lựa chọn tối ưu. Ảnh: Burst
Trong bài “20 Jahre Agiles Manifest – Deftiv den Kinderschuhen entwachsen”, Jutta Eckstein (business coach, change manager) đưa ra danh sách những thay đổi về phát triển phần mềm theo Agile. Trích đoạn:
Nếu team đảm bảo rằng các story luôn có cùng size thì việc estimate từng story sẽ không cần thiết nữa.
Trong một thời gian dài, các story chỉ được công nhận nếu chúng tương ứng với format Connextra (“As a …, I want …, so …”). Thay vào đó, giờ đây, các story chỉ đóng vai trò như một loại ghi nhớ cho một cuộc hội thoại về nội dung của story (và không có format cho các bản ghi nhớ hội thoại).
Flow ngày càng trở nên quan trọng. Điều này bao gồm thực tế là các sprint hay iteration thường không còn đóng vai trò quan trọng nữa. Điều này có nghĩa là các team không lập kế hoạch hai tuần một lần, mà phối hợp hàng ngày theo Kanban những gì có thể hoàn thành và những gì được bổ sung sau từ backlog. Như vậy, việc lập kế hoạch, phản ánh và điều chỉnh có tính liên tục hơn.
Với sự gia tăng của tốc độ phát triển phần mềm, những trào lưu mới như DevOps đã góp phần tạo ra một cách nhìn tốt hơn về phát triển phần mềm trong một bối cảnh rộng hơn. Tuy nhiên, không phải lúc nào người ta cũng hiểu được ý tưởng cơ bản của DevOps. Ngày càng có nhiều công ty đặt đội ngũ DevOps bên cạnh đội ngũ phát triển hoặc đảm nhiệm vai trò kỹ sư DevOps. Họ bỏ qua thực tế rằng DevOps là một thái độ, một văn hóa chứ không phải một chức năng, vai trò hay nhiệm vụ đặc biệt.
Jutta Eckstein bổ sung rằng một vài phương pháp vốn là cơ sở của bản tuyên ngôn vẫn còn đóng một vai trò nhất định ở thời điểm hiện tại.
Ví dụ: crystal method (tập trung vào cá nhân và sự tương tác) hoặc phát triển phần mềm mang tính thích ứng.
Extreme Programming (XP) phát triển trong những năm gần đây vì người sáng lập Kent Beck đã quay trở lại sau khi ông vắng bóng trong nhiều năm vì lý do cá nhân.
Cũng cần lưu ý rằng có một sự thiển cận trong nguyên tắc thứ 3 của Tuyên ngôn Agile khi giới hạn tần suất chuyển giao phần mềm xuống còn “một vài tuần” nhưng DevOps và chu kỳ continuous delivery ngày nay cho phép chúng ta release nhiều phần mềm trong một ngày.
Uncle Bob (Robert Cecil Martin) trả lời cho điểm này như sau:
“Vào thời điểm năm 2001, chúng tôi không thể tưởng tượng sẽ làm được gì nhanh hơn vài tuần. Tom Gilb là người duy nhất trong cộng đồng có thể làm được, nhưng ông ấy không có mặt tại cuộc họp. Chúng tôi nghĩ rằng hai tuần là giới hạn thấp hơn và không ai bận tâm đến việc chất vấn điều này, và rõ ràng đây là điểm thiển cận”.
Tương lai của Agile
Agile không còn chỉ được hiểu trong bối cảnh phát triển phần mềm nữa.
Chúng ta có “Scaling Agile” với niềm tin rằng toàn bộ tổ chức cần hoạt động theo các nguyên tắc Agile.
Agile trong doanh nghiệp hiện là một chủ đề ngày càng nhận được nhiều quan tâm và động lực.
Để áp dụng Agile vào các quy trình truyền thống của doanh nghiệp, Bjarte Bogsnes nhấn mạnh một thách thức lớn trong bài “Chuyển đổi Agile và hiện tượng con voi trong phòng” (tựa gốc: Agile Transformation and the Elephant in the Room).
“Thật khó để mở rộng quy mô Agile bằng cách sử dụng cùng một framework và cùng một ngôn ngữ đã hoạt động rất tốt để chuyển đổi phát triển phần mềm. Đối với các giám đốc điều hành, “Scrum” nghe có vẻ giống như một căn bệnh ngoài da, “Sprint” không chỉ việc chạy nhanh hơn, “Slack” không phải nói về sự lười biếng, còn “continuous delivery” không phải là chỉ đến một dây chuyền lắp ráp hiệu quả. Chúng ta cần một bản dịch, một thứ giúp ban điều hành doanh nghiệp hiểu rõ hơn ý nghĩa của Agile ở cấp độ kinh doanh. Agile trong doanh nghiệp thực sự có ý nghĩa gì trong thực tế?”
Theo Bogsnes, “con voi trong phòng” (một điều hiển nhiên nhưng ai cũng lờ đi) chính là quy trình lập ngân sách.
Vì trước giờ đây được coi là quy luật kinh doanh rồi, nên khó mà thay đổi nó. Nếu nó không được thay đổi, bất kỳ sự chuyển đổi theo hướng Agile nào cũng sẽ gặp khó khăn.
“Quy trình lập ngân sách có lẽ là rào cản cơ bản nhất đối với sự chuyển đổi Agile. Ngân sách hàng năm, quá trình lập ngân sách, và tư duy đằng sau nó đều là phản đề của Agile theo nhiều khía cạnh. Lập ngân sách được xây dựng dựa trên hai giả định cơ bản: tương lai có thể dự đoán được và không thể tin ai được. Còn gì ngược với Agile hơn chứ?”
Nhiều tổ chức trên khắp thế giới đã giải quyết vấn đề này và bổ sung nguyên lý Agile cho các quy trình trong doanh nghiệp bằng cách tuân theo 12 nguyên tắc bên cạnh việc lập ngân sách theo Bjarte Bogsnes.
Thay vì được sử dụng theo nghĩa hẹp của nó là lập kế hoạch và kiểm soát, “ngân sách” có thể là văn hóa lãnh đạo và hệ thống quản lý hiệu suất.
12 nguyên tắc bên cạnh việc lập ngân sách doanh nghiệp theo Agile. Ảnh: Agile Alliance
12 nguyên tắc bên cạnh việc lập ngân sách doanh nghiệp theo Agile (tiếng Việt)