Home Blog Page 217

Bí quyết chọn laptop để lập trình

Việc chọn một cái laptop phù hợp cho lập trình đôi khi là một việc rất khó khăn.

Bởi có quá nhiều lựa chọn khác nhau khiến bạn rối cả trí mỗi khi vào google search về chúng. Không những thế mỗi nhãn hiệu điều có những phiên bản khác nhau với điểm mạnh yếu tùy theo nhu cầu sử dụng của từng người.

Có một sự thật là bạn có thể code hầu như trên mọi loại máy laptop hiện nay. Tuy nhiên, năng suất của bạn sẽ tăng đáng kể nếu dùng laptop đúng theo nhu cầu của mình.

Có nhiều lĩnh vực phát triển, tools và ngôn ngữ khác nhau tùy theo ngành học của bạn. Thế nên không thể nào có một cái máy tính toàn năng, phù hợp với mọi yêu cầu mà giá thành lại rẻ được.

Tôi viết bài này là để dành cho các bạn web developer và chỉ có laptop để làm lập trình.

Sau đây là những lưu ý mà bạn cần phải nghĩ tới trước khi ra quyết định mua máy.

Tính di động

Laptop có đủ thể loại với kích cỡ hình dáng khác nhau. Bạn sẽ cần phải xác định rõ bạn muốn tính di động của laptop đến mức nào.

Nếu không phải mang laptop đi nhiều thì bạn nên chọn cỡ 15-inch. Những loại này thì thường được trang bị ngon lành hơn cũng như thực hiện được nhiều task khác nhau cùng một lúc.

Thế nhưng nếu bạn phải di chuyển rất nhiều thì hãy nên dừng ở mức 13~14 inch thôi. Chúng vừa nhẹ mà lại khá tiết kiệm pin.

Trừ khi bạn bắt buộc phải xài hoặc đó là hàng tặng thì đừng nên mua mấy cái laptop có touch-screen bởi nó chả cần thiết trong khi giá thì bị đội lên rất nhiều

Màn hình

Màn hình của laptop chính là thứ quan trọng nhất, đặc biệt là với programmer. Khi phải phát triển các ứng dụng đồng nghĩa với việc nhìn vào màn hình trong một thời gian dài bởi bạn phải tập trung vào rất nhiều chi tiết khác nhau.

Các Laptop giá rẻ thường có màn hình cỡ 1366 x 768, theo tôi thì chỉ thuộc dạng trung bình là cao nhất rùi. Chả đủ không gian để bạn làm nhiều việc cùng một lúc, đã thể chữ hiển thị cũng không đủ rõ để mắt bạn được dễ chịu mỗi khi đọc.

Còn màn hình 4K thì quá là lãng phí bởi bạn chả cần tới nó, chưa kể nó tốn tiền kinh khủng và ăn pin như hạm.

Nói chung, dù là gì đi nữa đừng bao giờ mua laptop mà có màn hình dưới Full HD 1920 x 1080 (1080p). Nếu có tiền thêm chút cho màn hình phân giải tốt hơn thì càng tốt.

Mà hãy chắc rằng bạn thấy thoải mái khi nhìn vào màn hình, không có gì tệ hơn khi nó phản chíu ánh sáng quá nhiều và trông chẳng khác gì một chiếc gương.

Processing Power (CPU)

CPU ảnh hưởng rất lớn đến hiệu năng của laptop thế nên bạn đừng nên ham rẻ xem nhẹ phần này. Có rất nhiều CPU khác nhau tùy vào nhu cầu của người mua. Một số thông số quan trọng bạn cần biết đến bao gồm cache, số core, frequency cũng như khả năng tỏa nhiệt của chúng.

Thường thì Intel core i5 hoặc i7 processor với frequency 3GHz hoặc hơn là lựa chọn tốt nhất cho bạn.

Memory (RAM)

Tôi không nghĩ bất cứ ai mà muốn theo nghiệp lập trình lại chọn mua laptop với ít hơn 4GB ram. Theo tôi, thấp nhất nên là 8 gb ram, với ngần đó cũng chỉ mới vừa đủ chạy một số ứng dụng khá tốn ram. Còn nếu dư dả thì bạn rất nên mua cái 16GB ram.

Ổ cứng – Dung lượng bộ nhớ

SSD (Solid State Drive) nên là một trong những ưu tiên bạn nên cân nhắc tới bởi sự cải thiện rõ rệt trong hiệu năng khi so sánh với các ổ cứng thông thường khác. Với SSD, tốc độ xử lí của OS, compile code. launch app hay load project đều được tăng rõ rệt.

256GB SSD là một khởi đầu tuyệt vời và nếu bạn điều kiện khá giả thì hãy mua 512GB hoặc 1TB SSD. Tất nhiên SSD không rẻ nên bạn chỉ nên để hệ điều hình và những software quan trọng vào SDD và những thứ khác như game, phim, nhạc, etc vào ổ cứng HDD.

Bàn phím

Bạn đừng xem nhẹ điều này bởi bàn phím là nơi mà bạn dùng để gõ code cả ngày đấy. Thường thì tôi sẽ ưu tiên những bàn phím rộng, thoải mái và có nút bấm nhạy.

Quan trọng nhất là bạn phải ngồi thử xài cái bàn phím trước khi ra quyết định có nên mua nó không. Lưu ý là nó phải khiến bạn cảm thấy thoái mái và không bị vướng víu khi gõ văn bản. Bàn phím có khả năng phát sáng trong đêm cũng khá là hay nếu bạn hay viết code vào đêm.

Thời lượng pin

Có thể không quan trọng mấy nếu laptop của bạn luôn được cắm sạc đầy đủ cũng như chả phải mang đi đâu xa. Dù vậy, tiêu chuẩn bạn nên nhắm tới cũng không ít hơn 6 tiếng.

Đừng nghe lời quảng cáo từ hãng mà hãy lên google tìm đọc những bài review của bên thứ 3 về chúng.

Hệ điều hành

Cái này thì không có gì phải nói, tùy vào nhu cầu của bạn mà nó sẽ khác nhau. Window thì bạn sẽ có khá nhiều lựa chọn nhưng nếu thích macOS thì bạn sẽ bị giới hạn với chỉ các dòng Macbook thôi.

Linux thì chạy tốt trên bất cứ máy nào nhưng bạn nên chọn những máy có hỗ trợ Linux chính thức. Thường thì Dell và System 76  về mặt này làm khá tốt.

Card đồ hoạ chuyên dụng hoặc tích hợp

Card rời không thật sự cần thiết cho việc coding thế nên bạn có thể tiết kiệm bằng cách chọn card on-board và lấy số tiền đó cho SDD hoặc CPU.

Và thế là bạn đã có thể tự tin trong việc kiếm cho mình một “chiến hữu” trong con đường trở thành lập trình viên rồi đấy!

Nguồn: blog.topdev.vn via Medium

 

Bí kíp học Front-end của Grab (Phần 1)

Bí kíp học Front-end của Grab (Phần 1)

Lập trình Front end chưa bao giờ phức tạp và đầy thú vị như thời điểm này. Các tools, libraries, frameworks, và plugins mới cứ thi nhau xuất hiện từng ngày. Có quá nhiều thứ để cho ta học.

Vì vậy mà nhóm lập trình web của Grab luôn cập nhật những công nghệ mới nhất cũng như tích hợp JavaScript ecosystem vào các ứng dụng của công ty.

Do đó mà các thành viên trong nhóm, dù mới hay cũ, cũng đều cảm thấy khá choáng ngợp với khối lượng kiến thức mới cần phải cập nhật. Thế nên chúng tôi đã lập ra một bản hướng dẫn nhằm giúp các bạn học nhanh hơn và theo đúng hướng để có thể navigate ecosystem một cách dễ dàng, cũng như việc shipping code cho user trở nên hiệu quả hơn.

Bài hướng dẫn này lấy cảm hứng từ “A Study Plan to Cure JavaScript Fatigue” cũng như kết hợp với những ý kiến riêng từ các thành viên trong nhóm với mục tiêu là chọn ra những libraries/frameworks phù hợp cho từng lĩnh vực của phát triển front-end cũng như đúng theo nhu cầu tại Grab.

Chúng tôi sẽ giải thích cặn kẽ vì sao những library đó được chọn và gợi ý những nguồn học để người xem có thể nâng cao kiến thức ngay luôn. Ngoài ra, những lựa chọn thay thế cũng sẽ được nêu ra nhằm giúp người đọc có thêm lựa chọn.

Nếu bạn đã rất quen thuộc với front end cũng như liên tục cập nhật công nghệ thì bài viết này có thể sẽ không giúp ích gì nhiều bởi nó dành cho người mới muốn học về front-end.

Và nếu công ty của bạn đang muốn tìm kiếm một JavaScript stack mới thì bài hướng dẫn này cũng sẽ rất hữu ích! Cứ thoải mái sửa đối tùy theo ý bạn. Bài viết sẽ được update thường xuyên nhằm giữ cho tính chính xác cũng như hữu ích cho người đọc.

  Lối đi nào cho newbie IT - Front End, Back End hay Full Stack?

Điều kiện tiên quyết phải có trước khi bạn xem tiếp

  • Nắm vững về khái niệm lập trình
  • Thoái mái với basic command line actions cũng như quen thuộc với các source code version control systems như Git.
  • Có kinh nghiệm với lập trình web. Đã từng tạo ra các server-side rendered web apps với những frameworks như Ruby on Rails, Django, Express, etc.
  • Hiểu rõ cách thức hoạt động của web. Có kiến thức về web protocols như HTTP và RESTful APIs

Những topic chúng tôi sẽ nói đến trong bài viết

  • Single-page Apps (SPAs)
  • New-age JavaScript
  • User Interface
  • State Management
  • Coding với Style
  • Testing
  • Linting JavaScript
  • Linting CSS
  • Types
  • Build System
  • Package Management
  • Continuous Integration
  • Hosting
  • Deployment

Cứ thoải mái bỏ qua những topic nào bạn đã biết.

Xem ngay các tin đăng tuyển dụng Front-end lương cao trên TopDev

Single-page Apps (SPAs)

Web developer ngày nay thường ám chỉ sản phẩm của họ là web app chứ không gọi là website nữa. Tuy không có nhiều sự khác biệt nhưng web app có tính tương tác cao hơn cũng như tầm ảnh hưởng lớn hơn, cho phép user thực hiện một hành động và nhận lại kết quả được gửi từ web app.

Bình thường, các trình duyệt web sẽ nhận HTML từ server và render nó. Khi user chuyển hướng đến một URL khác thì full-page refresh sẽ diễn ra và trình duyệt gửi một HTML mới dành cho trang mới mà user muốn xem. Đây còn gọi là server-side rendering.

Thế nhưng trong SPAs đời mới, client-side rendering được sử dụng thay thế cho cách trên. Trình duyệt sẽ load page ban đầu từ server, kèm với scripts (frameworks, libraries, app code) cũng như stylesheets cần thiết cho cả app đó. Khi người dùng chuyển hướng URL, page refresh sẽ không bị kích hoạt. Thay vào đó, URL của page sẽ được update thông qua HTML5 History API. Các data cần thiết cho page mới mà user muốn vào xem, thường là thuộc định dạng JSON, sẽ được thu thập bới trình duyệt thông qua AJAX request tới server. SPA sau đó sẽ update page với data mới bằng JavaScript, vốn đã có sẵn sau khi được download ở initial page. Đây là cách thức hoạt động tương tự như của native mobile apps.

Lợi ích:

  • App trả lời nhanh hơn và user sẽ cảm thấy page load được nhanh hơn nhờ vào không phải dùng tới full-page refreshes.
  • Giảm thiểu HTTP requests tới serve cũng như không cần download nhiều data mỗi lần phải load page.
  • Phân chia rõ ràng giữa client và server; bạn sẽ dễ dàng tạo một client mới cho một platform khác mà không cần phải chỉnh sửa lại code của server. Ngoài ra, việc thay đổi technology stack của client và server đều có thể làm riêng rẽ miễn API contract vẫn được giữ nguyên.

Bất lợi:

  • Initial page load sẽ nặng hơn do phải download về framework, app code, cũng như các thành phần cần thiết cho nhiều page khác nhau.
  • Bạn sẽ phải điều chỉnh sao cho requests đều đi qua một điểm và cho phép client-side routing được quyền quản lí ở đầu bên kia.
  • SPAs dựa trên JavaScript để render nội dung, tuy vậy, không phải tất cả search engine đề chạy JavaScript trong quá trình tìm kiếm khiến cho nội dung thu được sẽ bị thiếu hụt. Kết quả gián tiếp lên việc SEO của app bạn bị giảm hiệu quả.

Mặc dù server-side rendered apps vẫn còn là một lựa chọn tốt, client-server redered apps vẫn thích hợp hơn khi nói đến sự phức tạp cũng như qui mô lớn, đòi hỏi việc client và server code được phát triển và chỉnh sửa độc lập. Điều này rất là chính xác với Grab bởi chúng tôi có tới hàng chục client apps nhưng có chung API server.

Như đã nói, web developers hiện nay tập trung vào việc phát triển các web app hơn là page, nhờ đó cộng đồng JavaScript ngày càng trở nên quan trọng hơn. Trong server-side rendered pages, ta thường dùng snippets của jQuery để thêm tính tương tác user cho từng page. Tuy vậy, với các app lớn thì chỉ có jQuery là không đủ, bởi nó chỉ là một library cho việc điều khiển DOM chứ không phải là framework. App của bạn sẽ không có được một cấu trúc rõ ràng nếu như chỉ dùng jQuery.

Do đó mà JavaScript frameworks được dùng để giải quyết vấn đề trên. Mặt khác việc sử dụng các frameworks quen thuộc cũng rất tiện lợi bởi giúp cho team dễ hiểu về code cũng như app hơn. May thay những framework nổi tiếng thì cũng có nguồn học rất phong phú và cực kì đa dạng.

Links tham khảo:

New-age JavaScript

Trước khi nhảy vào tìm hiểu về cách viết ra một JavaScript web app, bạn sẽ phải làm quen với ngôn ngữ lập trình web –  JavaScript, hoặc ECMAScript. JavaScript là một ngôn ngữ cực kì linh hoạt bởi bạn có thể dùng làm web servers, native mobile appsdesktop apps.

Vào 2015, ECMAScript 5.1 chỉ mới được tung ra kể từ 2011. Thế nhưng trong những năm gần đây, JavaScript đã phát triển bùng nổ mạnh mẽ. Trong 2015, ECMAScript 2015 được tung ra với hàng chục tính năng để viết code dễ dàng hơn. Nếu bạn muốn biết rõ thêm thì có viết một bài khá hay là lịch sử và mẹo hay về JavaScript. Cho đến thời điểm hiện tại, vẫn chưa có trình duyệt nào thực sự có thể tận dụng hết tất cả tính năng và sức mạnh của ES2015. Các tool như Babel cho phép developers viết ES2015 trong các app của mình và Babel sẽ chuyển tiếp chúng xuống ES5 để giúp tương thích cho các trình duyệt web.

Biết cả ES5 và ES2015 là rất cần thiết. Bởi ES2015 vẫn còn khá nhiều open source code và Node.js apps vẫn được viết bằng ES2015. Nếu bạn debugging trong trình duyệt console thì có thể bạn sẽ không dùng được ES2015 syntax. Mặc khác, các tài liệu và libraries vẫn còn xài ES2015. Tại Grab, chúng tôi sử dụng babel-preset-env nhằm tăng hiệu năng nhờ vào sự cải thiện trong syntactic của JavaScript.  babel-preset-env rất thông minh khi biết xác định các Babel plugins cần thiết (cũng như tính năng nào không thương tích và cần bị chuyển đi) bởi trình duyệt web đang tăng khả năng native support dành cho nhiều tính năng của ES hơn. Nếu bạn muốn dùng một số tính năng ngôn ngữ chạy ổn và bảo đảm, bạn có thể tìm thấy tại babel-preset-stage-3, một list các tính năng và thông số kĩ thuật sẽ được áp dụng trong trình duyệt web.

Hãy dành 1 đến 2 ngày để khám phá và tìm hiểu ES5 cũng như ES2015. Những tính năng nổi bật trong ES2015 bao gồm “Arrows and Lexical This”, “Classes”, “Template Strings”, “Destructuring”, “Default/Rest/Spread operators”, and “Importing and Exporting modules”.

Khoảng thời gian để hoàn thành: 3–4 ngày. bạn có thể học/tìm hiểu về syntax khi học về các libraries cũng như trong quá trình viết ra một app cho mình.

Links tham khảo:

User Interface — React

Khi nói đến các JavaScript projects hấp thụ hệ thống front end ecosystem nhiều nhất thì React sẽ phải đứng đầu. React là một library với open-sourced được tạo ra bởi Facebook. Trong React, developer viết các components cho web interface và kết hợp chúng lại với nhau.

React khuyến khích các developer luôn tìm tòi, suy nghĩ cách thức sử dụng tốt nhất. Các web developer luôn được dạy rằng nên viết HTML, JavaScript và CSS riêng rẽ. React thì hoàn toàn ngược lại, nó khuyến khích ta viết HTML và CSS trong Javascript của mình. Nghe có vẻ thật điên cuồng nhưng sau khi bạn thử thì nó sẽ trở nên có lí hơn. Đó là nguyên nhân việc có sự thay đổi trong việc phát triển front-end với mô hình component làm chủ đạo. Các tính năng của React:

  • Declarative (tuyên bố): bạn mô tả điều mà bạn muốn thấy chứ không phải cách để có được nó. Vào thời của jQuery, developers phải nghĩ ra rất nhiều bước để điều khiển DOM nhằm từ app state này sang cái khác. Trong React, bạn chỉ cần thay đổi state trong component luôn và mọi thứ sẽ tự động update theo state. Ngoài ra cũng rất dễ để xác định cách component sẽ như thế nào nhờ vào render() method
  • Functional: View thật sự chỉ là function của  props và  state. Trong phần lớn các trường hợp, một React component sẽ được define bằng props (external parameters) và state (internal data). Với  props và  stateđó thì view sẽ được tạo ra. Pure functions rất dễ để test và điều đó cũng đúng với functional components. Nguyên nhân cho việc test trong React rất dễ dàng là bởi vì component’s interfaces đã được define rất kĩ và bạn chỉ cần thay đổi props và state  để so sánh kết quả output thu được của render.
  • Maintainable  (Bảo trì): Khi viết view theo component-based fashion cũng sẽ giúp tăng khả năng tái sử dụng. Chugn tôi nhận ra rằng khi define một component của  propTypes khiến cho người đọc React code hiểu rõ hơn về những thứ cần có cho component đó. Mặt khác, view và logic của bạn sẽ tự động chứa trong component, và nó sẽ không bi ảnh hưởng hay tác động đến các component khác. Nhờ đó mà việc thay đổi các component dễ dàng hơn, miễn là  props vẫn được giữ nguyên.
  • Hiệu năng cao – Bạn hẳn cũng từng nghe qua rằng React sử dụng một DOM ảo (khác với shadow DOM) và nó re-renders lại mọi thứ khi state có thai đổi. Vì sao lại cần một DOM ảo? Đó là vì dù JavaScript engine khá nhanh, việc viết và đọc từ DOM vẫn còn chậm. Do vậy, React sẽ có sẵn một phiên bản ảo của DOM trong bộ nhớ. “Re-rendering mọi thứ” là một cụm từ bị dùng sai. Trong React thì re-rendering lại thực chất chỉ diễn ra trong phiên bản ảo của DOM. Như vậy khi có bất kì thay đổi trong data của component, một hiện thị (ảo) được tạo ra và so sánh với phiên bản cũ. Những khác biệt (nằm trong phạm vi cho phép) sau đó sẽ được patch nhờ vào DOM (thật) của trình duyệt.
  • Dễ học – Học React rất dễ. React API trông rất là nhỏ gọn khi bạn thử so sánh với một library khác. Bạn chỉ cần học một vài API và chúng có rất ít thay đổi. Hơn nữa, cộng đồng React rất lớn, có hẳn một ecosystem riêng cho tool, open-sourced UI components, và vô số nguồn học online vô cùng hữu ích cho bạn.
  • Kinh nghiệm của Developer –  Có rất nhiều tools giúp cho developer lên trình rất nhanh với React. React Developer Tools là một  browser extensioncho phép bạn xem và kiểm tra component, view cũng như tinh chỉnh  props và state của chúng. Hot reloading với webpack cho phép bạn theo dõi các thay đổi của code trong trình duyệt của mình mà không cần phải refresh nó. Lập trình Front end đòi hỏi việc phải tinh chỉnh code rất nhiều, save rồi refesh trình duyệt. Hot reloading giúp bạn bỏ qua bước cuối cùng. Mỗi khi library được update, Facebook  sẽ cung cấp một codemod scripts để giúp bạn chuyển code của mình lên APIs mới. Điều này khiến cho quá trình update trở nên thật nhẹ nhàng.

Qua nhiều năm, các view libraries  với hiệu năng cao hơn cả React đã bắt đầu xuất hiện. React có thể không còn nhanh nhất nữa nhưng nếu xét về hệ ecosystem, trải nghiệm người dùng cũng như lợi ích thì nó vẫn là một trong những top libraries. Ngoài ra, Facebook cũng đang tập trung để phát triển React khi hãng bỏ công ra viết lại các thuật toán gốc cho nó. React giúp chúng ta viết code một cách gọn gàn hơn, tốt hơn cũng như để việc bảo trì và phát triển web app dễ dàng hơn.

Chúng tôi khuyến khích bạn nên thử qua lập trình một game Tic Tac Toe trẹn React homepage để hiểu rõ hơn về nó. Để hiểu sâu hơn về React, bạn có thể vào học khóa React Fundamentals  cực kì hữu ích của tác giả của React Router, một chuyên gia trong cộng đồng React. Create React App là một tool khác giúp giản đơn các tính năng của React nên rất phù hợp cho người mới học React.

Khoảng thời gian để hoàn thành: 3–4 ngày. Hãy thử làm những project đơn giản như to-do list, Hacker News clone với React. Bạn sẽ tăng level rất nhanh và có thể gặp phải một số vấn đề mà React cũng không giải quyết được, và như vậy chúng ta sẽ đến topic tiếp theo trong phần 2…..

Links học

Một số lựa chọn khác

Đừng bỏ lỡ những bài viết hay về Front-end:

TopDev via Medium

Truy cập ngay việc làm IT đãi ngộ tốt trên TopDev

Một số lời khuyên nhanh để tiếp cận Trí tuệ nhân tạo

Để tiếp cận được trí tuệ nhân tạo nên bắt đầu như thế nào?

Đầu tiên cần hiểu cách máy tính nhìn nhận thế giới, bằng cách xây dựng được model, chuẩn hóa dữ liệu, ví dụ cần xử lý ảnh, video, âm thanh, xử lý chuỗi rồi cho ra input đầu vào….

Sau đó cần làm quen với các thuật toán tiếp cận gần đúng và tổng quát, là đặc trưng kiểu trí tuệ nhân tạo, kể cả đơn giản như dùng giải thuật di truyền, sinh ngẫu nhiên tập kết quả và chọn ra kết quả tốt nhất dựa trên sai số với hàm lượng giá là thấp nhất, học không giám sát chỉ là phân cụm dữ liêu, về cơ bản các mạng nơ ron cũng là lặp lại sao cho sai số là thấp nhất.

Cuối cùng là áp dụng thử vào các bài toán thực tế, như phân loại dữ liệu, nhận dạng số, khuôn mặt..v.v

Deep learning về cơ bản không phải là thuật toán gì cao siêu, bản chất của trí tuệ nhân tạo không nằm ở thuật toán cao siêu mang tính tuyệt đối, mà nó nằm ở khả năng có thể học cực tốt, không giới hạn, học sâu thể hiện qua mạng nơ ron rất nhiều lớp, học thêm, học tất tần tật, và chắc là không giống như dùng nhiều trick để xử lý dữ liệu đầu vào siêu chuẩn và nhận dạng bằng máy tính thường, học sâu học bất kỳ, như captcha là học cả ảnh nhiễu chứ ko cần bóc tách.

Về tương lai trí tuệ nhân tạo có thể phát triển mạnh dạng các service và chúng ta build model, sau đó tái sử dụng kết quả training. Bởi vì sau khi train xong, chúng ta có mạng nơ ron được hiệu chỉnh trọng số, dùng để thực hiện nhiệm vụ cơ bản nhất là reduce đầu vào thành tập nhỏ kết quả đầu ra để quyết định, và tương lai gần thì robot cũng không lắp kịp một CPU đủ khả năng tính toán siêu khủng để thông minh như con người, nên chắc sẽ cập nhật kết quả học từ server, mà nghe nói chỉ để đánh cờ thắng con người cũng đã cần server khủng rồi, nên thực tế nhất nên sử dụng nó vào data mining ví dụ như recommendation system.

Nguồn: Thanhtu Pham

8 câu hỏi phỏng vấn dành cho các lập trình viên Mobile app

Cơ hội việc làm dành cho các mobile dev đang ngày càng mở rộng với số lượng tăng cao các doanh nghiệp ứng dụng công nghệ mobile vào công việc kinh doanh của mình.

Vì vai trò này rất quan trọng đối với các startups tương lai, việc tuyển chọn các ứng viên managers phù hợp đòi hỏi tính chọn lọc cao và rất khắt khe.

Nếu bạn là 1 dev mobile app tài năng và đã từng ứng tuyển vào các công việc ở mảng này, bạn có thể đọc tiếp. Chúng tôi liệt kê danh sách 8 câu hỏi mà bạn có thể nhận được khi đi phỏng vấn cho vị trí Mobile Apps Developer

1. Loại smartphones mà bạn sử dụng là gì?

Đúng là câu hỏi vô nghĩa nhỉ! Bạn đang lập trình ứng dụng cho di động, tất nhiên smartphone của bạn phải là 1 trong các công cụ chính. Tôi đoán là bạn sẽ chẳng có vấn đề gì khi trả lời câu hỏi này nhưng nếu bạn thể hiện sự quen thuộc và kiến thức sử dụng nhiều hơn 1 hệ điều hành/ thương hiệu thì sẽ tốt hơn nhiều.

2. Kể tên 3 mobile apps mà bạn thích

Nếu bạn chọn lập trình app là nghề nghiệp mà bản thân theo đuổi, bạn phải cập nhật kiến thức về những apps mới nhất. Người quản lý mảng tuyển dụng sẽ muốn bạn luôn thử nghiệm và kiểm tra nhiều app khác nhau, từ đó đưa ra những tiêu chuẩn chắc chắn về những điểm được xây dựng tốt và những điểm cần cải thiện trong app. Đảm bảo chắc chắn là bạn sở hữu vài app yêu thích trong smartphone của mình và sẵn sàng thảo luận về chúng từ chức năng đến các điều kiện lập trình.

3. Bạn đã từng tham gia quy trình làm app được đưa lên iTunes hay Android stores?

Đây là lúc để bạn phô diễn về công việc và kinh nghiệm của bản thân. Hãy chỉ ra vai trò của bạn trong giai đoạn lập trình của mỗi dự án và những khó khăn bạn gặp phải khi tạo app. Nếu bạn chưa từng làm app chuyên nghiệp, bạn có thể khoe khoang những app mà bạn tự lập trình hoặc trong các bài tập thực hành tại trường. Tạo 1 nguồn app mở trước khi nộp đơn xin việc là 1 ý tưởng tốt.

4. Hãy nói cho chúng tôi vài điểm bất lợi của cả Android và iOS

Nếu bạn đang lập trình 1 app cho 1 platform chuyên biệt, bạn nên biết những điểm bất lợi của nền tảng đó. Đây là lúc bạn có thể đề cập đến các vấn đề kỹ thuật mà bạn gặp phải khi phát triển cho mỗi platform, cũng như những giải pháp cho các vấn đề đó. Chú ý là các ví dụ mà bạn cung cấp phải cụ thể.

5. Điểm khác biệt giữa lập trình ứng dụng desktop/ web so với lập trình ứng dụng di động?

Các màn hình và kích thước khác nhau, tốc độ kết nối đa dạng, khả năng tiêu thụ pin, giới hạn dung lượng bộ nhớ… là những vấn đề ở các thiết bị mobile và hãy cho nhà tuyển dụng thấy bạn thực sự biết cách quản lý, kiểm soát chúng.

6. Làm thế nào để giải quyết các vấn đề bảo mật?

Bảo mật luôn là vấn đề nhạy cảm, đặc biệt là khi đề cập đến các thiết bị di động. Thể hiện kiến thức của bạn về bảo mật và các ý tưởng để giảm thiểu các vấn đề bảo mật trong app. Theo tin mới nhất, chẳng phải có 1 cuộc tấn công vào phần mềm gần đây sao? Hãy đề cập đến nó và chuẩn bị các giải pháp cho vấn đề này.

7. Vai trò quan trọng của giao diện người dùng/ trải nghiệm người dùng (UI/UX) trong lập trình ứng dụng di động?

Giao diện người dùng và trải nghiệm người dùng trở thành chìa khóa thành công của các ứng dụng mobile, vì vậy chắc chắn các nhà tuyển dụng sẽ đặt ra cho bạn rất nhiều câu hỏi liên quan đến UI/UX. Nêu rõ ý kiến và các mẹo của bạn để tận dụng tốt nhất giao diện mobile. Bạn có thể chỉ ra app nào mà bạn nghĩ có UI tốt và những app UI không tốt. Ngoài ra, 1 số doanh nghiệp có thể yêu cầu bạn vẽ nhanh 1 giao diện.

8. Bạn đã từng tích hợp app từ 1 platform sang 1 platform khác chưa?

Hầu hết các apps đều sử dụng được nhiều hơn 1 hệ điều hành, vì thế việc học cách cấu hình lại hoặc chuyển app từ 1 platform sang platform khác là 1 phương án tốt. Hãy kể về kinh nghiệm trong lĩnh vực này và nêu chi tiết về những app mà bạn đã từng cấu hình lại cũng như các giải pháp mà bạn đã thực hiện. Nếu bạn không có bất kì kinh nghiệm nào, hãy trình bày lý do bạn nghĩ bản thân đã chuẩn bị kỹ thuật cho nó.

Giải pháp của JobFluent

Rèn luyện sự tự tin, đảm bảo an toàn khi phỏng vấn bằng cách tự đặt câu hỏi cho bản thân. Đây là vài ví dụ dành cho bạn:

  • Bạn đã từng sở hữu dự án lập trình nào chưa?

Thể hiện sự hứng thú với những gì bạn đang làm, phân tích chi tiết và đưa ra vài gợi ý liên quan đến dự án.

  • Bạn có viết code review không?

Một trong những cách nhanh nhất để phát triển thành 1 developer là để người khác đọc và trả lời trên code của bạn. Những review code thường xuyên đồng nghĩa là team của bạn đang tốt dần lên.

Ok, bây giờ thì bạn đã sẵn sàng rồi! Hãy tìm hiểu về công ty mà bạn đã ứng tuyển và thể hiện thái độ tốt và sự tự tin nào. Chúc may mắn!

Nguồn: Jobfluent 

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

Chiếc nón học tập – Ai cũng nên biết!

Tiến trình Đọc – Học – Vọc hay Biết – Hiểu – Hành nói ra thì dễ nhưng cứ phải tới khi đụng và ngã ngửa rồi mới hiểu ra và khi có được động lực kèm môi trường thì chịu học.

Bạn sửa bài cho, rồi đọc lại tôi mới thấy những cái bị sửa đơn giản vô cùng và toàn là những cái tôi đã biết và hiểu nhưng tôi chẳng nhớ, chẳng dùng. Bạn bảo bởi “passive learning”, tức học thụ động, được hiểu rằng chỉ có nạp và xử lý rồi để đấy mà không hành. Với ngôn ngữ, nó là chuyện đọc nhiều, nghe nhiều, biết phát triển ý, biết đặt câu hỏi nhưng không chủ động nói, không viết thường xuyên và sử dụng những gì đã học vào quá trình này, vậy nên biết nhưng không làm được.

Cái hình dưới của nhà giáo người Mỹ Edgar Dale ra đời cách đây cũng tầm 70 năm nhưng vẫn còn xài được. Nó cụ thể hóa cái quá trình trên bằng mấy con số và mấy cách thức mà Dale đã khảo sát và nghiên cứu. Tháp đồ đơn giản này có ý nghĩa quan trọng trong định hình phương pháp giảng dạy chủ động, kết hợp các hình thức khác nhau để kích thích mọi giác quan của người học. Với người học, họ cũng có thể tham khảo để biết cách học chủ động sao cho tiếp thu hiệu quả và thực hành được chính xác những gì đã học.

Cách đây mấy hôm tại Sài Gòn, vị tỉ phú người Mỹ, Jeff Hoffman, người là đồng sáng lập và giám đốc của mấy công ty du lịch siêu bự, dạng trùm thế giới cũng nói về chuyện học chủ động kết hợp với các phương tiện kỹ thuật số để phục vụ cho đổi mới sáng tạo. Ngoài việc chia sẻ các công nghệ mới đang định hình lại cách ta học tập, làm việc, và tầm quan trọng của khai thác các công nghệ này như (thực tế ảo, hologram, gương thông minh, …), ông cũng chỉ một cách nữa nằm ở trên đỉnh của tháp đồ Dale, là đọc. Hãy đọc thật nhiều và đọc mỗi ngày. Đọc sách là chuyện hiển nhiên rồi, nhưng hãy đọc thêm những tài liệu khác. Đọc mọi chủ đề chứ không chỉ 1 chủ đề. Vì bài nói của ông đề cập đến đổi mới sáng tạo, ông cho hay chính nhờ mỗi ngày dành ra 10 phút đọc những cái mới hay những chủ đề khác lạ so với chuyên ngành của mình trong suốt 30-40 năm nay mà ông, một kỹ sư, mới mang đến những thành công từ việc biết áp dụng những kiến thức từ ngành khác vào đổi mới lĩnh vực du lịch. Ông học chủ động bằng cách áp dụng nó ngay vào công việc của mình.

Tài liệu về đọc, học chủ động trên mạng cũng nhiều, chịu khó tìm kiếm thì có cả đống để đọc đó nghen.

Nguồn: Gương Nga

Developer Việt còn thiếu gì để thành công?

Developer Việt còn thiếu gì để thành công

Sở hữu trên 100 giải thưởng lớn nhỏ về công nghệ thông tin trong và ngoài nước, là tác giả của ứng dụng BusMap với hơn 300 000 lượt tải; là người trẻ nhất trong số 10 gương mặt được trao giải “Quả cầu vàng”-giải thưởng do T.Ư Đoàn TNCS và Bộ Khoa học – Công nghệ tổ chức, sinh viên duy nhất trong danh sách 6 Công dân trẻ tiêu biểu 2014, một trong 7 sinh viên Việt Nam thực tập tại Google, và còn vô số những thành tích mà chàng trai 23 tuổi- Lê Yên Thanh đã đạt được những thành công khiến người khác phải khâm phục.

Tuy nhiên, hôm nay tôi gặp Yên Thanh không phải tư cách là gương mặt trẻ tiêu biểu, hay chàng trai vàng của công nghệ Việt Nam, càng không phải người từ chối Google để về Việt Nam làm Start-up. Tôi gặp Yên Thanh với tư cách là một Backend Developer của Umbala-đấu trường ngôi sao. Chúng tôi nói về những câu chuyện về nghề lập trình, kinh nghiệm xây dựng sản phẩm, những tiềm năng và cơ hội cho developer Việt.

  • Yên Thanh có thể chia sẻ về công việc hiện tại của bạn

Mình đang làm Back-end tại Umbala. Hiện tại Umbala đang thực hiện một dự án hợp tác với Viettel triển khai các gói giá trị gia tăng, khi người dùng đăng kí 1 gói 4G của Viettel có thể sử dụng ứng dụng Umbala miễn phí, ngoài ra còn có những dịch vụ nạp tiền vào ứng dụng, sau này sẽ có nhiều tiện ích được tích hợp trong ứng dụng Umbala. Chính vì vậy, bên cạnh làm back-end mình còn phụ trách cả phần thuê máy chủ, bảo mật vào nội dung bên trong của ứng dụng.

  • Bạn có thể nói rõ hơn về ứng dụng Umbala

Umbala là một sản phẩm tạo video clip với nhiều hiệu ứng vui nhộn, độc đáo, thú vị. Tính năng đặc biệt nhất giúp Umbala khác biệt so với các ứng dụng video hiện tại có trên thị trường là các hiệu ứng hình ảnh có thể tự điều chỉnh theo tiết tấu nhạc. Hiện nay chưa có nhiều ứng dụng làm được điều đó. Chất lượng video tốt, thỏa mãn thị giác người dùng, cũng chính là 1 điểm killer features của ứng dựng Umbala.

Hiện tại Umbala đang phát triển theo hướng tương tác real time. Tương tác Real time giải quyết được các nhu cầu thực tế từ các nhà quảng cáo. Không giống như các sản phẩm quảng cáo banner hay hiển thị không thể đo lường được hiệu quả quảng cáo. Với tương tác thời gian thực- Real time tất cả mọi thứ đều diễn ra cùng 1 lúc nên có thể đo lường chính xác hiệu quả quảng cáo trong thời gian thực. Chính vì vậy việc nhận diện thương hiệu cũng trở nên hiệu quả hơn. Hơn thế nữa, vì sử dụng video nên có thể dễ dàng thêm bất kì nội dung gì theo yêu cầu từ nhà quảng cáo.

  • Trong quá trình triển khai dự án Yên Thanh có gặp khó khăn gì không?

Với dự án phối hợp với Viettel, do hiện tại Viettel đang sử dụng hệ thống viết bằng swap còn hệ thống của Umbala viết API bằng resfull, vì vậy gần như phải xây dựng hệ thống lại từ đầu. Với hệ thống SMS truyền thống chỉ chủ yếu là nhắn tin cú pháp nhưng trong dự án này yêu cầu nhiều hơn thế, chính vì vậy, cần phải làm cho nó tương thích với ứng dụng của mình cũng là một bài toán cần phải giải quyết.

Với đặc thù User ở Viêt Nam chỉ tập trung vào một số khung giờ nhất định nên phải thiết kế hệ thống có khả năng tự Scale để tối ưu hóa chi phí nhất có thể. Bên cạnh đó Umbala cũng đang nỗ lực để cải thiện tốc độ tải cũng như chất lượng Video để giúp người dùng có được trải nghiệm tốt nhất.

  • Đã từng có cơ hội được làm việc ở nước ngoài tại sao Thanh lại trở về Việt Nam?

Tuy làm việc nước ngoài cuộc sống tốt hơn, còn ở Việt Nam có nhiều thứ rất khác, đặc biệt khi làm việc ở 1 StartUp thì càng có nhiều vấn đề, và gần như mình phải tự thân vận động toàn bộ, không ai hỗ trợ mình.

Nhưng mình cảm thấy ở Việt Nam còn rất nhiều cơ hội, nếu bây giờ không nắm bắt sẽ bị những người giỏi khác cướp mất.

  • Làm việc ở công ty lớn khác gì với làm cho Start-Up 

Ở công ty lớn sẽ ít việc hơn vì công việc được chuyên môn hóa cao, hệ thống tốt hơn, có thể yêu cầu máy chủ, mua framework đều rất đơn giản. Làm ở công ty lớn không cần phải tốn thời gian để xây dựng hệ thống cấu trúc máy chủ. Còn ở công ty Start-Up luôn phải đối mặt với áp lực deadline, khối lượng công việc nhiều vì vậy OT là chuyện rất bình thường, và luôn phải giải quyết vấn đề tối ưu hệ thống tiết kiệm nhất nhưng mang lại hiệu quả cao nhất.

Nhưng làm việc ở công ty Start-Up mình được tự quyết định cái mình muốn, không phụ thuộc vào người khác.

  • Theo Yên Thanh lập trình viên Việt Nam mình còn yếu và thiếu ở điểm nào?

Mình thấy ở Việt Nam xét mặt bằng chung lập trình viên còn thiếu về kinh nghiệm, ở giai đoạn này mình không phải thiếu kiến thức nền nữa, cái quan trọng là phải có kinh nghiệm. Không chỉ là kinh nghiệm làm việc mà còn phải có kinh nghiệm về quản lý nữa: kinh nghiệm phỏng vấn lập trình viên, phân công công việc như thế nào cho phù hợp. Những điều đó chỉ có thể có được qua tích lũy qua những trải nghiệm của bản thân, không có sách vở nào dạy những điều đó. Phải vừa có kiến thức nền vừa có kinh nghiệm làm việc thì mới hoàn hảo được. Dù có kiến thức tốt nhưng không có kinh nghiệm thì chỉ có thể làm công ăn lương sẽ luôn bị người có kinh nghiệm chỉ đạo. Còn nếu có kinh nghiệm mình sẽ tự đi được.

Một điểm nữa là lập trình viện Việt Nam mình còn hơi yếu về tư duy, chủ yếu về tư duy theo kiểu software engineer, chỉ biết làm theo yêu cầu. Tức là chỉ biết Input và Output rõ ràng, không có tư duy sản phẩm. Điều mình hướng tới không phải là Software Engineer mà là Product Engineer, phải tư duy về mặc sản phẩm. Mình Không chỉ nghỉ mình làm tính năng gì, bấm cái nút đó ra làm sao, mà mình phải nghĩ là người dùng sẽ được cái gì, tức là khi làm tính năng đó thì người dùng sẽ tương tác ra sao, cảm nhận của người dùng như thế nào.

  • Vậy làm thế nào để khắc phục được những yếu điểm đó?

Muốn có tư duy tốt phải chủ động sáng tao, phải đọc sách nhiều, phải học người khác cách họ tư duy như thế nào, học cách tư duy trong mọi vấn đề của cuộc sống. Đặc biệt với những bạn làm Outsourcing đừng để bị chi phối bởi lối tư duy Software Engineer, vì làm như vậy một thời gian sẽ bị vùi đầu vào việc Input – Output sẽ không còn khả năng tư duy sáng tạo như vậy rất nguy hiểm. 

  • Yên Thanh có dự định gì cho riêng mình không?

Hiện tại mình đang cố gắng để trở thành Full Stack có thể build một hệ thống hoàn thiện. Làm quản lý không nhất thiết phải làm hết mọi thứ nhưng mình cần biết bên dưới làm những gì, phân công nhiệm vụ cho từng người phù hợp để không chỉ phát huy được năng lực của nhân viên mà còn phát triển được doanh nghiệp của mình. Hiện tại mình cũng đang ấp ủ một dự định nhưng chưa có thời gian thực hiện, phát triển ứng dụng Umbala là ưu tiên hàng đầu của mình lúc này.

Cảm ơn Yên Thanh vì những chia sẻ thú vị, chúc cho những kế hoạch, dự định của bạn sớm được thực hiện.

Cùng khám phá sức mạnh của ES6 Generators

Generators có thể xem như là cách áp dụng của iterables

Điều khiến generators trở nên đặc biệt bởi vì chúng là những functions có khả năng hoãn lại quá trình execution mà vẫn giữ nguyên được context.

Đây là một tính năng rất quan trọng khi ta phải dùng tới những executions đòi hỏi phải có quãng pause nhưng context phải được để nguyên nhằm để recover lại trong tương lai khi cần đến.  

Bạn có từng nghe qua quá trình phát triển async chưa?

Syntax – Cú pháp

Syntax (Cú pháp) cho generators bắt đầu với function* declaration của chính nó (nhớ lưu ý cái asterisk) và  yield dành cho khi generator muốn dừng (pause) execution.

function* generator() {
    // A
    yield 'foo'
    // B
}

Với  next function, chúng ta có thể kiểm soát được quá trình tạo ra một generator từ  generator sẵn có.

Khi chạy  next function, thì code của  generator sẽ được thực hiện (execute) và cho đến khi gặp  yield thì sẽ ngừng lại.

Lúc đó,  yield sẽ xen vào và khiến cho  generator execution bị đình chỉ (pause).

const g = generator()

g.next() // { value: 'foo', done: false }
// Our generator's code A gets executed
// and our value 'foo' gets emitted through yield.
// After this, our generator's execution gets suspended.

g.next() // { value: undefined, done: true }
// At this stage the remaining code (i.e. B) gets executed.
// Because no value is emitted we get 'undefined' as the value,
// and the iterator returns 'true' for iteration done.

yield được sinh ra cùng lúc với generator và cho phép chúng ta đưa ra các giá trị mà mình muốn. Tuy nhiên, nó chỉ thực hiện được khi ở trong phạm vi của generator.

Nếu thử dùng yield  với một giá trị trong callback thì cho dù đã declared trong generator thì nó vẫn sẽ bị lỗi.

function* generator() {
    ['foo','bar'].forEach(e => yield e) // SyntaxError
    // We can't use 'yield' inside a non-generator function.
}

 

yield*

yield* được tạo ra nhằm có khả năng gọi một generator nằm trong một generator khác.

 

function* foo() {
    yield 'foo'
}

// How would we call 'foo' generator inside the 'bar' generator?
function* bar() {
    yield 'bar'
    foo()
    yield 'bar again'
}

const b = bar();

b.next() // { value: 'bar', done: false }
b.next() // { value: 'bar again', done: false }
b.next() // { value: undefined, done: true }

Bạn có thể thấy b iterator, thuộc  bar  generator, không hề chạy như đúng ý ta khi call foo.

Đó là mặc dù foo  execution cho ra một iterator, nhưng ta sẽ không có lặp lại (iterate) nó được.

Vì thế mà ES6 cần có operator  yield*

function* bar() {
    yield 'bar'
    yield* foo()
    yield 'bar again'
}

const b = bar();

b.next() // { value: 'bar', done: false }
b.next() // { value: 'foo', done: false }
b.next() // { value: 'bar again', done: false }
b.next() // { value: undefined, done: true }

Đồng thời nó cũng hoàn toàn có thể áp dụng với data consumers

for (let e of bar()) {
    console.log(e)
    // bar
    // foo
    // bar again
}

console.log([...bar()]) // [ 'bar', 'foo', 'bar again' ]

 

 yield* có khả năng kiểm tra và chạy qua hết tất cả ngõ ngách trong generator để yield ra phần nó cần.

function* bar() {
    yield 'bar'
    for (let e of foo()) {
        yield e
    }
    yield 'bar again'
}

 

Generators cũng chính là Iterators

Generators thực chất là những iterables đơn giản. Nói cách khác chúng cũng sẽ theo luật của iterable và  iterator .

Luật của iterable cho ta biết một object sẽ nên return một function itera với key là  Symbol.iterator.

const g = generator()

typeof g[Symbol.iterator] // function

 

Còn luật của iterator cho ta biết iterator nên là một object chỉ tới yếu tố tiếp theo của iteration. Object này phải chứa một function gọi là next

const iterator = g[Symbol.iterator]()

typeof iterator.next // function

 

Bởi vì generators là iterables nên chúng ta có thể dùng data consumer  for-of, để iterate (lặp lại) giá trị của generators (values).

for (let e of iterator) {
    console.log(e)
    // 'foo'
}

 

Return

Chúng ta còn có thể add vào return cho generator, thế nhưng return sẽ hoạt động hơi khác đi tùy thuộc vào cách generators’ data được iterated.

 

function* generatorWithReturn() {
    yield 'foo'
    yield 'bar'
    return 'done'
}

var g = generatorWithReturn()

g.next() // { value: 'foo', done: false }
g.next() // { value: 'bar', done: false }
g.next() // { value: 'done', done: true }
g.next() // { value: undefined, done: true }

Khi ta thực hiện iteration bằng tay, sử dụng  next, sẽ nhận được returned value (i.e. done ) cũng chính là value cuối của iterator object và khi done  đưa ra kết quả true.

Mặt khác, khi sử dụng defined data consume như for-of hoặc destructuring thì returned value sẽ bị bỏ qua.

 

for (let e of g) {
    console.log(e)
    // 'foo'
    // 'bar'
}

console.log([...g]) // [ 'foo', 'bar' ]

yield*

Như bạn đã biết  yield* được tạo ra nhằm có khả năng gọi một generator nằm trong một generator khác.

Ngoài ra, nó còn cho phép chúng ta lưu trữ value returned bằng executed generator.

function* foo() {
    yield 'foo'
    return 'foo done'
}

function* bar() {
    yield 'bar'
    const result = yield* foo()
    yield result
}

for (let e of bar()) {
    console.log(e)
    // bar
    // foo
    // foo done
}

 

Throw

Chúng ta có thể dùng throw trong một generator và next  sẽ truyền exception ra.

Và khi một exception bị đẩy ra, iterator (lặp) sẽ bị phá và state của nó sẽ được set thành  done: true

function* generatorWithThrow() {
    yield 'foo'
    throw new Error('Ups!')
    yield 'bar'
}

var g = generatorWithReturn()

g.next() // { value: 'foo', done: false }
g.next() // Error: Ups!
g.next() // { value: undefined, done: true }

Generators cũng chính là Data Consumers

Generators ngoài khả năng như một data producers, với yield, nó cũng có thể consume data khi dùng next.

function* generatorDataConsumer() {
    // A
    console.log('Ready to consume!')
    while (true) {
        const input = yield; // B
        console.log(`Got: ${input}`)
    }
}

 

Có một vài điểm khá thú vị sau đây

// (1)
var g = generatorDataConsumer()

// (2)
g.next() // { value: undefined, done: false }
// Ready to consume!

// (3)
g.next('foo') // { value: undefined, done: false }
// Got: foo

Generator Creation (1)

Ở stage này, chúng ta đang tạo ra generator g.

Và execution sẽ dừng lại tại điểm A.

Next đầu tiên (2)

Execution đầu tiên của next giúp cho generator được executed cho tới khi gặp phải yield.

Tất cả các giá trị (value) trong stage này khi đi qua  next sẽ bị lơ đi. Nguyên nhân là vì vẫn chưa có gặp một  yield nào cả.

Và execution của chúng ta chỉ dừng lại tại điểm B  khi một  value nào đó được đưa ra bởi  yield.

Next tiếp theo (3)

Lúc này thì value đã đi qua yieldvà như vậy execution sẽ bị ngừng lại.

Hãy dùng Cases

Implement Iterables

Bởi generators là một iterable implementation, khi chúng được tạo ra thì chúng ta cũng sẽ có một iterable object với từng yield đại diện cho một giá trị sẽ được đưa ra trên từng iteration. Nói cách khác chúng ta có thể dùng generators để tạo ra iterables.

Ví dụ sau đây sẽ thể hiện generator như là iterable  với khả năng lập một dãi các số nguyên cho tới khi nó đạt  max. Và ta cũng dùng for-of  để lập những giá trị trên.

Các bạn cũng cần lưu ý rằng yield sẽ khiến các execution bị dừng lại tại một điểm và các iteration sẽ khiến cho execution chạy tiếp tại các điểm đó.

function* evenNumbersUntil(max) {
    for (let value = 0; value <= max; value += 2) {
        // When 'value' is even we want to 'yield' it
        // as our next value in the iteration.
        if (value % 2 === 0) yield value;
    }
}

// We can now user 'for-of' to iterate over the values.
for (let e of evenNumbersUntil(10)) {
    console.log(e)
    // 0
    // 2
    // 4
    // 6
    // 8
    // 10
}

 

Asynchronous Code

Ta còn có thể dùng generators  với những async code như  promises.

Tiện thể thì cũng coi như là để giới thiệu về async/await trên ES8.

Ví dụ dưới đây cũng sẽ cho ta thấy cách tìm kiếm một JSON file nhờ vào  promises. Đây là ví dụ của Jake Archibald thuộc developers.google.com.

function fetchStory() {
    get('story.json')
    .then(function (response) {
        return JSON.parse(response)
    })
    .then(function (response) {
        console.log('Yey JSON!', response)
    })
}

Nhờ vào co library và một generator, code của chúng ta sẽ nhìn giống như synchronous code.

 

const fetchStory = co.wrap(function* () {
    try {
        const response = yield get('story.json')
        const text = yield JSON.parse(response)
        console.log('Yey JSON!', response)
    }
})

Với async/await thì nó vẫn sẽ khá giống so với phiên bản trên

async function fetchStory() {
    try {
        const response = await get('story.json')
        const text = await JSON.parse(response)
        console.log('Yey JSON!', response)
    }
}

 

Lời Kết

Dưới đây là một map thể hiện mối quan hệ giữa generators và iterators, bởi Axel Rauschmayer trên Exploring ES6.

Generators chính là một cách thực hiện của iterable và nó dựa theo luật của  iterable của iterator . Vì thế mà chúng có thể dùng để tạo ra iterables.

Tính năng tuyệt vời nhất của Generator là khiến execution bị hoãn lại. Với  yield nếu xài ES6.

Không những thế với  yield*, ta còn có thể gọi một generator nằm trong một generator khác.

Generators chính là cách thức để giúp việc phát triễn không đồng bộ trở thành đồng bộ.

Nguồn: Topdev via Medium

Java đang ngăn cản sự phát triển của Android và Kotlin không phải là cách giải quyết

Java đang ngăn cản sự phát triển của Android và Kotlin không phải là cách giải quyết

Dưới đây là một số chia sẽ của Topdev tổng hợp được cho bạn về Android và Kotlin.Quá trình phát triển của Android từ 5 năm về trước như thế nào? Java đang ngăn cản sự phát triển của Android và Kotlin không phải là cách giải quyết. 

Hãy cùng tìm hiểu thêm từ bài viết dưới đây:

Java quá là rườm rà

Bnh thường thì bạn có thể dùng 2 phương pháp calls để làm nó nhưng với Java thì lại phải OOP rất nhiều cho cái solution rồi chạy code generation bởi với Google thì đó là cách duy nhất cho in-app purchase API. Như vậy, với một ngôn ngữ mà bạn không thể nào dùng callback khi thiếu class và platform (phụ thuộc rất nhiều vào hành vi không đồng bộ) thì kết quả là một đống code hỗn tạp lộn xộn.

Mặc dù Kotlin có giúp cho mọi chuyện bớt phức tạp hơn khi sử dụng cấu trúc nhôn ngữ hiện đại hơn. Tuy vậy, Android APIs vẫn được thiết kế để sử dụng với Java. Để cho công bằng thì Google thật sự đã cố gắng để đưa ra nhiều cải thiện với Java 8 support cho Android Studio 3.0 tuy nhiên nó sẽ cần mất nhiều năm nữa chúng ta mới thấy được thành quả của chúng.

Bản chất chậm chạp của Java khiến cho việc phải bỏ nhiều công sức hơn vào quá trình phát triển của một app

vòng đời hoạt động/dịch vụ/phát triển của các Android events quá phức tạp. Rất nhiều developer không hiểu rõ về nó cũng như bạn sẽ chẳng thể yêu cầu ai cũng bỏ quá nhiều thời gian chỉ để sử dụng chúng một cách rành rọt. Trong thời đại mà các ngôn ngữ đề cố gắng đơn giản hóa mọi thứ như iOS hoặc Windows Phone thì Java lại khiến mọi thứ phức tạp hơn.

Kotlin thì thêm overhead vào runtime, thế nhưng nó lại khiến cho ta phải bỏ ra thêm nhiều công sức hơn. Hị vọng rằng với Android reactive libraries mới cùng tính năng automated app lifecycle sẽ giúp khác phục vấn đề trên.

Ứng dụng nặng với quá trình xử lí phức tạp khiến cho việc thực hiện các iteration nhanh trở nên bất khả thi và làm cho Andiord không thân thiện với người dùng

Nếu bạn muốn ứng dụng của mình sử dụng được Google APIs, Firebase hay một libraries của nhóm thứ 3 mà vẫn giữ được tốt độ lặp nhanh (iteration) thì phải có một workstation  với CPU và SSD cực khủng. Google hiện vẫn đang tập trung đầu tư phát triển Java nhưng nó vẫn chưa thật sự thích hợp cho máy tính phổ thông chạy tốt ở thời điểm hiện tại. Như vậy các developer sẽ phải chi tiền ra để nâng cấp máy tính của mình và như vậy phần lớn bộ phận người dùng sẽ bị cho ra rìa. Theo tôi, các ngôn ngữ lập trình phải thật đơn giản và tiện lợi cho người dùng để họ có thể tạo sản phẩm phù hợp với mình chứ không thể đi theo hướng ngược lại khi mà bắt họ phải tự bơi hoặc là chết chìm được.

Kotlin cũng hỗ trợ các libraries cũng đòi hỏi việc ta tốn nhiều chi phí nếu bạn thật sự muốn nó đoàng hoàng. Ít ra thì Google cũng đang cố gắng giải quyết vấn đề trên bằng cách cải thiện quá trình tối ưu hóa của nó.

Web Apps

Rất vui khi Google I/O tung bố Android web app integrations. Google có lẽ đã hiểu rằng để Android có thể phát triển thì phải tập trung vào mảng web apps cho nó.

Trong tương lai không xa thì sẽ không ai dùng Java hay Kotlin để làm app cả. Google đang rất nổ lực để cải thiện tình hình trên khi hãng liên tục hỗ trợ cộng đồng lập trình viên của Java. Và Topdev hi vọng web app sẽ trở lại một cách huy hàng trên ngôn ngữ lập trình Java và Kotlin.

Nguồn: Topdev via Hackernoon

Tham khảo thêm các vị trí tuyển dụng lập trình android tại đây

Tình hình AI tại thị trường Việt Nam – Đầy khó khăn và thách thức

Tình hình AI tại thị trường Việt Nam - Đầy khó khăn và thách thức

Cứ thử nhắc tới “artificial intelligence”, “machine learning”, hay “neural nets” cho bất kì nhóm software engineers nào mà bạn gặp, tôi bảo đảm bạn sẽ nghe một đống chuyện từ họ. Trong thời đại này, tất cả các ông lớn về công đều sẵn sàng chi mạnh tay để có thể tối ưu hóa những công nghệ đấy vào sản phẩm của họ. Kể cả những cá nhân software engineer trẻ cũng cố gắng tham gia vào mỏ vàng trên.

Artificial intelligence thực chất chính là cách ta tái tạo và mô phỏng theo trí não của con người. Mục tiêu là để cho ra đời những bộ máy có khả năng nhận ra những chi tiết mà chỉ có con người mới hiểu được như cảm xúc. Và đó không phải là một điều dễ dàng. Chính vì thế mà hôm nay, Vietcetera phỏng vấn anh Herve Vu Roussel, Head of Data Engineering tại AI firm Sentifi, để chia sẻ về những suy nghĩ của anh về AI tại Việt Nam. Chúng ta sẽ hiểu thêm về một trong những người đi đầu về Vietnam’s AI cũng như cộng đồng và khả năng phát triển cho AI tại thị trường Việt Nam.

Tình hình phát triển AI của Việt Nam như thế nào?

Đây là một câu hỏi khó. Bởi không như San Francisco hay Montreal, Vietnam’s AI  vẫn chưa thật sự được phát triển hết tiềm năng của nó. Chúng ta vẫn còn đang đi lên. Nói đến một số cá nhân/ tổ chức nổi bật thì tôi nghĩ tới Tinypulse và Trusting Social. Với khảo sát, phân tích cảm xúc, natural language processing, Tinypulse nhắm tới cải thiện tinh thần cho nhân viên và khiến họ gắn bó với công ty. Trusting Social, theo tôi, là một ngôi sao đang lên. Là đối tác với Viettel, công ty vừa kêu gọi vốn thành công lên đến vài triệu đô. ý tưởng đằng sau Trusting Social là liên quan đến việc tính toán và phỏng đoán các con số. Khá là thú vị bởi khả năng ứng dụng cho nhiều lĩnh vực khác nhau của nó.

Tình hình AI tại thị trường Việt Nam - Đầy khó khăn và thách thức

Tôi nghĩ thì hiện tại Sentifi vẫn đang đứng đầu những công ty mạnh về AI tại Việt Nam. Chúng tôi là công ty đi tiên phong về sử dụng mảng trí tuệ nhân tạo trong non-trivial applications. Nhóm data engineering của chúng tôi sử dụng machine learning, deep learning, và AI để phân tích hơn một tỉ tweets mỗi tháng để thu được insight từ đám đông. Sau đó dựa vào những data đó chung tôi liên hệ với những phân tích từ thị trường tài chính. Đó là cách giải thích đơn giản nhất mà tôi có thể đưa ra. Điều làm khác biệt Sentifi với các đối thủ khác nằm ở việc các sản phẩm của hãng đều tích hợp những công nghệ đi đầu thị trường Việt Nam

Tình hình AI tại thị trường Việt Nam - Đầy khó khăn và thách thức

Tôi tin rằng trong tương lai không xa, AI sẽ giúp cải thiện chất lượng dịch vụ tại Việt Nam. Ví dụ như giờ bạn đã có thể khám online, có một AI chuyên theo dõi sức khỏe và chăm sóc nhắc nhở bạn hay việc gửi hình X-quang để cho nó phỏng đoán bệnh tình mà không hề thua kém một bác sĩ thực thụ.

Có cộng đồng AI nào lớn tại Việt Nam không?

Thật không may là hiện tại vẫn chưa có. Chỉ vài nhóm nhỏ lẻ trên Facebook với tính tương tác thấp. À mà tháng 3 vừa rùi, IBM AI XPRIZE có tổ chức sự kiện AI đầu tiên tại Việt Nam. Với hơn trăm người tham dự. Bạn có thể nói mọi người đều rất tò mò và muốn tìm hiểu về AI nhưng phần lớn đều chưa có kinh nghiệm hay đủ trình độ để hiểu sâu về nó. Vì vậy mà chúng tôi cũng đang cố gắng thúc đẩy AI tại Việt Nam nhưng nó sẽ mất thêm một khoảng thời gian nữa lận.

Từng làm việc vài lần với AI XPRIZE cũng như hướng dẫn nhiều teams tại Việt Nam, XPRIZE là một tổ chức phi lợi nhuận chuyên khuyến khích tranh tài nhằm cải thiện kiến thức chung của thế giới. Tổ chức này cũng lên một kế hoạch phát triển AI trong vòng 4 năm nhằm giải quyết các vấn đề nan giải của nhân loại. Phần thưởng cho team thắng cuộc là 5 triệu đô và cơ hội được diễn thuyết tại TED 2020. Ngoài ra nhiều công ty và nguồn lực sẽ hộ trợ cho các nhóm tham gia XPRIZE. Tôi muốn gửi thông điệp rằng Việt Nam có tiềm năng rất lớn trong AI.

Tình hình AI tại thị trường Việt Nam - Đầy khó khăn và thách thức

Nói về công việc của tôi với XPRIZE, tôi chủ yếu nắm vai trò hướng dẫn và giúp các team Việt Nam. Hiện các nhóm đều có cho mình những project khá thú vị. Như Altoera với ý tưởng kết hợp computer vision, hardware, và software nhằm tạo ra tính năng image recognition để phát hiện sâu bệnh của cây trồng. Hiện mọi thứ chỉ ở software nhưng trong tương lai thì chúng tôi sẽ phát triển cả robot để chúng theo dõi và diệt trừ sâu bệnh luôn. Một project khác cũng rất có triển vọng là Dropdeck, với ý tưởng kết nối các nhà đầu tư với  startup entrepreneurs và giúp bảo đảm các startup có thể tìm kiếm nguồn vốn đầu tư dễ dàng hơn.

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

Lời khuyên của anh đối với những bạn muốn đột phát vào ngành này?

Hãy tìm kiếm thông tin tuyển dụng của các công ty AI và vào làm cho họ. Ngoài ra hãy có những project của riêng mình cũng như tham gia một số cuộc thi trên Kaggle. Ngoài ra còn rất nhiều nguồn online với hình thức tượng tự như Coursera, gồm các khóa học từ các đại học danh tiếng trên thế giới. Không có lí gì mà bạn không thể tự học trong hời đại internet này.

Tình hình AI tại thị trường Việt Nam - Đầy khó khăn và thách thức

Điều gì đang cản trở sự phát triển của AI tại Việt Nam?

Một trong những vấn đề lớn nhất là đầu vào quá khó. Mất 1 đến 2 năm chỉ để nghiên cứu tìm hiểu là chuyện thường ở huyện, rồi việc thiếu hụt về sức người – không có đủ người giỏi hiểu biết về machine learning cũng như data scientists. Hơn nữa, AI còn khá mới lạ, ngay cả trên thế giới thì số lượng công ty chuyên về trí thông minh nhân tạo cũng còn khá ít, như vậy sẽ khiến chi phí cho phát triển tăng rất nhiều.

Một vấn đề nan giải khác tại Việt Nam là việc có quá ít dữ liệu và thông tin. Mà khi nói về AI thì data luôn đứng top quan trọng hàng đầu. Việt Nam rất nghèo về khoảng này. Nói chi đâu xa, khi bạn xài Google Maps, thỉnh thoảng sẽ có những đường không hề có trên map. AI thực chất chính là việc chúng ta thu thập và sử dụng data để tạo ra nó. Như vậy nếu không có dữ liệu thì AI coi như chết.

Tình hình AI tại thị trường Việt Nam - Đầy khó khăn và thách thức

Cái nữa là việc phát triển AI vẫn chưa được ủng hộ và khuyến khích tại Việt Nam. Bởi vì do giá lao động còn thấp nên việc áp dụng AI thật sự không hiệu quả. Đơn cử như việc dùng robot bảo vệ. Nội tiền phát triển và bảo trì nó thôi đã mắc  gấp mấy chục lần việc thuê bảo vệ. Vậy AI chỉ thực sự có đất dụng võ khi người Việt mình được cải thiện về đời sống về có mức lương cao.

Tuy vậy, giờ chúng ta đã bắt đầu nghiêm túc hơn về vấn đề trí thông minh nhân tạo. Bạn có thể thấy Google đang dần trở thành một công ty về AI. Điều Việt Nam có thể làm là đẩy mạnh nhiều chương trình cho data engineering, data mining, và databases. Nhưng quan trọng nhất là tạo ra một cộng đồng và nuôi dưỡng nó. Thật may là công nghệ phát triển rất nhanh. Hồi 10 năm trước, để kiếm được việc liên quan tới AI có thể gọi là không thể bởi nó như chỉ dành cho phim ảnh viễn tưởng thôi. Nhưng giờ thì các start-up AI bắt đầu xuất hiện trên toàn thế giới.

Tình hình AI tại thị trường Việt Nam - Đầy khó khăn và thách thức

Anh có muốn gửi lời chia sẻ gì đến các bạn đọc không?

Bởi việc AI trở nên khá hot nên nhiều startup cứ áp dụng nó tùm lum vào mọi thứ họ có thể. Tôi mong các bạn start-up nên nhớ quan trọng nhất vẫn là sản phẩm của mình có khả năng giải quyết vấn đề thật cho khách hàng thật vẫn là điều quan trọng nhất, AI chỉ là một phương tiện giúp ta đạt được điều đó.

Nguồn: Vietcetera

3 phút làm quen với Vue.js

3 phút làm quen với Vue.js

Vue.js là một thư viện Javascript để xây dựng giao diện người dùng. Năm ngoái nó bắt đầu trở nên khá phổ biến đối với các nhà phát triển web. Nhẹ, tương đối dễ học và mạnh mẽ là ưu điểm của nó.

Bài viết này, trang bị cho một số kiến thức để bắt đầu xây dựng các ứng dụng Vue.js cơ bản. Nào cùng tìm hiểu thôi!

Mẫu cú pháp và dữ liệu

Cốt lõi của Vue.js là một cú pháp mẫu đơn giản như sau:

<div id="myApp">
    {{ message }}
</div>

Ghép chúng với đoạn code JavaScript sau:

var myApp = new Vue({
   el: '#myApp',
   data: {
       message: 'Hello world!'
   }
})

Và nó sẽ cho ra kết quả Hello world! Đang được hiển thị trên trang web.

Phần el: #myApp yêu cầu Vue hiển thị ứng dụng bên trong phần tử DOM bằng id của myApp. Đối tượng data là nơi đặt dữ liệu bạn muốn sử dụng trong ứng dụng của mình. Chúng tôi đã thêm một khoá vào đây, message, và tham chiếu trong HTML của chúng tôi như sau:  {{ message }}.

Vue quan tâm liên kết đối tượng data đến DOM, vì vậy nếu dữ liệu thay đổi, trang cũng sẽ được cập nhật.

Đây được gọi là declarative rendering. Bạn chỉ cần chỉ định những gì bạn muốn cập nhật và Vue sẽ biết thực hiện điều đó.

Bạn có thể thay đổi dữ liệu bằng cách này:

myApp.message = 'Some new value';

Directives

Khái niệm tiếp theo bạn sẽ cần phải học là directives. Directives là các thuộc tính HTML có tiền tố v-, thể hiện cách chúng phản ứng với DOM được hiển thị.

Giả sử chúng ta chỉ muốn render một cái gì đó nếu điều kiện là đúng và ẩn nó đi nếu điều kiện đó là sai. Thì chúng ta sẽ sử dụng v-if.

Trong HTML, nó trông như thế này.

<div id="app">
    <p v-if="seen">Now you see me</p>
</div>

Trong JavaScript:

var app = new Vue({
    el: '#app',
    data: {
        seen: true
    }
})

Điều này sẽ dẫn đến việc hiển thị đoạn “Now you see me” nếu thấy trong dữ liệu là đúng. Để ẩn đoạn văn, bạn có thể đặt thành false, như sau:

app.seen = false;

Ngoài ra có rất nhiều directives khác, như v-forv-on, v-bind và v-model.

Xử lý Input của người dùng

Một directive quan trọng bạn cần phải học là v-on. Nó sẽ nối một event listener vào phần tử DOM, để bạn có thể xử lý Input của người dùng. Bạn chỉ định loại event sau dấu hai chấm. Vì vậy, v-on:click sẽ “lắng nghe” các cú nhấp chuột.

<div id="app">
    <button v-on:click="myClickHandler">Click me!</button>
</div>

myClickHandler đề cập đến khóa có cùng tên trong các đối tượng methods . Không cần phải nói, đó là đối tượng mà bạn đặt các method của ứng dụng. Bạn có thể bao nhiêu method mà bạn muốn.

var app = new Vue({
    el: '#app',
    methods: {
        myClickHandler: function () {
            console.log('button clicked!');
        }
    }
})

Điều này sẽ giúp nút đăng nhập chuyển người dùng đến giao diện điều khiển khi nhấp vào nút.

Kết hợp tất cả lại với nhau

Bây giờ chúng ta hãy tạo ra một ví dụ mà chúng ta sử dụng cả dữ liệu và method, kết hợp những gì chúng ta đã học được cho đến bây giờ.

<div id="app">
    <p>{{ message }}</p>
    <button v-on:click="changeMessage">Click me!</button>
</div>

Cùng với JavaScript:

var app = new Vue({
    el: '#app',
    data: {
        message: 'Start message'
    },
    methods: {
        changeMessage: function () {
            this.message = 'The message has changed!'
        }
    }
})

Ban đầu, nó sẽ hiển thị thông báo “Start” trên trang, tuy nhiên sau khi nhấp chuột nó sẽ hiển thị thông báo này đã thay đổi để thay thế.

Từ khóa this đề cập đến trong ví dụ của Vue này chúng tôi gọi là app. Trong trường hợp này, dữ liệu của chúng ta đã tồn tại, vì vậy chúng ta có thể tham khảo dữ liệu message thông qua this.message.

Hy vọng với những kiến thức cơ bản về Vue.js được cung cấp trong bài viết đã đủ để giúp bạn hiểu về Vue.js và có thể bắt đầu tạo các ứng dụng đơn giản với Vue.js.

Tham khảo thêm các việc làm VueJS lương cao tại Topdev.

Nguồn: freeCodeCamp

[Tài liệu] Ebook Kotlin for Android Developers

[Tài liệu] Ebook Kotlin for Android Developers

Dành cho những nhà phát triển muốn tự học trong thời gian ngắn. Nó sẽ chỉ cho bạn các bước để tạo một Ứng dụng Android sử dụng Kotlin làm ngôn ngữ chính. Bạn sẽ học theo tốc độ của riêng mình mà không mất thời gian làm các bài kiểm tra thử và sai.

Với  Kotlin dành cho Nhà phát triển Android,  bạn sẽ học được:

  • Cách tạo ứng dụng Android từ đầu bằng Kotlin. Tất cả những điều cơ bản bạn cần để tạo một ứng dụng.
  • Cách áp dụng ngôn ngữ cho Android. Các tính năng độc quyền cho Android và tương tác với khuôn khổ.
  • Cách sử dụng các công cụ phát triển, tích hợp Kotlin vào Android Studio và sử dụng nó trong các dự án của bạn.
  • Thông qua các ví dụ và cách viết mã,  mọi thứ đều thực tế 100%

Donwload tại đây

Tuyển dụng lập trình android hấp dẫn tại Topdev

UX Tips – Web tốt phải load nhanh dưới 2 giây!

UX Tips - Web tốt phải load nhanh dưới 2 giây!

Như thế nào là 1 trang web có UX tốt? Muốn trở thành UX Design thì các bạn lập trình viên cần lưu ý điều gì? Tất cả đã được giải đáp tại buổi phỏng vấn của TopDev với anh Trần Trọng Thanh – người đồng sáng lập của Nâu Studio xoay quanh những kinh nghiệm quý giá liên quan đến UX/UI.

Xem thêm: Việc làm ux designer lương cao

1/ Được biết Nâu Studio hoạt động thiên về Thiết kế, nên ắt hẳn công ty mình sẽ mạnh về UX/ UI Design – lĩnh vực còn chưa phát triển nhiều tại thị trường Việt Nam?

Vì được vấn đề đó nên mục tiêu và định hướng ban đầu khi thành lập công ty là muốn đào sâu về Front End và UX/UI. Tụi anh làm ra những sản phẩm cho khách hàng & mang tính duy nhất, không dùng đến template, bootstrap hay những CSS frameworks. Nâu Studio hầu hết đều code lại từ đầu, làm sao để giao diện, theme của mình hoàn toàn khác biệt. Tất nhiên bên mình cũng sử dụng những nguyên tắc, chuẩn mực UX cơ bản nhất để build như các best practices về vị trí đặt button, menu, kích thước font…

2/ Vậy 1 bạn lập trình Web muốn tìm hiểu về UX thì các bạn cần phải tập trung vào những điểm nào?

Thực ra đối với các lập trình viên, đầu tiên các bạn khoan quan tâm đến UX mà hãy rèn luyện kĩ năng lập trình của mình trước. Khi đã thuần thục rồi, thì lúc đó mới bắt đầu thoát ra hơn, suy nghĩ thêm những thứ liên quan đến trải nghiệm người dùng, những thứ không nằm trong bài vở mà thuộc về kinh nghiệm. Khi nói về UX, đòi hỏi các bạn phải làm nhiều, đồng thời phải có những tích lũy về kiến thức như đọc những bài viết, sách UX liên quan

Thực sự là ở Việt Nam mình cũng chưa có những trường lớp nào chuyên dạy UX 1 cách bài bản. Nếu có thì hầu hết vẫn dừng ở mức sử dụng công cụ, còn để thực sự hiểu UX thì mình cần có nền tảng liên quan đến principles. Trong đó anh thấy 1 cuốn sách rất hay mà các bạn nên đọc là Don’t Make Me Think, phù hợp với cả những bạn chưa biết gì về UX Design. Quyển này đặt ra những vấn đề tuy rất hiển nhiên nhưng chúng ta hầu như không để ý, hệ thống hóa lại các vấn đề đó thành những principles. Từ những kiến thức nền tảng đó, các bạn mới đọc đến những cuốn sách đi sâu vào thực tế.

Ngoài ra khi bắt tay vào làm giao diện thiết kế, việc bắt chước điều hoàn toàn bình thường. Hãy nghiên cứu những trang web được giải thưởng vì đây là những showcase rất hay để học hỏi.

3/ Khi tuyển dụng các bạn lập trình viên cho Nâu Studio, không biết anh có yêu cầu skill nào đặc biệt không?

Anh cũng thay đổi tiêu chuẩn tuyển dụng của mình 1,2 lần để đạt được mục đích tuyên dụng nhưng định hướng trước đây và hiện tại vẫn luôn nhấn mạnh vào thái độ của các bạn với công việc thông qua những trao đổi trực tiếp hay khi mình đưa ra những tình huống để các bạn xử lý. Từ đấy mình sẽ đánh giá được các bạn có thích công việc hay không, có nghiêm túc, có chuyên nghiệp hay không.

Anh lúc nào cũng muốn tìm 1 nhân sự, 1 người đi lâu dài với công ty nên tụi anh rất chú trọng đến định hướng về sự nghiệp của các bạn. Các bạn lập trình viên vào Nâu Studio phải xác định rõ ràng là các bạn ấy có thực sự thích Front End hay không, có thật sự thích những công việc mà anh sẽ giao cho các bạn làm hay chỉ vào làm cho đúng giờ, đúng ngày.

Điểm khác nữa là khả năng tư duy. Đây là điểm mà các bạn lập trình viên rất cần có để tiến xa hơn trong công việc. Đối với các bạn fresh, Nâu Studio có đưa ra 1 bài test về IQ trên platform online. Sẽ có điểm ngưỡng để anh đánh giá mức độ phù hợp với công việc vì tư duy logic là điều không thể thiếu ở các bạn lập trình viên. Khả năng giao tiếp, soft skills thì mình có thể định hướng và hướng dẫn sau.

4/ Nói về thái độ làm việc của lập trình viên, thì anh có thể chia sẻ thêm về văn hóa của Nâu Studio?

Như đã đề cập trên website, Nâu Studio tập trung vào trải nghiệm của người dùng và trải nghiệm của lập trình viên. Trải nghiệm của người dùng tức là những sản phẩm, những thành quả của Nâu Studio đưa ra đều rất chú ý đến UX và UI. Về phía các bạn lập trình viên thì anh thường nhắc nhở các bạn chú ý đến những chi tiết giúp tăng UX cho người dùng, chẳng hạn như button phải có hiệu ứng chạm để người dùng biết là họ đã chạm đúng. Hoặc như 1 link theo chuẩn Mobile-first thì phải có kích thước tối thiểu là 40 pixel vì nếu các bạn làm quá nhỏ, thì tay rất khó đụng tới được vùng chạm. Ngoài ra còn có những chi tiết về màu sắc, font chữ… phù hợp với thiết bị di động hay desktop. Đây là những bước đầu tiên mà các bạn cần chú ý, để sau này khi các bạn lên vị trí Senior, có thể truyền lại cho các bạn mới.

Ngoài ra, văn hóa của Nâu Studio là chia sẻ những gì mà các bạn tìm hiểu được thông qua kênh chat chung. Tụi anh cũng có riêng 1 ngày là Friday Sharing để 1 bạn đại diện đứng lên thuyết trình về chủ đề tự do, không nhất thiết đến kĩ thuật vì buổi thuyết trình có sự tham gia của cả Designer, HR, Admin, Manager, Dev…

Điểm nữa mà Nâu Studio cũng rất tự hào đó là khâu đào tạo mảng đào tạo nhân sự. Tụi anh xác định ngay từ đầu các bạn lập trình viên là những người sẽ đi lâu dài cùng mình, là những người làm những dự án lớn và phức tạp hơn mà tụi anh sẽ giao nên tụi anh đào tạo các bạn rất kĩ. Như hiện tại Nâu Studio tập trung vào Front End và Javascript nên các bạn sẽ được nắm vững các kiến thức nền, sau đó mới học tiếp những nội dung khác như ReactJS, NodeJS…

Nguyên tắc làm việc của Nâu Studio là rất chú trọng quy ước khi lập trình – đây cũng là trải nghiệm cho lập trình viên mà anh muốn nói đến. Nâu Studio có 1 bộ quy chuẩn cho việc viết code, cùng những công cụ để kiểm tra các bạn đã viết đúng hay chưa, từ đó mới có thể gò các bạn vào 1 nếp để viết cùng 1 style với nhau, cùng best practice với nhau. Điều này đặc biệt có lợi trong trường hợp phải thay người mới thì họ sẽ bắt đầu rất nhanh, hạn chế những khó khăn khi đọc code do thay đổi văn phong, quy ước.

5/ Quy trình này là của riêng Nâu Studio hay có thể áp dụng được ở những nơi khác?

Team nào cũng có thể áp dụng được nếu họ thấy phù hợp.. Anh đang tổng hợp lại các tài liệu và open source tại http://code.naustud.io/ và  sẽ chia sẻ bộ quy ước này rộng rãi đến cộng đồng trong thời gian tới . Bộ quy ước này cũng dựa trên những quy ước đến từ các công ty lớn như Javascript thì dựa trên quy ước của Airbnb, Google cũng như những công ty lớn khác…

6/ Thiết kế UX cho 1 website nước ngoài sẽ có những khác biệt gì so với thiết kế UX của 1 website cho người Việt Nam, chẳng hạn cho những user là người lớn tuổi?

Nói ví dụ về icon thì bọn anh đều có text đi kèm, dùng dạng label nhiều hơn. Còn về cách sắp đặt vị trí thì bên anh vẫn chưa thấy có gì quá khác biệt. Có thể là vì các sản phẩm của Nâu đa phần vẫn tập trung vào đối tượng người trẻ, biết về kĩ thuật nên mình cùng chỉ dựa trên những practices chung. Trong trường hợp có yêu cầu với các đối tượng đặc biệt thì bên anh sẽ tổ chức những buổi usability testing với những đối tượng người dùng thật để đánh giá phản ứng của họ với giao diện thử nghiệm . Dựa trên đó mình sẽ lưu ý lại và đưa ra những điều chỉnh phù hợp.

7/ Theo anh những điểm nào để đánh giá thành công về mặt UX của 1 website?

Theo tiêu chuẩn của Nâu Studio, website phải load nhanh dưới 2s. Tụi anh làm được điều này vì những công nghệ của NodeJS cũng đã tối ưu và rất nhanh. Ngoài ra, tụi anh cũng áp dụng các công cụ tự động hóa để tối ưu Front End từ lúc code cho đến lúc deploy.

Thứ 2 là website đó phải mobile-friendly như font chữ phải vừa mắt, kích cỡ nút và link phải phù hợp, giao diện tùy ứng (responsive UI) phải cung cấp được thông tin phù hợp nhất cho các user sử dụng di động. Các thống kê của 2017 xác nhận là người dùng đã vào web bằng thiết bị di động với màn hình chạm nhiều hơn trên máy tính (laptop, desktop), nên Mobile-first là điều bắt buộc. Tất cả các website mà Nâu Studio làm đều xuất phát từ Mobile, sau đó mới mở ra layout cho desktop. Cách tiếp cận code cũng như vậy như Code CSS cho Mobile trước tiên, sau đó mới điều chỉnh cho những giao diện lớn hơn.

Đa phần thì các framework, template của WordPress chẳng hạn thì vẫn theo Desktop trước. Với cách làm này, thì CSS ban đầu mình viết ra sẽ chỉ chạy được trên Desktop, lúc này nếu mở bằng điện thoại thì cả trang web sẽ bị scale xuống, chữ rất nhỏ. Ngược lại, CSS đầu tiên viết ra sẽ dành cho Mobile thì mọi thứ sẽ dễ điều chỉnh hơn về sau.

Cách làm này đối với thế giới thì không mới nhưng ở Việt Nam thì còn khá mới.

8/ Định hướng sắp tới của Nâu Studio?

Trước đây Nâu tập trung vào outsource, làm services cho khách hàng. Nhưng sắp tới công ty đang tập trung vào sản phẩm phần mềm về quản lý nhân sự, được build theo hướng Software as a Service và sẽ được ra mắt vào cuối tháng 7. Unique Selling Point trong phần mềm này là phương pháp quản lý KPI mới: Objective – Key Results chia công việc thành những objectives và update tiến trình để đi từ 0 đến 100%. Mỗi mục tiêu sẽ được chia nhỏ theo từng cấp bậc: người quản lý, trưởng phòng ban, các thành viên…. Từ đó mình sẽ có được những cảnh báo và điều chỉnh kịp thời, tương tự như những gì Google đang làm để đưa 1 bộ máy lớn đi lên.

Nguồn: TopDev via Techtalk

Bài học cho các Developer sau lỗi bug video từ Facebook

Facebook rất thích push content, đặc biệt là việc sử dụng video để quảng cáo. Và các bạn biết đấy, bản chất của video là những bức ảnh chuyển động. Người xưa có câu trăm nghe không bằng một thấy, giá trị của những video là rất lớn khi nói đến hiệu ứng quảng cáo.

Đó cũng là một trong những tham vọng của ông lớn Facebook với tính năng chèn video vào khung cover của các page trên Facebook.

 

Vốn là một admin của trang công động trên facebook với vài ngàn like, tôi khá tò mò về tính năng mới này.

Quá trình cài đặt khá dễ dàng và nhanh chóng. Bạn chỉ cần vào mục cover, chọn clip và chỉnh vị trí cũng như thêm cái thumbnail. Thế là bạn đã hoàn thành hết rồi đấy… Tuy nhiên thực tại lại hoàn toàn ngược lại.

Cái gì thế này? Đã sai ở chỗ nào nhỉ? Mặc dù bạn đã theo đúng hết theo chỉ dẫn, mọi thứ đều ổn và không hề có bất kì sai sót nào trừ việc nó hoàn toàn không thể làm được. Kết quả lúc nào cũng chỉ là bản báo lỗi hết sức ngắn gọn như gáo nước lạnh tạt thẳng vào mặt.

Và như mọi người dùng khác, bạn sẽ thử làm lại từ đầu với hi vọng biết đâu kết quả sẽ khác đi. Tuy nhiên lúc này một lỗi khác lại xuất hiện, video của bạn đã biến mất khỏi trang một cách ảo diệu.

Ngạc nhiên chưa! Content của bạn ra đi vĩnh viễn!

Thế là video mà bạn được mấy trăm like, comment đã biến mất hoàn toàn.

Nói cách khác nó bị xóa bởi một bug bí ẩn và coi như mất trắng tất cả công sức bạn bỏ ra để seed và chạy ads cho video đó.

Vậy giờ thì phải làm sao?

Gọi Facebook?

Tin buồn là cho dù bạn có gọi đi nữa thì cũng chả được ích lợi gì bởi họ sẽ cho rằng đó là lỗi của users, của chính bạn??

Nguyên văn chính xác là:

“Facebook đã phân tích vấn đề và xác định rằng video/post đó bị xóa bởi user. Đây là điều rất đáng tiếc bởi khi nó bị xóa bởi user thì sẽ không thể phục hồi được nữa”

Publish video lại?

Nhưng như vậy cũng có nghĩa là bạn đã chấp nhận mất đi tất cả lượng like, comment, share khổ cực kiếm được.

Bài học được rút ra là gì dành cho các software developer

Hãy biết chân trọng giá trị content của user. Vì thế hãy luôn cho thêm option hỏi họ có chắc không khi muốn xóa một nội dung nào đó.

Đây là bài học mà hẳn các mobile developer đều đã thuộc lòng. Cho người dùng tính năng access mạnh mẽ nhưng đồng thời cho phép họ revert lại những hành động trên.

 

Tôi hi vọng các developer tại Facebook cũng như các hãng công nghệ khác học được bài học qua vấn đề trên:

  • Đừng để có bất cứ lỗi nào có khả năng xóa content của người dùng
  • Cho dù user có muốn xóa content thì vẫn có tính năng phục hồi cho họ
  • Hãy mạnh dạng chấp nhận lỗi của mình thay vì cứ đổ lên người dùng

Với tư cách là một người dùng, tôi thấy bài học cuối cùng là quan trọng nhất. Mặc dù tôi đã tìm mọi cách chứng minh như dùng account khác nhau và quay clip lại nhưng bên Facebook vẫn tỏ ra thờ ơ và mặc định đó không phải lỗi của họ. Họ chỉ xin lỗi vì sự phiền toái do nó gây ra nhưng như vậy thì có giải quyết được gì đâu…

Nguồn: blog.topdev.vn via hackernoon

5 điều tôi không biết trước khi học code

Nếu bạn là một coder mới vào nghề đây là cơ hội tốt để bạn biết về nhiều thứ.

Tôi đã học code trong khoảng một tháng rưỡi và đã đạt được những tiến bộ vượt ngoài mong đợi khả năng của mình.

Tôi chắc chắn đã có những chia sẻ về cuộc chiến với JavaScript trong một bài viết nào đấy. Tôi đã gặp khá nhiều vấn đề khi tiếp cận với code

Vì đây là những điều tôi đã không biết trước khi học code

Không chỉ có Google

Suốt những năm tháng còn ở trường học tôi luôn nghĩ rằng “không chỉ Google”. Các giáo viên và giáo sư là những người cho tôi điểm chứ không phải là Google. Rất nhiều lần tôi tự áp đặt suy nghĩ đó cho mình. Bởi vì, tôi muốn làm cho cuộc sống của tôi trở nên khó khăn hơn.

Khi bắt đầu học code tôi cũng vận dụng tâm lý đó.

Mặc dù tôi biết rằng không có cách nào để biết tất cả mọi thứ – mặc dù xung quanh tôi có rất nhiều người (bạn bè, đối tác của tôi và các giáo viên của Treehouse) – Tôi vẫn cố gắng tự giải quyết vấn đề của mình mà không cần quan tâm tới mọi thứ xung quanh. Tôi chỉ tin tưởng vào trí nhớ của mình và các ghi chú, một vài giả định hợp lý. Phải nói rằng điều đó hoàn toàn không có lợi cho việc học tập.

Khi bắt đầu học code, không có cách nào để giữ lại mọi thứ. Có quá nhiều thông tin trong đó: thư viện, frame, ngôn ngữ, thay đổi cú pháp và các tiến trình, phương pháp không phù hợp. Có quá nhiều thứ ở đó.

Cộng đồng lập trình được xây dựng dựa trên sự chia sẻ kiến thức và điều đó không làm giới hạn kiến thức của bạn

Bài học: Google mọi thứ.

Không chia sẻ công việc của bản thân

Tôi ghét khi giáo viên nói “hãy trình bày về công việc của bạn.”

Tôi nghĩa là, nếu tôi có thể giải quyết phương trình trong đầu tại sao tôi phải viết nó ra? Tại sao tôi không thể bỏ qua giai đoạn viết câu trả lời và thực hiện nó?

Vâng, có nhiều lý do khiến tôi không muốn chia sẻ về công việc của mình. Nhưng đến khi tôi học code mọi thứ phải thay đổi: Bạn phải khai báo với chương trình của bạn những gì bạn đang làm. Nếu không, nó sẽ không (hoặc không thể) làm điều đó.

Nếu bạn muốn ứng dụng của bạn tính điểm số của người chơi hoặc bạn muốn trang web của mình chỉ hiển thị 10 kết quả tìm kiếm trên mỗi trang, bạn phải thông báo cho chương trình của mình những gì bạn muốn. Chỉ suy nghĩ nó trong đầu bạn sẽ không làm cho nó hiển thị trên màn hình được.

Bài học: Hãy chia sẻ về công việc của bạn.

Không bắt đầu từ việc nhỏ

Bạn có thể dễ dàng có được ý tưởng lập trình hoặc xây dựng 1 webside – các dự án có thể mất hàng giờ / tuần / tháng để hoàn thành.

Nhưng xu hướng thường thấy, đặc biệt là đối với các lập trình viên mới, thường bắt đầu từ  bước hai hoặc ba thay vì bắt đầu từ đầu.

Không phải là vì họ nghĩ rằng bước đầu tiên là không quan trọng, nhưng vì họ đã bỏ lỡ nó. Tôi biết điều đó vì đã có nhiều hơn một lần tôi lâm vào tình cảnh như vậy và tất cả chỉ vì tôi đã tìm ra công thức cần thiết nhưng không thêm nó vào dự án của tôi (xem mục số 2 trong danh sách này).

Nhưng thực tế là tất cả các ứng dụng, trang web, và vv đều bắt đầu với một dòng code.

Bài học: Bắt đầu từ những bước nhỏ

Đa nhiệm

Khi tôi bắt đầu viết code đầu tiên, tôi đã làm việc này liên tục. Nếu tôi chưa thể giải quyết được một đoạn code nào đó , tôi sẽ chuyển sang làm phần khác. Sau đó, nếu tôi vẫn không thể giải quyết được, tôi sẽ chuyển sang làm một thứ khác hoặc trở lại với những gì tôi đã làm trước đó.

Tôi đã không thực sự hiểu hầu hết những điều tôi đã làm trong công việc. Và cũng hiếm khi nào tôi thực sự hiểu những gì mình đã làm để code hoạt động.

Bằng cách tập trung vào điều mình đang làm, bạn sẽ cảm thấy  khi bạn hoàn thành xong mỗi phần, bạn hiểu về code của mình và có thể nhanh chóng xác định được lỗi.

Bài học: Tập trung vào một điều. Hoàn thành nó. Sau đó, chuyển sang phần tiếp theo

Không phải tôi, đó là bạn

Trong trường hợp này, “tôi” là bạn (developer) và “bạn” là code của bạn.

Hơn một lần tôi nhìn chằm chằm vào trình chỉnh sửa văn bản của mình, đọc qua code của tôi để tìm ra lý do tại sao điều xảy ra không được như tôi mong đợi. Sau khoảng 5 phút, tôi sẽ nhận ra có một lỗi đánh máy, một lỗ hổng trong logic của tôi, hoặc tôi đã không khai báo các chức năng theo đúng thứ tự. (Điều cuối cùng xảy ra chỉ một ngày trước).

Cũng như tôi đã làm, thật dễ dàng để hiểu răng code của bạn không hoạt động vì thiếu điều gì đó. Nhưng đa phần , nó không làm việc vì một điều gì đó mà bạn – dev – đã làm.

Vì vậy, phải hiểu rằng chính bạn là người đã mắc phải lỗi, không phải code của bạn, bạn không chỉ phải biết code mà còn phải biết sữa lỗi. Một ngày nào đó bạn làm việc với tư cách như một developer thực thụ, sửa lỗi code sẽ khiến công việc của bạn dễ dàng hơn 10 lần

Bài học: Đây không phải là lỗi của code. Đó là lỗi của bạn.

Tôi không muốn đi quá sâu vào cuộc hành trình học code của mình. Nhưng, 5 điều tôi không biết trước khi học code đã có một tác động đáng kinh ngạc về cách tôi tiếp cận code, cũng như thực tế khả năng viết code của mình

Nguồn: blog.topdev.vn via hackernoon.com

 

Top 10 PHP frameworks dành cho các dự án Web mà bạn cần biết

Các bạn hẳn cũng biết việc chọn một framework thích hợp với PHP project của mình sẽ quyết định tính thành bại của nó. Bài viết này chính là nhằm mục đích giúp bạn chọn ra được PHP framework tốt nhất cho sự nghiệp lập trình web của bạn.

PHP được xem là một trong những ngôn ngữ script nổi tiếng nhất dành cho server. Ngay từ lúc được khai sinh ra vào 1995, tính phức tạp của web projects đã trở nên quá cao khiến cho việc code từ số không trở nên vô cùng khó khăn. Và như vậy, PHP framework trở thành một biện pháp vô cùng tuyệt vời. Trong bài viết này, chúng tôi sẽ giới thiệu cũng như phân tích và so sánh 10 PHP framework thông dụng nhất để bạn có thể chọn ra một framework thích hợp nhất.

Các lợi ích từ việc dùng PHP framework

Vì sao có rất nhiều developer lại chọn dùng PHP frameworks? Đơn giản là nó giúp công việc của chúng ta trở nên đơn giản hơn rất nhiều. Và sau đây là một số đặc điểm nổi bật của PHP frameworks:

  • Giúp đẩy nhanh tiến độ cho quá trình phát triển
  • Giúp bạn viết ra code vừa gọn, sạch mà lại tái sử dụng được.
  • Cho phép khả năng mở rộng tùy thuộc vào project của bạn
  • Được thiết kế theo MVC (Model-View-Controller) pattern
  • Phù hợp với cách thức mới để phát triển web, ví dụ như object-oriented programming.

Tuy vậy với 10 PHP frameworks thì có sự khác biệt như thế nào giữa chúng? Hãy cùng tôi so sánh và phân tích chúng:

Xem tin tuyển lập trình viên PHP đãi ngộ tốt trên TopDev

FuelPHP framework

Là một full-stack PHP framework với khả năng cho phép người dùng tinh chỉnh theo ý muốn, FuelPHP không chỉ hỗ trợ MVC pattern mà cả phiên bản mới là HMVC (Hierarchical MVC). Nó còn có một optional class gọi là Presenter (hồi trước thì có tên là ViewModel) với tính năng tương tự như sự kết hợp của Controller và View layers với khả năng tạo ra Views.

FuelPHP bản chất chính là một modular với khả năng mở rộng, cũng như là an toàn thông tin với các tính năng như input, URI filtering và output encoding. FuelPHP còn có nguồn tự liệu khá phong phú và thú vị mà bạn có thể tìm hiểu thêm tại đây.

Slim PHP framework

Slim cũng thuộc hàng top các framework và là một micro-framework nhưng sẽ cung cấp cho bạn mọi thứ cần thiết để tạo những ứng dụng nhỏ và vừa, mà nếu dùng “full-stack” PHP framework sẽ được xem là lãng phí.

Slim được dùng bởi các developer khi muốn phát triển RESTful APIs cũng như services. Nó có nhiều tính năng khá nổi bật như client-side HTTP caching, URL routing, session và cookie encryption. Ngoài ra, Slim còn hỗ trợ cả flash messages  xuyên suốt HTTP requests. Điểm cộng khác là guide hướng dẫn Slim khá dễ hiểu.

Phalcon PHP framework

Phalcon được công bố vào 2012 và nhanh chóng tạo ra cơn sốt trong giới PHP developer. Phalcon có tốc độ xử lí nhanh vì nó được viết trên C và C++ nhằm có khả năng đạt được hiệu năng cao nhất có thể. Đừng lo, bạn sẽ không phải học ngôn ngữ lập trình C đâu bởi tất cả các tính năng của nó đều dành cho PHP classes và chỉ cần xài ngay vào luôn.

Phalcon có thể xem như là một phần mở rộng của C, với cấu trúc được thiết kế nhằm giảm thiểu vấn đề overhead, thường gặp phải đối với các MVC apps. Phalcon không chỉ tăng tốc độ execution mà còn giảm bớt resource usage. Đây là một PHP framework có rất nhiều tính nặng tuyệt vời như universal auto-loader, asset management, security, translation, caching, etc. Bạn có thể xem thêm tại đây.

Phalcon được xếp hạng 2 trong top các PHP framework tốt nhất bởi sitepoint.com vào năm 2014. Tuy vậy, đến 2015 thì nó bị đá văng bởi nhưng PHP framework tiếp theo.

CakePHP framework

Mặc dù đã được 10 năm tuổi, CakePHP vẫn giữ được độ nổi tiếng của mình. Với sự đơn giản, thân thiện với người dùng cũng như tính năng tinh chỉnh templating. Ngoài ra, Cake PHP còn tích hợp cả CRUD feature cực kì hữu ích cho việc tương tác với database. Với phiên bản gần đây, CakePHP 3.x đã có sự cải tiến về session management và modularity. Khả năng tạo ra standalone libraries cũng được nâng cao đáng kể.

CakePHP framework được các hãng như BMW Hyundai chọn để phát triển cho web của họ. Vì thế hãy chon CakePHP nếu bạn web application đòi hỏi tính bảo mật cao bởi nó có tính hợp những tính năng như:

  • input validation,
  • SQL injection prevention,
  • XSS (cross-site scripting) prevention,
  • CSRF (cross-site request forgery) protection, etc.

Zend Framework 2

Zend Framework 2 là một open source framework  dành riêng cho web applications và services dùng PHP 5.3+. Được làm từ 100% object-oriented code cũng như có các tính năng mới nhất của PHP 5.3, bao gồm namespaces, late static binding, lambda functions và closures. Zend PHP framework cực kì mạnh mẽ với đa dạng về configuration option. Chính vì thế mà tuy Zend Framework 2 không phù hợp với các project nhỏ vừa nhưng nó lại cực kì tuyệt vời đối với các ứng dụng phức tạp và lớn.

Các tính năng nổi bật có thể nói tới bao gồm: cryptographic coding tools, drag và drop editor cực kì dễ sử dùng dành cho front-end technologies (HTML, CSS, JavaScript), instant online debugging và PHP Unit testing tools, cũng như tính năng connected Database Wizard. Zend Framework được tạo ra với mục đích giúp ra đời các ứng dụng chất lượng cao cho client với qui mô lớn và chuyên nghiệp.

IBM, Microsoft, Google và Adobe đều sử dụng Zend. Năm ngoái, Zend đưa ra thông báo cho bản cập nhật lớn tiếp theo Zend Framework 3 dành cho PHP 7, nhưng vẫn sẽ hỗ trợ PHP 5.5.

Yii 2 PHP framework

Hãy lựa chọn Yii framework nếu bạn muốn tăng hiệu năng cho website của mình. Nó có tốc độ nhanh nhất trong các PHP frameworks được liệt kê nhờ vào tính năng lazy loading. Yii 2 hoàn toàn là object-oriented và dựa trên nguyên tắc DRY (Don’t-Repeat-Yourself) coding. Nhờ đó mà kết quả là bạn sẽ một code base khá gọn gàn và sạch sẽ.

Yii 2 được tích hợp với jQuery, kèm theo đó là AJAX-enabled features. Ngoài ra, Yii 2 còn sử dụng một kĩ thuật đặc biệt trong skinning và theming nên đối với các bạn đã có kinh nghiệm trong frontend thì Yii 2 rất phù hợp. Không những thế, Yii 2 còn có một class code vô cùng mạnh mẽ với generator có tên gọi là Gii. Rất phù hợp cho object-oriented programming cũng như cung cấp web-based interface để bạn có thể tạo ra code đúng theo ý muốn.

PHPixie framework

PHPixie có tuổi đời khá trẻ với gần 5 năm, được tạo ra như một framework hiệu năng cao dành riêng cho read-only websites. PHPixie cũng dựa trên HMVC design pattern như FuelPHP. Nó được làm từ các components độc lập và PHPixie components là 100% unit tested nên yêu cầu dependencies đối với PHPixie cũng ở mức thấp nhất có thể.

Bạn có thể vào trang web của PHPixie để xem tutorial với chỉ 30p. Ngoài ra, blog của PHPixie cũng là một nơi tuyệt vời để bạn xem qua. Các tính năng tiêu biểu của framework này bao gồm: ORM (object-relational mapping), caching, input validation, authentication và authorization capabilities. PHPixie cũng cho phép bạn dùng HAML markup language, enables schema migration, và có một routing system khá tinh tế.

PHPixie còn được các developer người Ukraina đánh giá là tốt nhất, theo 2015’s Sitepoint survey.

CodeIgniter PHP framework

CodeIgniter là một PHP framework khá nhẹ với hơn 10 năm tuổi. Rất thích hợp để dùng khi bạn không muốn bị vấn đề bị lỗi sai phiên bản PHP, bởi nó hoạt động rất tốt trên tất cả các hosting platforms.

CodeIgniter không hoàn toàn được xây trên chỉ MVC development pattern. Bạn sẽ cần phải dùng tới Controller classes, nhưng vẫn có thể dùng Models và Views được. Tất nhiên là bạn cũng hoàn toàn có thể xài code và naming của mình. CodeIgniter còn cho developer khá nhiều tự do bởi chỉ có nặng 2MB thôi nhưng nếu bạn muốn có thêm sự phức tạp thì có thể add các third-party plugins.

Symfony 2 PHP framework

Các components của Symfony 2 framework được dùng bởi khá nhiều projects nổi tiếng như Drupal 8 CMS, hoặc phpBB forum software, và cả Laravel. Cộng đồng phát triển của Symfony cũng cực kì nhiệt tình và rất hữu ích.

Symfony Components thực chất chính là reusable PHP libraries với khả năng giúp hoàn thành nhiều task khác nhau như: form creation, object configuration, routing, authentication, templating, etc.  Bạn có thể cài bất cứ component với Composer PHP dependency manager.

Và giờ đây, tôi xin giới thiệu với các bạn PHP framework yêu thích nhất của tôi

Laravel PHP framework

Cuối cùng thì chúng ta cũng đến hạng nhất – một framework với cái tên khá là đẹp – Laravel. Mặc dù chỉ mới ra đời cách đây vài năm, Laravel vẫn được xem là PHP frame work nổi tiếng nhất hiện nay. Đó là bởi nó có một hệ ecosystem vô cùng lớn, kèm theo đó, nguồn và hướng dẫn rất chi tiết và hoàn hảo.

Nhưng vũ khí thật sử của Laravel nằm ở những tính năng cực mạnh giúp đẩy nhanh quá trình phát triển ứng dụng tới mức tối đa. Với light-weight templating engine có tên gọi là “Blade” cùng với cú pháp tinh tế cho phép bạn thực hiện những task như: authentication, sessions, queueing, caching và RESTful routing.

Nguồn: topdev.vn via kultprosvet

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

460 khóa học online miễn phí về Programming & Computer Science nên bắt đầu trong tháng 7! (phần 3)

460 khóa học online miễn phí về Programming & Computer Science

Build Your First Android App (Project-Centered Course)
École Centrale Paris via Coursera
★★★☆☆ (2 ratings) | 3rd Jul, 2017

Internet Emerging Technologies
Yonsei University via Coursera
★★★☆☆ (2 ratings) | 10th Jul, 2017

Server-side Development with NodeJS
The Hong Kong University of Science and Technology via Coursera
★★★★★ (2 ratings) | 3rd Jul, 2017

Cybersecurity Fundamentals
Rochester Institute of Technology via edX
★★★★★ (2 ratings) | 25th Jul, 2017

Introduction to Mobile Application Development using Android
The Hong Kong University of Science and Technology via edX
★★★★☆ (2 ratings) | 25th Jul, 2017

Android App Components — Intents, Activities, and Broadcast Receivers
Vanderbilt University via Coursera
★★★☆☆ (2 ratings) | 10th Jul, 2017

Responsive Website Tutorial and Examples
University of London International Programmes via Coursera
★★★★★ (2 ratings) | 10th Jul, 2017

Android App Components — Services, Local IPC, and Content Providers
Vanderbilt University via Coursera
★★★☆☆ (2 ratings) | 10th Jul, 2017

Fundamentals of Computer Architecture
EIT Digital via Coursera
★★☆☆☆ (1 rating) | 10th Jul, 2017

Advanced Algorithms and Complexity
University of California, San Diego via Coursera
★★★☆☆ (1 rating) | 3rd Jul, 2017

Managing an Agile Team
University of Virginia via Coursera
★★☆☆☆ (1 rating) | 3rd Jul, 2017

Cybersecurity and Mobility
University System of Georgia via Coursera
★☆☆☆☆ (1 rating) | 10th Jul, 2017

Getting Started: Agile Meets Design Thinking
University of Virginia via Coursera
★★★★★ (1 rating) | 3rd Jul, 2017

Google Cloud Platform Fundamentals: Core Infrastructure
Google via Coursera
★★★★☆ (1 rating) | 10th Jul, 2017

Running Product Design Sprints
University of Virginia via Coursera
★★★☆☆ (1 rating) | 10th Jul, 2017

Programming Languages, Part C
University of Washington via Coursera
★★★★★ (1 rating) | 10th Jul, 2017

A developer’s guide to the Internet of Things (IoT)
IBM via Coursera
★★★★☆ (1 rating) | 10th Jul, 2017

Interfacing with the Raspberry Pi
University of California, Irvine via Coursera
★☆☆☆☆ (1 rating) | 3rd Jul, 2017

Best Practices for iOS User Interface Design
University of California, Irvine via Coursera
★★★★★ (1 rating) | 17th Jul, 2017

Web Application Development: Basic Concepts
University of New Mexico via Coursera
★★★★☆ (1 rating) | 3rd Jul, 2017

Computing, Storage and Security with Google Cloud Platform
Google via Coursera
★★★★☆ (1 rating) | 3rd Jul, 2017

Reviews & Metrics for Software Improvements
University of Alberta via Coursera
17th Jul, 2017

Database Systems Concepts & Design
Georgia Institute of Technology via Udacity
Self Paced

Professional Android App Development
Galileo University via edX
4th Sep, 2017

Computer Forensics
Rochester Institute of Technology via edX
25th Jul, 2017

Build a Modern Computer from First Principles: Nand to Tetris Part II (project-centered course)
Hebrew University of Jerusalem via Coursera
3rd Jul, 2017

Animation and CGI Motion
Columbia University via edX
24th Jul, 2017

Introduction to TypeScript 2
Microsoft via edX
Self Paced

Introduction to Architecting Smart IoT Devices
EIT Digital via Coursera
24th Jul, 2017

Introduction to Neurohacking In R
Johns Hopkins University via Coursera
24th Jul, 2017

Games, Sensors and Media
University of California, Irvine via Coursera
17th Jul, 2017

Moving to the Cloud
University of Melbourne via Coursera
24th Jul, 2017

Engineering Maintainable Android Apps
Vanderbilt University via Coursera
3rd Jul, 2017

C++ For C Programmers, Part B
University of California, Santa Cruz via Coursera
24th Jul, 2017

Java for Android
Vanderbilt University via Coursera
11th Jul, 2017

Testing with Agile
University of Virginia via Coursera
10th Jul, 2017

Internet of Things: Sensing and Actuation From Devices
University of California, San Diego via Coursera
10th Jul, 2017

Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming
Stanford University via Coursera
3rd Jul, 2017

Документы и презентации в LaTeX (Introduction to LaTeX)
Higher School of Economics via Coursera
3rd Jul, 2017

Google Cloud Platform Fundamentals for AWS Professionals
Google Cloud via Coursera
10th Jul, 2017

算法设计与分析 Design and Analysis of Algorithms
Peking University via Coursera
3rd Jul, 2017

Software Analysis & Testing
Georgia Institute of Technology via Udacity
Self Paced

Architecting Smart IoT Devices
EIT Digital via Coursera
10th Jul, 2017

Cybersecurity and the X-Factor
University System of Georgia via Coursera
10th Jul, 2017

Graph Search, Shortest Paths, and Data Structures
Stanford University via Coursera
3rd Jul, 2017

Web Connectivity and Security in Embedded Systems
EIT Digital via Coursera
3rd Jul, 2017

Software Architecture for the Internet of Things
EIT Digital via Coursera
17th Jul, 2017

Toward the Future of iOS Development with Swift
University of California, Irvine via Coursera
17th Jul, 2017

Probabilistic Graphical Models 3: Learning
Stanford University via Coursera
17th Jul, 2017

Divide and Conquer, Sorting and Searching, and Randomized Algorithms
Stanford University via Coursera
3rd Jul, 2017

Shortest Paths Revisited, NP-Complete Problems and What To Do About Them
Stanford University via Coursera
10th Jul, 2017

Building Arduino robots and devices
Moscow Institute of Physics and Technology via Coursera
10th Jul, 2017

Cybersecurity and the Internet of Things
University System of Georgia via Coursera
3rd Jul, 2017

面向对象技术高级课程(The Advanced Object-Oriented Technology)
Peking University via Coursera
3rd Jul, 2017

Networking and Security in iOS Applications
University of California, Irvine via Coursera
3rd Jul, 2017

ADVANCED(40)

Machine Learning Foundations: A Case Study Approach
University of Washington via Coursera
★★★★☆ (38 ratings) | 3rd Jul, 2017

[New] Deep Learning Explained
Microsoft via edX
Self Paced

Neural Networks for Machine Learning
University of Toronto via Coursera
★★★★☆ (20 ratings) | 10th Jul, 2017

Machine Learning: Regression
University of Washington via Coursera
★★★★★ (19 ratings) | 3rd Jul, 2017

Probabilistic Graphical Models 1: Representation
Stanford University via Coursera
★★★★☆ (17 ratings) | 17th Jul, 2017

Bitcoin and Cryptocurrency Technologies
Princeton University via Coursera
★★★★☆ (15 ratings) | 10th Jul, 2017

Machine Learning With Big Data
University of California, San Diego via Coursera
★★☆☆☆ (13 ratings) | 3rd Jul, 2017

Hardware Security
University of Maryland, College Park via Coursera
★★★☆☆ (11 ratings) | 3rd Jul, 2017

Machine Learning: Classification
University of Washington via Coursera
★★★★★ (8 ratings) | 3rd Jul, 2017

Computational Neuroscience
University of Washington via Coursera
★★★★☆ (8 ratings) | 3rd Jul, 2017

Artificial Intelligence (AI)
Columbia University via edX
★★★★☆ (8 ratings) | 29th Jul, 2017

Parallel programming
École Polytechnique Fédérale de Lausanne via Coursera
★★★★☆ (4 ratings) | 3rd Jul, 2017

Machine Learning: Clustering & Retrieval
University of Washington via Coursera
★★★★★ (4 ratings) | 3rd Jul, 2017

Quantitative Formal Modeling and Worst-Case Performance Analysis
EIT Digital via Coursera
★★★☆☆ (3 ratings) | 10th Jul, 2017

Practical Predictive Analytics: Models and Methods
University of Washington via Coursera
★★☆☆☆ (3 ratings) | 3rd Jul, 2017

Probabilistic Graphical Models 2: Inference
Stanford University via Coursera
★★★★☆ (3 ratings) | 3rd Jul, 2017

Nearest Neighbor Collaborative Filtering
University of Minnesota via Coursera
★★☆☆☆ (2 ratings) | 10th Jul, 2017

Machine Learning
Columbia University via edX
★★★★★ (2 ratings) | 31st Jul, 2017

Relational Database Support for Data Warehouses
University of Colorado System via Coursera
★★☆☆☆ (1 rating) | 3rd Jul, 2017

Cloud Computing Applications, Part 2: Big Data and Applications in the Cloud
University of Illinois at Urbana-Champaign via Coursera
★★★★☆ (1 rating) | 3rd Jul, 2017

Applied Machine Learning in Python
University of Michigan via Coursera
★★☆☆☆ (1 rating) | 3rd Jul, 2017

Approximation Algorithms Part II
École normale supérieure via Coursera
17th Jul, 2017

Basic Modeling for Discrete Optimization
University of Melbourne via Coursera
3rd Jul, 2017

Matrix Factorization and Advanced Techniques
University of Minnesota via Coursera
10th Jul, 2017

System Validation (3): Requirements by modal formulas
EIT Digital via Coursera
17th Jul, 2017

Introduction to Formal Concept Analysis
Higher School of Economics via Coursera
17th Jul, 2017

Introduction to Recommender Systems: Non-Personalized and Content-Based
University of Minnesota via Coursera
3rd Jul, 2017

Information Security: Context and Introduction
University of London International Programmes via Coursera
24th Jul, 2017

Embedded Hardware and Operating Systems
EIT Digital via Coursera
10th Jul, 2017

Cyber-Physical Systems Security
Georgia Institute of Technology via Udacity
Self Paced

System Validation (4): Modelling Software, Protocols, and other behaviour
EIT Digital via Coursera
10th Jul, 2017

Configuration Management on Google Cloud Platform
Google via Coursera
3rd Jul, 2017

Advanced Modeling for Discrete Optimization
University of Melbourne via Coursera
3rd Jul, 2017

Recommender Systems: Evaluation and Metrics
University of Minnesota via Coursera
3rd Jul, 2017

Discrete Mathematics
Shanghai Jiao Tong University via Coursera
3rd Jul, 2017

System Validation: Automata and behavioural equivalences
EIT Digital via Coursera
10th Jul, 2017

Network Security
Georgia Institute of Technology via Udacity
Self Paced

Compilers: Theory and Practice
Georgia Institute of Technology via Udacity
Self Paced

System Validation (2): Model process behaviour
EIT Digital via Coursera
3rd Jul, 2017

Artificial Intelligence
Georgia Institute of Technology via Udacity
Self Paced

Nguồn: medium.freecodecamp.com

460 khóa học online miễn phí về Programming & Computer Science nên bắt đầu trong tháng 7! (phần 2)

460 khóa học online miễn phí về Programming & Computer Science

Software Security  – University of Maryland, College Park via Coursera

Cloud Computing Concepts, Part 1University of Illinois at Urbana-Champaign via Coursera

Algorithmic ToolboxUniversity of California, San Diego via Coursera

C++ For C Programmers, Part AUniversity of California, Santa Cruz via Coursera

Principles of Computing (Part 2)Rice University via Coursera

Beginning Game Programming with C#University of Colorado System via Coursera

Programming Mobile Applications for Android Handheld Systems: Part 2
University of Maryland, College Park via Coursera

Concepts in Game Development
Swinburne University of Technology via Open2Study

Algorithmic Thinking (Part 1)
Rice University via Coursera

Object Oriented Programming in Java
University of California, San Diego via Coursera

Discrete Optimization
University of Melbourne via Coursera

Java Programming: Solving Problems with Software
Duke University via Coursera

Responsive Web Design
University of London International Programmes via Coursera

Introduction to Game Development
Michigan State University via Coursera

The Arduino Platform and C Programming
University of California, Irvine via Coursera

Text Retrieval and Search Engines
University of Illinois at Urbana-Champaign via Coursera

Interactivity with JavaScript
University of Michigan via Coursera

Introduction to Software Product Management
University of Alberta via Coursera

Software Processes and Agile Practices
University of Alberta via Coursera

Algorithmic Thinking (Part 2)
Rice University via Coursera

Front-End JavaScript Frameworks: AngularJS
The Hong Kong University of Science and Technology via Coursera

Front-End Web UI Frameworks and Tools
The Hong Kong University of Science and Technology via Coursera

Cryptography
University of Maryland, College Park via Coursera

Image and Video Processing: From Mars to Hollywood with a Stop at the Hospital
Duke University via Coursera

Advanced Styling with Responsive Design
University of Michigan via Coursera

Julia Scientific Programming
University of Cape Town via Coursera

Cloud Computing Applications, Part 1: Cloud Systems and Infrastructure
University of Illinois at Urbana-Champaign via Coursera

Web Application Development with JavaScript and MongoDB
University of London International Programmes via Coursera

Introduction To Swift Programming
University of Toronto via Coursera

Introduction to Meteor.js Development 
University of London International Programmes via Coursera

Ruby on Rails Web Services and Integration with MongoDB
Johns Hopkins University via Coursera

Client Needs and Software Requirements 
University of Alberta via Coursera

Functional Program Design in Scala
École Polytechnique Fédérale de Lausanne via Coursera

Internet of Things: How did we get here?
University of California, San Diego via Coursera

Data Structures and Performance
University of California, San Diego via Coursera

Interfacing with the Arduino
University of California, Irvine via Coursera

Agile Development Using Ruby on Rails — Advanced
University of California, Berkeley via edX

Java Programming: Arrays, Lists, and Structured Data
Duke University via Coursera

Cloud Computing Concepts: Part 2
University of Illinois at Urbana-Champaign via Coursera

Computer Architecture
Princeton University via Coursera

Java Programming: Principles of Software Design
Duke University via Coursera

Cloud Networking
University of Illinois at Urbana-Champaign via Coursera

Interactive Computer Graphics
The University of Tokyo via Coursera

Algorithms on Strings
University of California, San Diego via Coursera

Single Page Web Applications with AngularJS
Johns Hopkins University via Coursera

The Raspberry Pi Platform and Python Programming for the Raspberry Pi
University of California, Irvine via Coursera

Database Management Essentials
University of Colorado System via Coursera

Internet of Things & Augmented Reality Emerging Technologies
Yonsei University via Coursera

Internet of Things: Setting Up Your DragonBoard™ Development Platform
University of California, San Diego via Coursera

VLSI CAD Part I: Logic
University of Illinois at Urbana-Champaign via Coursera

Wireless Communication Emerging Technologies
Yonsei University via Coursera

Internet of Things: Communication Technologies
University of California, San Diego via Coursera

Networks Illustrated: Principles without Calculus
Princeton University via Coursera

Mastering the Software Engineering Interview
University of California, San Diego via Coursera

Rails with Active Record and Action Pack
Johns Hopkins University via Coursera

Foundations of Objective-C App Development
University of California, Irvine via Coursera

Game Development for Modern Platforms
Michigan State University via Coursera

Data Structures
University of California, San Diego via Coursera

Algorithms on Graphs
University of California, San Diego via Coursera
★★★★☆ (2 ratings) | 3rd Jul, 2017

iOS App Development Basics
University of Toronto via Coursera

App Design and Development for iOS
University of Toronto via Coursera

Approximation Algorithms Part I
École normale supérieure via Coursera

Programming Languages, Part B
University of Washington via Coursera

Advanced Data Structures in Java
University of California, San Diego via Coursera

Agile Planning for Software Products
University of Alberta via Coursera

Multiplatform Mobile App Development with Web Technologies
The Hong Kong University of Science and Technology via Coursera

Nguồn: medium.freecodecamp.com

Ai nói làm lập trình cho Startup không thú vị?

Sự phát triển mạnh mẽ của công nghệ và internet đã xóa nhòa khoảng cách về địa lí cũng như đánh dấu cho sự chớm nở và phát triển vượt bậc của E-Business. Chopp là một công ty công nghệ cung cấp dịch vụ shopping online dành cho mặt hàng bách hóa. Với mục tiêu biến công việc đi chợ hàng ngày trở nên tiện lợi hơn cũng như mang tới một trải nghiệm hoàn toàn mới, Chopp được đánh giá là một trong những startup đầy tiềm năng.

Hôm nay, Topdev hợp tác cùng Chopp để gởi tới bạn đọc buổi phỏng vấn với anh Nguyễn Minh Trường – CEO & Founder của Chopp về những vấn đề và khúc mắc của lập trình viên khi đi xin việc cũng như nhận định về tương lai của ngành công nghệ thông tin đặc biệt là ở lĩnh vực E-commerce.

Anh có thể giới thiệu một chút về quá trình làm việc của mình?

Chuyên ngành chính của mình thật ra là Design. Sau khi tốt nghiệp bên Mỹ thì mình có làm việc cho 1 công ty startup ở Cali trong 2 năm trước khi công ty đó được Facebook mua lại. Sau đó, Trường tới New York để làm việc cho một công ty starup khác nhưng một thời gian cảm thấy không hợp nên lại quay trở lại Cali. Tại đây mình cùng 1 người bạn quyết định làm thử một sản phẩm tại Vancouver- Canada, sau đó cùng 1 người bạn khác mở 1 công ty ở San Francisco giống mô hình Uber nhưng dành cho việc đậu xe. Không may là cả 2 dự án đều không được như mong đợi. Tuy vậy, mình rút ra được rất nhiều bài học quí giá, với sẵn cái tính của mình vốn không chịu bỏ cuộc, mình quyết định trở về Việt Nam và thực hiện dự án tâm huyết tiếp theo là Chopp.

Anh có thể nói thêm về thế mạnh kỹ thuật của Chopp?

Thế mạnh lớn nhất của Chopp là việc sử dụng nhiều công nghệ mới như NodeJs, ReactJs, … Đây là lý do tại sao Chopp xây dựng & vận hành được trên 3 platforms iOS, Android & Native Web trong vòng 20 tháng một cách ổn định & hiệu quả. Và trong thời gian tới thì Chopp sẽ bổ sung thêm phần Realtime Technologies cho Logistics. Hiện tại Logistics đã có một số tên tuổi khá lớn như Uber, Grab, DeliveryNow,.. nhưng Chopp sẽ làm tốt hơn nữa bởi nó chính là mạng sống của của Chopp.

Hiện Chopp có đang gặp khó khăn gì về mặt kỹ thuật không?

Hệ thống kỹ thuật của Chopp có nhiều mảng, xuyên suốt từ người dùng đến vận hành, ngay từ lúc khách hàng order hệ thống tiếp nhận thông tin và tiến hành xử lý, chia đơn hàng, phân công nhiệm vụ ai đi mua cái gì. Không giống với các đơn vị cung cấp dịch vụ logistics hiện nay như Uber, Grab khách hàng chỉ có thể theo dõi vị trí đơn hàng từ 1 cửa hàng, còn Chopp là theo dõi nhiều đơn hàng từ một hệ thống nhiều cửa hàng khác nhau. Như vậy khối lượng công việc để thiết kế ra một ứng dụng như Chopp là cực kì lớn.

Chopp đã đạt được những thành tựu nổi bật cho tới thời điểm hiện tại?

Thật sự mà nói, khi bắt đầu vào làm startup thì cứ như đương đầu với cả một cơn bão thương trường. Cực khổ trăm bề bởi mình đâu chỉ có ngồi viết code, bảo đảm chạy là xong việc đâu. Ứng dụng nó phải bán được, phải có users thì mới sinh ra lãi để có thể tồn tại. Nói cách khác, mình nghĩ thành tựu nổi bật nhất của một startup chẳng có gì ghê gớm ngoài việc sống sót. Bởi hễ còn thở là còn hi vọng, còn có khả năng chiến đấu giành lấy chiến thắng.

Chỉ trong 6 tuần thì Chopp đã có đơn hàng đầu tiên. Đặc biệt là những khách mới này có feedback rất hài lòng khi sử dụng dịch vụ Chopp. Đây chính là động lực thúc đẩy mà khi đó team rất cần bởi sản phẩm mình làm ra được đón nhận cũng như giúp ích cho khách hàng.

Mặt khác, Chopp dù là starup mới thành lập được 1,5 năm nhưng đã có một lượng khách trung thành cũng như việc họ giới thiệu bạn bè và người quen sử dụng Chopp cũng góp phần đẩy mạnh lượng người dùng trong thời gian trên. Vì thế nên việc có khách thường xuyên là điều mà Chopp đánh giá là một thành công nổi bật.

Vì vậy theo cam kết của Chopp thì việc sắp xếp quy trình mua hàng hợp lý để giao kịp cho khách hàng trong vòng 1 giờ là một thử thách lớn cho hệ thống của Chopp hiện nay. Bởi phải có thuật toán chính xác để giúp việc nhận đơn hàng, liên hệ với bên cung cấp hàng, sắp xếp lịch và lên lịch trình cho các bạn Chopper bên Chopp đi đưa hàng cho khách hàng.

Một vấn đề nữa mà Chopp cũng như các E-commerce khác phải đối mặt là việc áp dụng tính năng recommendation bởi việc áp dụng machine learning ở Việt Nam còn khá mới mẻ. Như vậy có thể thấy hiện E-commerce cũng có sự đòi hòi rất cao đối với khả năng tạo ra một ứng dụng có thể giải quyết được những task phức tạp trên một cách hiệu quả. Vì thế mà khác với ngộ nhận thường gặp là các bạn developer chỉ nên làm về những ứng dụng liên quan đến công nghệ thôi, E-commerce cũng là một mỏ vàng và đang có nhu cầu developer rất lớn.

Đối với LTV làm việc trong môi trường khởi nghiệp có mindset, skillset khác nhiều không so với các môi trường khác?

Kinh nghiệm cá nhân không phài là yếu tố quan trọng mà Chopp quan tâm. Chopp đánh giá cao những ứng viên ham học hỏi, có khả năng giải quyết vấn đề, quan tâm tới product của công ty và những trải nghiệm của khách hàng. Thường thì những lập trình viên làm việc trong agency hay outsourcing họ không biết cách ưu tiên task của mình, đưa ra quyết định. Còn làm việc ở Start-up thì không như vậy. Bởi startup thường phải bắt đầu từ con số không nên sẽ phải đương đầu với rất nhiều khó khăn, đòi hỏi bạn Developer không chỉ giỏi về khả năng code mà còn phải chủ động và có khả năng giải quyết vấn đề nhanh.

Việc chủ động có phải là điều lập trình viên hiện đang rất thiếu?

Đúng vậy, chủ động trong công việc là yếu tố rất quan trọng nhưng Dev Việt hiện nay còn thiếu. Việc chủ động không hoàn toàn phụ thuộc vào kinh nghiệm cá nhân, phải có máu liều, không có kinh nghiệm, nhưng dám học dám làm, dám thử thách bản thân. Không có sự chủ động rất khó hoặc tốn rất nhiều thời gian để học cái mới. Phải trải nghiệm thật nhiều thì mới có kinh nghiệm.

Nhiều bạn học IT ra trường thường bị thụ động do các bạn nghĩ mình đã học đủ và giờ chỉ cần áp dụng vào công việc mà không quan tâm tới những xu hướng mới, cập nhật những công nghệ mới không dám làm những thứ khác ngoài những thứ mình biết. Nên mình tin rằng khi được trui rèn trong môi trường startup, vốn đòi hỏi bản thân phải multi-tasking cũng như nhanh trí giải quyết vấn đề, thì các bạn developer sẽ phát triển rất nhanh cũng như trưởng thành về mặt tinh thần và con người.

Có ý kiến cho rằng thị trường Ecommerce tại Việt Nam đang bị bão hòa và rất khó để nhảy vào anh nhận định như thế nào về ý kiến trên?

Chopp hiện tại có thế mạnh chính bên mảng giao hàng thực phẩm, đặc thù của loại hình này chủ yếu dựa vào thế mạnh dịch vụ. Nói cách khác trải nghiệm của người dùng là tất cả. Trong đó đóng góp của việc ứng dụng hoạt động tốt có thể nói là then chốt. Như vậy cũng thấy được tầm quan trọng của developer như thế nào.

Do Chopp hiện tại chủ yếu làm về service là chính, không chỉ đơn thuần tập trung vào mua bán, mà còn tập trung vào cung cấp dịch vụ, nó liên quan đến người đi mua, cách chọn hàng, dịch vụ cung cấp, đó là điểm khác biêt của Chopp với các E-commerce khác hiện nay (ví dụ như Lazada) vốn chỉ quan tâm vào việc bán được càng nhiều hàng càng tốt. Đối với Choop, online shopping là cả một trải nghiệm dành cho người dùng và đó cũng chính là tôn chỉ hoạt động của bọn mình.

Những bất lợi khi làm E-commerce của Chopp là gì?

Vì Chopp cung cấp rất nhiều sản phẩm tươi sống nên việc đánh giá chất lượng sản phẩm chỉ mang tính chất tương đối, không rõ ràng bởi nó tùy vào cách nhìn nhận của khách. Với một số thì sẽ nghĩ rằng hàng như vậy là ổn nhưng sẽ có những khách đòi hỏi khác. Chính vì vậy, rất khó làm cho khách hàng hài lòng. Chopp luôn đưa ra những phương pháp nhằm bảo đảm cho chất lượng của sản phẩm luôn trong tình trạng tốt nhất có thể khi vận chuyển đến cho khách hàng.

Vấn đề đổi trả hàng cũng là khó khăn chung của các công ty E-commerce hiện giờ, nên cũng không có gì ngạc nhiên khi nó cũng là khó khăn lớn nhất mà Chopp đang gặp phải. Bạn có thể tưởng tượng rằng khi khách đòi trả thì bên Chopp sẽ phải đưa ra những biện pháp giải quyết kịp thời và quan trọng nhất là để đảm bảo khách hàng không bị phiền toái và vẫn hài lòng đối với dịch vụ.

Theo anh Machine learning và cách mạng 4.0 ảnh hưởng như thế nào tới E-commerce?

Để có thể bán hàng thành công thì phải hiểu rõ được người tiêu dùng họ muốn gì cũng như họ cần gì. Và ứng dụng của Chopp phải đưa ra được các recommendation phù hợp để giúp user tiết kiệm thời gian và tiếp cận được vật hàng đúng ý họ. Vì thế mà machine learning sẽ đóng vai trò rất quan trọng.

Việt Nam có nguồn nhân lực phát triển AI, machine learning rất tốt thậm chí không thua kém các nước trên thế giới. Nhưng hiện tại rào cản lớn nhất khiến lĩnh vực machine learning, AI ở Việt Nam vẫn còn chưa phát triển được là do không tạo ra được các sản phẩm ứng dụng giải quyết các vấn đề thực tiễn. Nhưng tiềm năng của dev Việt Nam là rất tốt. Có thể nhiều bạn sẽ ngạc nhiên nhưng nước mình nhiều tài năng lắm đấy. Đây cũng là nguyên nhân khiến Việt Nam trở thành một thị trường tiềm năng cho các công ty Outsourcing phát triển. Tuy vậy, thật đáng tiếc là dù tiềm năng deverloper của nước mình rất lớn nhưng lại bị thiếu hụt về mảng kĩ năng mềm, ví dụ như kỹ năng giao tiếp & làm việc nhóm.

Một vấn đề khá lớn mà nhiều bạn mắc phải là “chỉ biết những gì mình biết, không biết những gì mình không biết”- “bạn phải biết cái gì mình không biết” có như vậy mới biết cần phải học hỏi thêm điều gì.

Cảm ơn anh về những chia sẻ của mình

Nguồn: TopDev via Techtalk

Ngành lập trình đang nóng trở lại

Ngành lập trình đang nóng trở lại

Vừa qua, chuyên trang tuyển dụng IT – TopDev đã công bố báo cáo về mức lương, phúc lợi và xu hướng ngành IT Quý 1&2 năm 2017. Báo cáo được thực hiện dựa trên khảo sát hơn 5500 ứng viên IT cả nước cùng hơn 150 nhà tuyển dụng, kết hợp với phân tích Database sẵn có của Topdev trong vòng 3 năm trở lại đây. Qua đó cung cấp bức tranh toàn cảnh về thị trường tuyển dụng IT hiện nay và đưa ra những dự báo xu hướng tuyển dụng trong nửa cuối năm.

Cần nhiều nhân lực hơn trong những năm tới

Câu chuyện “khát” nhân lực IT luôn là câu chuyện gây đau đầu cho rất nhiều doanh nghiệp. Trước đó, các chuyên gia phân tích đã từng đưa ra cảnh báo về sự thiếu hụt nhân lực cho ngành IT: “Việt Nam cần khoảng 500 000 nhân lực ngành CNTT vào năm 2020, nhưng theo tính toán, trong khi toàn bộ hệ thống cung cấp nhân lực về CNTT trên cả nước chỉ có khả năng đáp ứng quá nửa con số ấy.”

nhu cầu tuyển dụng ngành it

Một trong những đặc điểm đáng ghi nhận của thị trường công nghệ Việt Nam là khả năng tăng trưởng nhanh. Trong báo cáo ông Nguyễn Hữu Bình – CEO của TopDev cũng khẳng định: “Trong thời điểm hiện tại, ngành IT tại Việt Nam được đánh giá là ngành mũi nhọn, một điểm đến lý tưởng cho những công ty công nghệ hàng đầu trên thế giới”.

Hiện nay, Việt Nam vẫn đang được coi là thiên đường của outsourcing nhưng những năm gần đây đã có sự chuyển mình. Thị trường công nghệ Việt Nam ghi nhận những bước chuyển mình quan trọng, từ chủ yếu là từ mô hình outsourcing sang cung cấp sản phẩm và các dịch vụ đa ngành nhiều hơn. Với mặt bằng công nghệ, trình độ kỹ thuật, tay nghề của cả nước dần được cải thiện thì đó là hướng đi đúng đắn và được dự báo sẽ tiếp tục phát triển trong tương lại.

Chỉ trong vòng 4 năm trở lại đây, số lượng việc làm ngành IT gia tăng mạnh mẽ, nhu cầu tuyển dụng IT tăng dần đều qua các năm. Đặc biệt, năm 2016 tăng 45% so với cùng kỳ năm 2012, và dự báo đến năm 2018 thị trường tuyển dụng IT cần tới 350 000 lập trình viên tức tăng gấp 20 lần so với năm 2016. Trong khi đó, hiện tại chúng ta chỉ mới đáp ứng được khoảng 200 000 lập trình viên, tương đương thị trường đang thiếu khoảng 150 000 lập trình viên. Tuy nhiên nhiều chuyên gia nhận định rằng đây chỉ là sự thiếu hụt ngắn hạn.

Với sự mất cân bằng giữa nguồn cung và cầu của các lập trình viên (LTV) có chất lượng, “cuộc chiến” thu hút, giữ chân nhân tài CNTT giữa các công ty ngày càng gay gắt hơn. Một số các công ty công nghệ sẵn lòng trả mức lương cao hơn so với thị trường và cam kết tăng tới 20% lương cho các ứng viên có 2 năm kinh nghiệm đi kèm với đó là các phúc lợi ưu đãi khác. Thậm chí với các lập trình viên có nhiều năm kinh nghiệm trong những lĩnh vực “hot” như Cloud Computing, Big Data hay AI có thể dao động từ $1000 – $1500 (tùy theo năng lực và vị trí đảm nhận).
nhu cầu tuyển dụng ngành it

Tuy nhiên, dường như bài toán giữ chân nhân tài của các doanh nghiệp vẫn còn lắm khó khăn, khi mà có tới 42% LTV được hỏi muốn nhảy việc. Lý do phổ biến nhất mà các LTV đưa ra là có tới 35% không hài lòng với mức lương hiện tại. Nhưng đây không phải là lý do chính, yếu tố ảnh hưởng nhiều nhất tới quyết định đi hay ở của LTV đa phần là vì không hài lòng với phúc lợi của công ty và sự thiếu hụt những chính sách đào tạo giúp họ có thể nâng cao trình độ chuyên môn. Theo khảo sát, các nhân viên cảm thấy được tôn trọng và muốn gắn bó với công ty lâu dài hơn khi công ty có các chính sách phúc lợi phù hợp, đặc biệt là ở mảng đào tạo.

Thông thạo Javascript luôn là lợi thế cho lập trình viên

Về yêu cầu tuyển dụng, số liệu của TopDev cho thấy: Java, SQL, CSS, và Javascript là những kỹ năng được nhà tuyển dụng săn đón và sẵn sàng trả lương cao nhất.

Đặc biệt đáng chú ý là nhu cầu về Javascript tăng mạnh, các nhà tuyển dụng đánh giá cao các ứng viện thông thạo Javascript và biết nắm bắt các framework hỗ trợ khác. Mặc dù Javascript còn tồn tại rất nhiều nhược điểm như không có trình biên dịch riêng, có thể làm ứng dụng web trở nên nặng nề hơn, bảo mật kém… Tuy nhiên, với những ưu điểm không thể phủ nhận là hoàn toàn miễn phí và dễ sử dụng, Javascript gần như là 1 yêu cầu không thể thiếu trong lập trình web front-end và đang tấn công sang cả back-end và nền tảng di động. Điều đó lý giải tại sao nhà tuyển dụng ngày càng “ưu ái” Javascript hơn.
Bên cạnh Javascript đang dẫn đầu xu thế công nghệ thế giới, Big Data, Internet of Things (IoT), Docker, điện toán đám mây và an ninh mạng cũng đang là các xu hướng mà các lập trình viên hướng tới. Những công nghệ này góp phần tối ưu hoá những sản phẩm hiện có của doanh nghiệp.

TẢI TẠI ĐÂY

460 khóa học online miễn phí về Programming & Computer Science nên bắt đầu trong tháng 7! (phần 1)

460 khóa học online miễn phí về Programming & Computer Science

Từ 7000 khóa học của Class Central, tác giả đã rút gọn lại 460 khóa học hay nhất, đánh dấu thứ hạng và theo từng cấp độ Beginner, Intermediate và Advanced để người đọc dễ tham khảo.

BEGINNER (34)

An Introduction to Interactive Programming in Python (Part 1)
Rice University via Coursera

Introduction to Programming with MATLAB
Vanderbilt University via Coursera

Learn to Program: The Fundamentals
University of Toronto via Coursera

Ruby on Rails: An Introduction
Johns Hopkins University via Coursera

An Introduction to Interactive Programming in Python (Part 2)
Rice University via Coursera

Introduction to HTML5
University of Michigan via Coursera

Internet History, Technology, and Security
University of Michigan via Coursera

[New] Object Oriented Programming in JavaMicrosoft via edX

[New] Learn to Program in Java
Microsoft via edX

[New] Logic and Computational Thinking
Microsoft via edX

[New] Introduction to Python: Absolute Beginner
Microsoft via edX

Introduction to Cybersecurity
University of Washington via edX

Introduction to Python: Fundamentals
Microsoft via edX

[New] Introduction to ReactJS
Microsoft via edX

HTML, CSS and JavaScript
The Hong Kong University of Science and Technology via Coursera

Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course)
Hebrew University of Jerusalem via Coursera

Introduction to CSS3
University of Michigan via Coursera

Creative Programming for Digital Media & Mobile Apps
University of London International Programmes via Coursera

HTML, CSS, and Javascript for Web Developers
Johns Hopkins University via Coursera

Introduction to the Internet of Things and Embedded Systems
University of California, Irvine via Coursera

Usable Security
University of Maryland, College Park via Coursera

Programming Foundations with JavaScript, HTML and CSS
Duke University via Coursera

Code Yourself! An Introduction to Programming
University of Edinburgh via Coursera

Learn to Program: Crafting Quality Code
University of Toronto via Coursera

Python Programming: A Concise Introduction
Wesleyan University via Coursera

How To Create a Website in a Weekend! (Project-Centered Course)
State University of New York via Coursera

Introduction to Java Programming — Part 1
The Hong Kong University of Science and Technology via edX

Networks: Friends, Money, and Bytes
Princeton University via Coursera

CODAPPS: Coding mobile apps for entrepreneurs
EMLYON Business School via Coursera

Java Fundamentals for Android Development
Galileo University via edX

Introduction to Java Programming — Part 2
The Hong Kong University of Science and Technology via edX

Introduction to Pythonvia Udacity

Introduction to Web Development
University of California, Davis via Coursera

Android App Development for Beginners
Galileo University via edX

INTERMEDIATE (142)

Machine Learning
Stanford University via Coursera

Functional Programming Principles in Scala
École Polytechnique Fédérale de Lausanne via Coursera

Algorithms, Part I
Princeton University via Coursera

Cryptography I
Stanford University via Coursera

Programming Mobile Applications for Android Handheld Systems: Part 1
University of Maryland, College Park via Coursera

Principles of Computing (Part 1)
Rice University via Coursera

[New] Front-End Web UI Frameworks and Tools: Bootstrap 4
The Hong Kong University of Science and Technology via Coursera

[New] Algorithm Design and Analysis
University of Pennsylvania via edX

[New] Cybersecurity: The CISO’s View
University of Washington via edX

[New] Multiplatform Mobile App Development with Web Technologies: Ionic and Cordova
The Hong Kong University of Science and Technology via Coursera

[New] Developing Android Apps with App Inventor
The Hong Kong University of Science and Technology via Coursera

[New] Data Structures and Software Design
University of Pennsylvania via edX

[New] Front-End JavaScript Frameworks: Angular
The Hong Kong University of Science and Technology via Coursera

[New] Cybersecurity Risk Management
Rochester Institute of Technology via edX

[New] Building Interactive Prototypes using JavaScript
Microsoft via edX

[New] Fundamentals of Red Hat Enterprise Linux
Red Hat via edX

[New] Building Functional Prototypes using Node.js
Microsoft via edX

[New] Video Game Design: Teamwork & Collaboration
Rochester Institute of Technology via edX

[New] Introduction to Kubernetes
Linux Foundation via edX

Responsive Website Basics: Code with HTML, CSS, and JavaScript 
University of London International Programmes via Coursera

Practical Machine Learning
Johns Hopkins University via Coursera

Nguồn: medium.freecodecamp.com