Home Blog Page 183

Mẹo tối ưu code ứng dụng React lập trình viên phải biết

tối ưu code ứng dụng React

React hiện nay đang rất phổ biến trong cộng đồng lập trình viên. Các ứng dụng React có quy mô lớn thường rất thú vị khi làm việc. Chính vì thế mà việc tối ưu code ứng dụng React rất cần thiết cho các bạn đang theo React.

Việc tối ưu từ 2500ms thời gian chờ xuống 1500ms có thể tác động rất lớn đến UX và thời gian biên dịch ứng dụng của bạn.

Dưới đây sẽ là một số mẹo nhỏ giúp tối ưu code ứng dụng React.

React.memo

Nếu bạn có một stateless component và bạn biết rằng sẽ không cần re-render, gộp toàn bộ stateless component bên trong một React.memo function.

Ví dụ như:

import React from 'react';

const profile = ({username}) => {
  return (
    <div className="wrapper">
        <p>{username}</p>
    </div>
  )
}

Sẽ thay thế như sau:

import React, { memo } from 'react';

const profile = memo(({username}) => {
  return (
    <div className="wrapper">
        <span>{username}</span>
    </div>
  )
})

profile.displayName = 'profile'

Khi chúng ta gộp toàn bộ stateless component bên trong React.memo nên lưu ý thêm profile.displayName để có thể debug function này.

React.memo tương đương với class React.PureComponent.

React.PureComponent

PureComponent so sánh các props và state trong vòng đời của phương thức shouldComponentUpdate. Điều này có nghĩa là nó sẽ không re-render nếu states và props giống nhau. Tức là để tái cấu trúc lại stateless component trước đó đựa trên class-based component.

Xem thêm vòng đời của React Component là gì?

Ví dụ như sau:

import React, { Component } from 'react'

export default class profile extends Component {
  render() {
    return (
      <div className="wrapper">
        <span>{username}</span>
      </div>
    )
  }
}

Nếu chúng ta biết rằng các props và states sẽ không thay đổi, thay thế việc sử dụng Component. Chúng ta sẽ dụng PureComponent

import React, { PureComponent } from 'react'

export default class profile extends PureComponent {
  render() {
    return (
      <div className="wrapper">
        <span>{username}</span>
      </div>
    )
  }
}

profile.displayName = 'profile'

ComponentDidCatch(error, info) {} Lifecycle Method

Các component có thể gây ảnh hưởng làm phá vỡ cấu trúc ứng dụng sản phẩm của bạn nếu bạn có hơn 1000 components. Nó có thể khó theo dõi mọi thứ.

class MyComponent extends Component {

  state = { hasError: false };
  
  componentDidCatch(error, info) {
    this.setState({ hasError: true });
  }

  render() {
    const { hasError } = this.state
    
    if (hasError) {
      return <h1>Something went wrong.</h1>;
    }
    
    return <div>All good!</div>
  }
}

Có rất nhiều biến động của các thành phần trong một ứng dụng web hiện đại, nó đã gặp khó khăn trong việc gói gộp toàn bộ trong toàn khái niệm và xử lý lỗi. Nhưng thật may mắn, React đã giới thiệu một phương pháp vòng đời mới để xử lý lỗi.

Phương thức componentDidCatch() hoạt động giống như việc bắt {} block, nhưng đối với các components. Duy nhất chỉ class components có thể là hạn chế lỗi.

Xem thêm Component là gì?

React.lazy: Code-Splitting with Suspense

Khi bạn build cho những components để trì hoãn việc rendering trong khi tải dữ liệu đồng bộ được gọi là Suspense. Bạn có thể dừng bất cứ trạng thái cập nhật nào cho đến khi dữ liệu sẵn sàng và bạn có thể nạp vào async loading vào bất cứ component nào trong hệ sinh thái không có cần kết nối các props và state qua ứng dụng của bạn.

Trường hợp mạng nhanh, việc thực hiện cập nhật sẽ rất trôi chảy và ngay lập tức mà không thể thấy được các thay đổi của việc hiển thị và ẩn đi các biểu tưởng quay tròng (loading). Nhưng trường hợp mạng chậm, bạn có thể thiết kế trạng thái chờ tải để người dùng có thể nhìn thấy mức độ cơ bản của chúng thay vì hiển thị các biểu tượng loading trên cách viết code thông thường.

Ví dụ như:

import React, {lazy, Suspense} from 'react';

const ArticleComponent = lazy(() => import('./ArticleItemsComponent'));

const ArticleComponent = () => (
  <Suspense fallback={<div>Loading...</div>}>
    <ArticleItemsComponent />
  </Suspense>
)
 
export default ArticleComponent;

React.Fragments to Avoid Additional HTML Element Wrappers

Nếu bạn đã từng sử dụng React, có thể bạn sẽ gặp lỗi sau:

Parse Error: Adjacent JSX elements must be wrapped in an enclosing tag.

render() {
 <div></div>
 <div></div>
}

Lỗi phân tích cú pháp: Các phần tử JSX liền nhau phải được bọc trong một thẻ kèm theo sẽ làm phá vỡ cấu trúc ứng dụng React của bạn và đây là nguyên nhân gây ra lỗi cú pháp. Các components trong React chỉ có thể là một thành phần con bởi vì nó được thiết kế như vậy (thật stupid) nhưng

Các giải quyết vấn đề này là gộp tất cả trong một element như sau:

render() {
  <div>
    <div></div>
    <div></div>
  </div>
}

Nhưng khi gộp các div thành một div duy nhất chúng ta sẽ phải xét lại việc render có thể làm chậm ứng dụng của mình. Vậy nên chúng ta có thể mở rộng bằng cách sử dụng Fragment để giải quyết vấn đề này.

Fragments to the rescue:

import React, { Fragment } from 'react'
...
render() {
  <Fragment>
    <div></div>
    <div></div>
  </Fragment>
}

Hoặc sử dụng cú pháp rút gọn cho các Fragment:

import React from 'react'
...
render() {
  <>
    <div></div>
    <div></div>
  </>
}

Bài viết này tôi đã đã chia sẻ một số các mẹo nhỏ để tối ưu code ứng dụng React của bạn. Hy vọng các bạn thích bài viết này.

Cảm ơn các bạn đã theo dõi bài viết!

Có thể bạn quan tâm:

Xem thêm việc làm Software Developers hấp dẫn trên TopDev

TopDev via viblo.asia

Ethereum là gì? Tìm hiểu cơ bản về Blockchain (P1)

Ethereum là gì

Kì trước, tôi đã có bài viết Solidity cơ bản. Nó được thiết kế để dùng cho Ethereum Virtual machine (EVM). Trong bài này, chúng ta sẽ đi sâu hơn tìm hiểu Ethereum là gì và dùng test environment cho contract của mình. Từ đó chúng ta sẽ hiểu được cách thức Ethereum hoạt động như thế nào.

  32 cuốn sách học lập trình bạn nhất định phải đọc

Ethereum là gì?

Ethereum (ETH) là một loại cryptocurrency được xây dựng vào năm 2013 bởi Vitalik Buterin, thường được gọi là Bitcoin 2.0. Đây không chỉ là một đồng tiền tệ mà nó còn là nền tảng tạo ra nhiều ứng dụng khác thông qua ngôn ngữ lập trình của mình.

Nó hoạt động trên một Blockchain tương tự như Bitcoin, chúng ta có thể khai thác ETH thông qua đơn vị tiền tệ Ether.

Ethereum còn là một nền tảng ứng dụng hữu ích và đã tạo ra được một hệ sinh thái tài chính phân tán cho riêng mình.

Lí do Ethereum ra đời là dựa trên ý tưởng Vitalik Buterin muốn khắc phục những nhược điểm của Bitcoin như phí thanh toán, thời gian thanh toán chậm và khuyến khích khai thác thông qua các mining-pool thay vì khai thác riêng lẻ như Bitcoin.

>>> Xem thêm Blockchain là gì?

Các tool

Trong bài này, chúng ta sử dụng truffle và ganache-cli. Truffle là một framework của lập trình Ethereum, cho phép tạo test environment, viết test cho contract và nhiều thứ khác nữa. Bài viết này chúng ta chỉ dùng nó để tạo test environment.

ganache-cli sẽ được dùng kết hợp với truffle để tạo ra một test environment đầy đủ tính năng. Phần chúng ta chuẩn bị làm sẽ không thật sự giống với blockchain trên thực tế, nhưng sẽ phần nào hình dung được cách thức hoạt động của nó.

Install các tool

  • truffle: [sudo] npm install -g truffle
  • ganache-cli: [sudo] npm install -g ganache-cli

Chuẩn bị

Đầu tiên, chúng ta cần mở một truffle project. Để làm được, tạo một directory mới, và trong nó, hãy run truffle init.

Bây giờ bạn sẽ có khá nhiều folder. Mở truffle-config.js và dán đoạn này vào:

module.exports = {
  // See <http://truffleframework.com/docs/advanced/configuration>
    // to customize your Truffle configuration!
    networks: {
        development: {
            host: '127.0.0.1',
            port: 7545,
            network_id: '*'
        }
    }
}

Đối với người Windows, bạn có thể remove file truffle.js để tránh conflict. Đối với những hệ điều hành khác, bạn có thể giữ lại cả hai, và bỏ đoạn code này vào truffle.js, hoặc cứ làm như người dùng Windows không sao cả.

File này thể hiện rằng development network của chúng ta sẽ chạy trên localhost:7545.

Tiếp theo, trong folder contracts, tạo một file DeveloperFactory.solĐây cũng là chỗ chúng ta sẽ viết contract của mình. Hãy bỏ đoạn code này vào:

pragma solidity ^0.4.18;

contract DeveloperFactory {
    // Let's create a Developer!

    event NewDeveloper(uint devId, string name, uint age);

    uint maxAge = 100;
    uint minAge = 5; 

    struct Developer {
        string name;
        uint id;
        uint age;
    }

    Developer[] public developers;

    mapping (uint => address) public devToOwner;
    mapping (address => uint) public ownerDevCount;

    function _createDeveloper( string _name, uint _id, uint _age ) private{
        uint id = developers.push( Developer( _name, _id, _age ) ) - 1;
        ownerDevCount[msg.sender]++;
        devToOwner[id] = msg.sender;
        NewDeveloper(id, _name, _age);
    }

    function _generateRandomId( string _str ) private pure returns (uint){
        uint rand = uint(keccak256(_str));
        return rand;
    }

    function createRandomDeveloper( string _name, uint _age ) public payable {
        require(_age > minAge);
        require(_age < maxAge);
    require(msg.value == 5000000000000000000);
        uint randId = _generateRandomId( _name );
        _createDeveloper(_name, randId, _age );
    }

    function getAllDevelopers() public view returns (uint) {
    return developers.length;
    }
}

Nếu bạn muốn biết chi tiết chuyện gì đang xảy ra hãy xem bài viết về Solidity của tôi. Nói ngắn gọn thì, contract này được call để tạo một Developer struct có name và tag. Trong ví dụ này, để tạo một Developer mới cần 5 ether (5000000000000000000 wei, hạng thấp nhất trên Ethereum).

Tiếp theo, vào folder migrations và tạo ra một file 2_deploy_contracts.js:

const DeveloperFactory = artifacts.require('./DeveloperFactory.sol')

module.exports = function(deployer){
    deployer.deploy(DeveloperFactory)
}

Trong file này, ta sẽ import contract và deploy nó trên blockchain.

Launch test environment

Mở một cửa sổ terminal mới và chạy ganache-cli -p 7545. Nó sẽ chạy ganache-cli trên  port 7545 (tương tự như cái chúng ta xác định trên file truffle-config.js) và tạo một vài accounts. Mỗi account có 100 ether mặc định.

Bạn sẽ thấy trong console một cái giống thế này:

Available Accounts
==================
(0) 0x473c0be352f997aa0b194786c27d26e29a3f75b1
(1) 0x9657290da5570b17a03198f490b0a2d7eea84ecf
(2) 0x516c0e0152d7b85facb7e3da2d30f67e42a80ca9
(3) 0xf81be8bbe99d2302b85f7cb0f60103c435ae703b
(4) 0xcfacf5ac5567cfdd70ee5a8a9fe4bf7f74d80b02
(5) 0x623e18e34b2de07933fe179862f038230cc69012
(6) 0xd7100dbc1d6f72777ae2a6f5d95c4b8d71f7ce07
(7) 0x7f40df6c6042888a37124821130910e77051b1cf
(8) 0x26a2c2be1f31571f289b7fb60e41f31f7c57a5be
(9) 0x08a945825a28166466987d5fc77b016fe3d80aa5

Dĩ nhiên, các address của account sẽ khác nhau, nhưng bạn sẽ có khoảng 10 giây để tìm hiểu.

Bây giờ, hãy quay lại cửa sổ terminal ban đầu. Hãy đảm bảo rằng bạn đã ở trong folder bạn tạo và chạy: truffle compile, và chạy truffle migrate --network development. Nó compile code chúng ta thành một ngôn ngữ mà Ethereum Virtual Machine (EVM) có thể hiểu được, ở đây ganache sẽ mô phỏng EVM.

Nếu mọi thứ suôn sẻ thì terminal của bạn sẽ trông như sau:

truffle migrate --network development
Using network 'development'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... 0xc83617394674cd65f751ff9c05438e16339414ccf1e1662ba66479d79335af13
  Migrations: 0xe982e78028e0dfcbdb135e7a3c1e1ed3d98e36e5
Saving successful migration to network...
  ... 0x78bdff98e4dac310de4650048a0856075a460bed9de0c4d4ea879ea399d142c4
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Deploying DeveloperFactory...
  ... 0x0a314c5ed99c772019ea358ac98e002a1442e26903122528d705bf3ff7ed02ed
  DeveloperFactory: 0xc34cc3e53850673db1dea31d267ea1738edc629f
Saving successful migration to network...
  ... 0x95a3cd861f067cdbe8c96f13477526eacd2a7936662f31724e1354922af49664
Saving artifacts...

Chú ý ganache-cli output mà contract đã tạo ra:

Transaction: 0xc83617394674cd65f751ff9c05438e16339414ccf1e1662ba66479d79335af13
  Contract created: 0xe982e78028e0dfcbdb135e7a3c1e1ed3d98e36e5
  Gas usage: 269607
  Block Number: 1
  Block Time: Thu May 03 2018 21:04:55 GMT+0200 (CEST)

Console

Hãy chạy truffle console --network development ngay trên terminal window mà bạn đã chạy các truffle command. Nó sẽ launch truffle console và cho phép bạn tương tác với blockchain của mình.

Chúng ta sẽ dùng Web3 Javascript API cho dễ. Đầu tiên, hãy dùng một account và bỏ nó vào 1 variable:

account = web3.eth.accounts[4]

Rồi chạy command sau:

DeveloperFactory.deployed().then(inst => {Factory = inst})

Nó sẽ assign contract vào Factory variable. Nhớ rằng account có 100 ether:

truffle(development)> web3.fromWei(web3.eth.getBalance(account).toNumber())
'100'
truffle(development)>

Method getBalance sẽ trả về kiểu BigNumbertoNumber() sẽ đưa balance về cho account trong Wei. Sau đó ta sẽ covert nó về ether bằng fromWei().

  • Tạo một Developer

Hãy gọi function này là createRandomDeveloper. Như bạn thấy, function này cần 2 parameter, một string _name và một uint _age. Vì chúng ta cần đến 5 ether để call function này, ta phải làm rõ nó trong function call:

truffle(development)> Factory.createRandomDeveloper('Damien', 26, {from: account, value: web3.toWei(5, "ether")})

Factory là một contract instance. Chúng ta đưa vào 3 parameters vào function. Damien là _name, 26 là _age. Cái thứ ba là một object có key from để biết được account nào đang call nó, và một key value để xác định value được gửi bởi account đó.

Ở đây, from value là account, variable chúng ta đã tạo trước đó. Chúng ta sẽ covert 5 ether Wei để tương thích với value cần trong contract.

Terminal của bạn sẽ hiện như sau:

{ tx: '0xa3792da93311fdf60054f8a30e7624dd385ccf36cc639881eeb25308ddad5e0e',
  receipt:
   { transactionHash: '0xa3792da93311fdf60054f8a30e7624dd385ccf36cc639881eeb25308ddad5e0e',
     transactionIndex: 0,
     blockHash: '0x3ef1c41cbc79d65c1282a86da3a68120a5c069709a6a5bd3e206ed85d9c270c5',
     blockNumber: 5,
     gasUsed: 148160,
     cumulativeGasUsed: 148160,
     contractAddress: null,
     logs: [ [Object] ],
     status: '0x01',
     logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000' },
  logs:
   [ { logIndex: 0,
       transactionIndex: 0,
       transactionHash: '0xa3792da93311fdf60054f8a30e7624dd385ccf36cc639881eeb25308ddad5e0e',
       blockHash: '0x3ef1c41cbc79d65c1282a86da3a68120a5c069709a6a5bd3e206ed85d9c270c5',
       blockNumber: 5,
       address: '0x033711f6fd408b10cc94a21a3e8c20f0e75a4615',
       type: 'mined',
       event: 'NewDeveloper',
       args: [Object] } ] }
truffle(development)>

Việc chuyển đổi đã thành công. Có rất nhiều info ở đây. Chúng ta có thể thấy event ‘NewDeveloper’ đã bị bỏ đi như dự kiến, có thêm hash, block hash, lượng gas đã dùng,…

Còn balance của account là như sau:

truffle(development)> web3.fromWei(web3.eth.getBalance(account).toNumber())
'94.985184'

Chú ý rằng nó không phải 95 ether. Đó là do khi bạn tương tác với contract, bạn cũng phải trả thêm ether để thực hiện chuyển đổi. Chúng ta có cumulativeGasUsed (148160) trong thông tin của giao dịch, có nghĩa là 148160 Wei đã được dùng để thực hiện giao dịch này. Chúng ta lấy số này nhân với gasPrice. Mọi giao dịch đều có gasPrice.

Có thể lấy giá trị này bằng transactionHash, rồi nhân nó với cumulativeGasUsed để biết chi phí giao dịch bằng đơn vị ether:

truffle(development)> web3.eth.getTransaction('0xa3792da93311fdf60054f8a30e7624dd385ccf36cc639881eeb25308ddad5e0e').gasPrice.toNumber() * 148160
14816000000000000
truffle(development)> web3.fromWei(14816000000000000)
'0.014816'
truffle(development)> 100 - 0.014816
99.985184

Và chúng ta có thể tính balance như vậy. Chúng ta còn có thể đảm bảo balance của account là 5 ether như sau:

truffle(development)> web3.fromWei(web3.eth.getBalance('0x033711f6fd408b10cc94a21a3e8c20f0e75a4615').toNumber())
'5'

Bạn có thể lấy address của contract trong log field address của giao dịch trên. Cuối cùng, nếu như chúng ta không gửi 5 ether trong contract thì sao? Hãy lấy một account mới:

truffle(development)> account1 = web3.eth.accounts[9]
'0x5e273389dba808789a27cb792faaf31429c8de8c'
truffle(development)> web3.fromWei(web3.eth.getBalance(account1).toNumber())
'100'

Hãy call function createRandomDeveloper:

truffle(development)> Factory.createRandomDeveloper('Johnny', 43, {from: account1, value: web3.toWei(10, "ether")})
Error: VM Exception while processing transaction: revert
    at Object.InvalidResponse (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:41484:16)

truffle(development)> web3.fromWei(web3.eth.getBalance(account1).toNumber())
'99.9976828'

Có một lỗi xảy ra. Tuy nhiên, gas dùng để bắt đầu giao dịch kiểu gì chẳng bị mất đi! Bạn có thể thấy balance của account không còn là 100 ether nữa.

To be contiuned…

Có thể bạn quan tâm:

Xem thêm tuyển dụng lập trình blockchain hấp dẫn trên TopDev

32 cuốn sách học lập trình bạn nhất định phải đọc

32-cuon-sach-hoc-lap-trinh

Giới thiệu

Trong bài viết này, TopDev sẽ tổng hợp lại những cuốn sách học lập trình “phải đọc” cho lập trình viên.

Đây là những cuốn sách cung cấp nhiều kiến thức mới, dù bạn học và làm việc với bất cứ ngôn ngữ nào.

Hy vọng sau bài viết này, các bạn có thể chọn được vài cuốn sách để thêm vào tủ sách yêu thích của mình nhé.

  Tuyển tập chuẩn “sách giáo khoa” Python
  Những quy tắc khi đọc sách mà tỷ phú Bill Gates đặt ra cho chính mình và bạn cũng nên học theo

Sách học lập trình bạn nhất định phải đọc

Sách định hướng nghề nghiệp

sách học lập trình

Định hướng nghề nghiệp chắc hẳn là điều bạn thường tìm kiếm trên mạng. Nhưng làm thế nào để biết được hướng đi trong nghề lập trình, trong khi trên mạng có quá nhiều lời khuyên và thông tin cho bạn? Cuốn sách này chắc chắn sẽ là lựa chọn phù hợp nhất dành cho bạn rồi đấy!

1. So Good They Can’t Ignore You – Cal Newport

Cuốn sách sẽ mách bạn tại sao theo đuổi đam mê của lại là một lời khuyên không tốt và thay vào đó, bạn nên làm gì?

Sách dạy cách để học

sách học lập trình

Lập trình viên thường gặp khó khăn trong việc học những kỹ năng mới và thay đổi bản thân. Vậy làm thế nào để có những thói quen mới và học những điều mới một cách dễ dàng hơn? Những cuốn sách dưới đây sẽ giúp bạn giải quyết vấn đề đó.

2. The Power of Habit: Why We Do What We Do in Life and Business – Charles Duhugg

Cuốn sách giúp bạn hiểu được cách mà các thói quen hoạt động. Từ đó bạn có thể thay đổi bản thân một cách toàn tâm toàn ý mà không phải bị cưỡng ép.

3. The Spirit of Kaizen: Creating Lasting Excellence One Small Step at a Time: Creating Lasting Excellence One Small Step at a Time – Robert Maurer

Kaizen là nguyên tắc thay đổi từ những điều nhỏ nhất và thực hiện một cách thường xuyên và liên tục.

Toyota đã sử dụng triết lý này để cải thiện chất lượng xe hơi của họ và trở thành nhà sản xuất xe lớn nhất thế giới.

Cuốn sách này chứng mình rằng bạn cũng có thể áp dụng triết lý này để cải thiện mọi thứ.

4. Badass: Making Users Awesome – Kathy Sierra

Hầu hết mọi người đều học một cách không hiệu quả. Cuốn sách này sẽ giúp bạn có cách học tốt hơn.

Sách bày cách cải thiện hiệu suất cá nhân

sách học lập trình

Ba cuốn sách dưới đây tuy có khác nhau một chút, nhưng chúng đều hướng đến cùng một mục đích. Bất kể công việc, ngành nghề hay nhiệm vụ của bạn là gì, những người làm việc hiệu quả thường có chung suy nghĩ và kỹ thuật làm việc.

5. The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change – Stephen Covey

6. The Effective Executive: The Definitive Guide to Getting the Right Things Done – Peter Drucker

7. Great at Work: How Top Performers Do Less, Work Better, and Achieve More – Morten Hansen

8. Checklist Manifesto: How to Get Things Right – Atul Gawande

Kỹ năng checklist cũng vô cùng quan trọng. Cuốn sách này giúp bạn tìm hiểu sức mạnh của việc checklist đơn giản hơn để cải thiện hiệu suất của bạn và giảm bớt những lỗi sai.

Sách dạy cách cải thiện hiệu suất lập trình

sách học lập trình

Khi bạn đã hiểu rõ hiệu suất cá nhân là gì rồi, đã đến lúc tìm hiểu cách trở thành một software developer làm việc hiệu quả với những đầu sách dưới đây nhé:

9. The Effective Engineer: How to Leverage Your Efforts In Software Engineering to Make a Disproportionate and Meaningful Impact – Edmond Lau

Cuốn sách giúp bạn tập trung làm những việc đúng.

10. The Pragmatic Programmer: From Journeyman to Master – Andrew Hunt and David Thomas

Cuốn sách hướng dẫn cách áp dụng các kỹ thuật và nâng cấp bản thân dành cho những người mới bắt đầu.

Sách dạy viết code “xanh, sạch, đẹp”

sách học lập trình

11. Code Complete: A Practical Handbook of Software Construction, Second Edition – Steve McConnell

Sách cho bạn lời khuyên về cấu trúc phần mềm.

12. Clean Code: A Handbook of Agile Software Craftsmanship– Robert C Martin

Cuốn sách này đề cập đến tầm quan trọng của khả năng đọc hiểu và bảo trì, cũng như cái giá phải trả cho việc code lộn xộn.

13. Code Simplicity: The Fundamentals of Software – Max Kanat-Alexander

Bạn sẽ dễ dàng bối rối với mớ lý thuyết, ý kiến và pattern được đề xuất sử dụng khi làm phần mềm. Cuốn sách này sẽ bàn luận về những vấn đề đó.

Sách về software engineering

sách học lập trình

Mặc cho người ta nghĩ gì, các kiến thức trong software engineering đều dựa trên nghiên cứu. Đừng đi ngược lại những nghiên cứu này và trông đợi dự án của bạn sẽ ổn, nếu không thì mọi thứ sẽ đổ vỡ hết đấy.

14. Facts and Fallacies of Software Engineering – Robert Glass

Cuốn sách này giúp bạn biết những gì sẽ hoạt động được và những gì sẽ không. Nếu bạn vi phạm bất cứ quy tắc nào trong số này, thì có lẽ việc nghiên cứu không hợp với bạn rồi.

15. Rapid Development: Taming Wild Software Schedules – Steve McConnell

Cuốn sách cho bạn những lời khuyên có căn cứ về cách quản lý dự án hoặc quản lý 1 team.

16. Making Software: What Really Works, and Why We Believe It – Andy Oram & Greg Wilson

Cuốn sách này được viết dưới dạng một loạt các bài tiểu luận và hơi dài dòng, rời rạc. Tuy nhiên, nếu bạn muốn tránh làm điều gì đó dại dột, và bạn đã đọc xong những cuốn sách khác trong bài viết này, hãy thử tham khảo cuốn sách này nhé.

Sách về kỹ năng lãnh đạo

sách học lập trình

Lãnh đạo là sự tư duy và một tập hợp các kỹ năng, không đơn thuần chỉ là một chức danh hay chức vụ. Bất cứ ai cũng có thể là một nhà lãnh đạo. Khi sự nghiệp của bạn thăng tiến và cần có nhiều trách nhiệm, đây là lúc bạn rèn luyện kỹ năng lãnh đạo của mình đó.

17. Measure What Matters: How Google, Bono, and the Gates Foundation Rock the World with OKRs – John Doerr

Cuốn sách giúp bạn biết cách để mọi người trong tổ chức của bạn cố gắng hết sức theo đuổi một mục tiêu chung.

18. Turn the Ship Around!: A True Story of Turning Followers into Leaders – L. David Marquet

Cuốn sách chia sẻ mối quan hệ leader-leader thay vì leader-follower. Tổ chức của bạn sẽ có hiệu suất làm việc tốt nhất khi mọi người 100% toàn tâm vào công việc của họ và cùng hướng đến một mục tiêu chung. Bạn sẽ được biết về lý thuyết 3C:

  • Control (kiểm soát)
  • Competence (năng lực)
  • Clarity (sự rõ ràng)

Sách về quản lý dự án

sách học lập trình

Đừng tưởng rằng bạn là một coder giỏi và đã đi làm được một thời gian thì có thể chạy một dự án. Hãy tránh những sai lầm của một người mới bắt đầu này bằng cách đọc những cuốn sách dưới này nhé:

19. Rapid Development: Taming Wild Software Schedules – Steve McConnell

20. Essential Scrum: A Practical Guide to the Most Popular Agile Process – Ken Rubin

Sách cho lời khuyên tuyệt vời về scrum và quản lý dự án nói chung. Xem thêm Scrum là gì?

21. The Lean Startup: How Today’s Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses – Eric Ries

Sách giúp bạn hiểu lý do tại sao phải xây dựng MVP và vì sao sử dụng quy trình xây dựng – đo lường – học hỏi là rất quan trọng.

22. The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win – Gene Kim & Kevin Behr

Sách chia sẻ cách áp dụng lý thuyết về Constraint và Lean để giải quyết các vấn đề phát sinh trong dự án (hoặc tránh được các vấn đề đó từ lúc bắt đầu).

Sách quản lý dự án nâng cao

Khi bạn đã có những kiến thức cơ bản và các dự án của bạn không còn gặp rắc rối nữa, hãy xem xét việc học các kỹ thuật quản lý dự án nâng cao hơn qua các cuốn sách sau.

23. The Principles of Product Development Flow: Second Generation Lean Product Development – Donald Reinertsen

Sách giúp bạn sửa các lỗi mà mọi người thường mắc phải bằng cách áp dụng các kỹ thuật Lean và Six Sigma từ lúc bắt đầu cho tới khi ra sản phẩm. Cuốn sách này không dành cho người mới bắt đầu.

24. Goldratt’s Theory of Constraints: A Systems Approach to Continuous Improvement – William H. Dettmer

Cuốn sách này đưa ra cách tiếp cận có hệ thống để tìm ra sự hạn chế trong tổ chức của bạn và khắc phục nó.

Sách về Unit Testing  

sách học lập trình

Nếu bạn chưa bao giờ thử unit testing, những cuốn sách này sẽ giúp bạn bắt đầu.

25. Starting to Unit Test: Not as Hard as You Think – Erik Dietrich

Hướng dẫn cho người mới bắt đầu làm Unit Testing.

26. Working Effectively with Unit Tests – Jay Fields

Cung cấp các bài kiểm tra thực hành unit testing tốt nhất cho những người đã biết cơ bản.

27. Working Effectively with Legacy Code – Michael Feathers

Cuốn sách rất nổi tiếng về việc lấy code có sẵn đã được unit test tự động – 1 công việc vốn nổi tiếng gây khó khăn cho lập trình viên.

Sách về phân tích và thống kê dữ liệu

sách học lập trình

Bạn cần kỹ năng phân tích dữ liệu để đo lường kết quả của bạn. Nhiều lập trình viên thiếu kiến ​​thức thống kê và các kỹ năng cần thiết để thống kê dữ liệu và cho ra kết quả chính xác. Những cuốn sách dứoi đây sẽ giúp bạn giải quyết vấn đề này.

28. Data Analysis with Open Source Tools: A Hands-On Guide for Programmers and Data Scientists – Philipp K. Janert

Đây là cuốn sách bạn cần khi sếp của bạn bỏ một tấn dữ liệu lên bàn của bạn và nói “tìm hiểu kỹ nó đi”.

Bạn có thể tham khảo thêm một vài cuốn sách này:

29. Statistics For Dummies – Deborah Rumsey

30. Statistics II for Dummies – Deborah Rumsey

Sách về UX/UI

sách học lập trình hay

Hầu hết các lập trình viên không chú ý đến giao diện và trải nghiệm người dùng. Những cuốn sách này sẽ giúp bạn.

31. Don’t Make Me Think, Revisited: A Common Sense Approach to Web Usability – Steve Krug

32. Rocket Surgery Made Easy: The Do-It-Yourself Guide to Finding and Fixing Usability Problems – Steve Krug

Kết luận

Trên đây là 32 cuốn sách học lập trình mà bạn nên đọc qua để bổ sung kiến thức và kỹ năng cho mình.

Cảm ơn các bạn đã theo dõi bài viết!

Có thể bạn quan tâm:

Xem thêm việc làm Software Developers hấp dẫn tại TopDev

  Bill Gates gợi ý 5 cuốn sách hay nhất ai cũng nên đọc mùa hè này

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

thu-vien-va-framework-cua-javascript

JavaScript đã tồn tại hơn 20 năm, và là một trong những ngôn ngữ không ngừng phát triển. Ngôn ngữ này gần đây trải qua giai đoạn tăng trưởng rất nhanh, và liệu các kỹ thuật JavaScript cho front-end nổi bật hiện nay sau vài năm nữa có còn được chú ý nữa không.

Tuy nhiên, quan trọng là luôn dẫn đầu cuộc chơi bằng cách sử dụng những công nghệ những công cụ và framework mới nhất cho việc phát triển tốt hơn. Bài viết này sẽ giúp bạn khám phá những thư viện và framework của JavaScript bạn nên cân nhắc học ngay bây giờ.

Tuyển dụng Javascript lương cao cần gấp

Môi trường JavaScript đã trở nên khổng lồ. Nó có hệ sinh thái của riêng nó với thư viện, frameworks, công cụ, các quản lý package và các ngôn ngữ mới để biên dịch ra JavaScript.

Thật thú vị, npm, là một trình quản lý package thực thụ cho JavaScript, cũng là một software registry lớn nhất của thế giới. Đây là một đoạn trích từ một bài viết xuất bản trên Linux.com vào tháng 1 năm 2017.

Với hơn 350,000 packages, npm registry chứa gần như hơn gấp đôi package registry phổ biến tiếp theo (Apache Maven). Thực tế, hiện thời nó là package registry lớn nhất thế giới.

8 tháng nhanh chóng trôi qua, và hiện giờ có 500,000 packages trong npm registry. Là một sự tăng trưởng khủng khiếp so với những package repo khác.

Những thư viện và framework của JavaScript mà bạn không thể bỏ quaNguồn: ModuleCounts.com

Làm lập trình front-end, bắt kịp với những công cụ và thư viện JavaScript thực sự rất quan trọng. Khi một công nghệ trở nên phổ biến, nhu cầu sẽ tăng cao, lần lượt sẽ xuất hiện nhiều công việc lập trình hơn với mức lương cao hơn trong ngành công nghiệp.

Vì vậy TopDev xin tập hợp một danh sách những thư viện và framework của JavaScript mà bạn nên lưu tâm.

Thư viện là các code có thể sử dụng lại để thực hiện những chắc năng cụ thể. Nó là một tập hợp những hàm, đối tượng, và class bạn có thể dùng trong ứng dụng của bạn.

Bạn có thể gọi một hàm từ thư viện và đưa các tham số, và thư viện xử lý nó và trả về quyền điều khiển cho bạn. Tuy nhiên, nó không đặt để bất kỳ quy tắc nào giới hạn cách bạn sử dụng thư viện đó.

Thư viện JavaScript phổ biến gồm có:

React là một thư viện được xây dựng cho các nhà phát triển của Facebook và Instagram. Nó được bầu chọn là một công nghệ được yêu thích nhất của các nhà phát triển, dựa theo khảo sát của Stack Overflow 2017. React cũng là một thư viện JavaScript phổ biến nhất dựa trên số sao đếm được từ GitHub.

Vậy tại sao React được toàn thể chú ý như vậy?

Với React, hoàn toàn có thể tạo ra một ứng dụng tương tác sử dụng phương pháp declarative. Ở đó bạn có thể kiểm soát trạng thái của ứng dụng bằng cách nói “view nên trông giống như vậy nè”.

Nó sử dụng model component-based, các component là những thành phần UI được tái sử dụng và mỗi component có trạng thái riêng. Xem thêm component là gì?

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

React sử dụng Virtual DOM do đó bạn không cần phải quan tâm đến việc trực tiếp thao tác DOM. Tính năng đáng chú ý khác của React bao gồm các luồng dữ liệu một chiều (one-way data flow), tùy chọn cú pháp JSX và công cụ command-line cho việc tạo ra một dự án React mà không cần cấu hình ban đầu.

jQuery là một thư viện giúp JavaScript dễ tiếp cận hơn và thao tác với DOM trở nên dễ dàng hơn bao giờ hết. Quá trình học nhẹ nhàng và cú pháp dễ dàng của jQuery đã hình thành một thế hệ nhà phát triển client-side mới.

Một vài năm trước đây, jQuery đã được xem là một giải pháp tốt nhất để xây dựng các website mạnh mẽ, với hỗ trợ đa trình duyệt. Các tính năng cốt yếu của jQuery như xử lý DOM dựa trên CSS selectors, event handling và gọi AJAX đã tạo nên sự phổ biến cho nó.

Xem thêm jQuery là gì?

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

Tuy nhiên, sự việc đã thay đổi, môi trường JavaScript phát triển nhanh chóng. Vài điểm nổi bật của jQuery đã được tích hợp vào chuẩn ECMAScript mới đây. Hơn nữa, những framework và thư viện mới được dùng ngày nay có cách riêng để gắn kết DOM, và vì thế các kỹ thuật thao tác DOM truyền thống không còn được yêu cầu nữa. Độ phổ biến của jQuery đang giảm dần, nhưng nó sẽ không biến mất sớm đâu.

D3 hoặc D3.js là một thư viện JavaScript mạnh mẽ, tạo ra những hình ảnh có tính tương tác sử dụng chuẩn mực web như SVG, HTML và CSS. Không giống với những thư viện hình ảnh trực quan khác, D3 cung cấp kết quả hình ảnh được tạo ra tốt hơn.

D3 hoạt động bằng cách gắn kết data với DOM và sau đó thực hiện công tác chuyển đổi cho phần document. Nó cũng sở hữu một hệ sinh thái, gồm có các plugin và thư viện để thêm các chức năng mở rộng.

Thư viện này đã được ra mắt từ năm 2011, và có cả tấn tài liệu và bài hướng dẫn có thể giúp bạn bắt đầu ngay.

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

Nếu bạn đang kiếm tìm cách tạo các hình ảnh đơn giản mà không tốn quá nhiều thời gian, bạn nên xem qua Chart.js.

Một framework là một kiến trúc kiểm soát luồng đi của data trong ứng dụng của bạn. Framework hình thành cấu trúc cơ bản và cho bạn biết mọi thứ nên được tổ chức ra sao, chức năng cơ bản để giúp ứng dụng lập tức vận hành cũng được cung cấp.

Hơn thế nữa, bạn bị ràng buộc phải tuân theo các pattern và quy luật mà framwork thiết kế. Sự khác biệt giữa framework và thư viên là: bạn gọi một thư viện còn framework thì gọi bạn.

Một framework chứa đựng nhiều thư viện và có hình thái cấp độ cao hơn. Chức năng như event binding, gọi AJAX, template và data binding, và testing được xây dựng bên trọng framework. Tìm hiểu chi tiết Framework là gì?

AngularJS là một trong những công nghệ JavaScript phổ biến nhất trong giới phát triển Front-End. Nó được hậu thuẫn bởi Google và một cộng đồng gồm nhiều cá nhân và tổ chức khác. Mặc cho sự phổ biến của mình, AngularJS cũng từng có những sai sót của nó. Nhóm Angular đã bỏ ra 2 năm làm ra một phiên bản mới, cuối cùng đã ra mắt và tháng 9 năm 2016.

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

Angular 2 là một phiên bản viết lại từ đầu của AngularJS. Một vài tính năng của Angular 2 gồm có:

  • TypeScript thay cho JavaScript làm ngôn ngữ mặc định;
  • Kiến trúc component-based;
  • Cải thiện hiệu năng trên nền tảng web và mobile;
  • Chọn lựa tốt hơn cho tooling và scaffolding.

Tuy nhiên, nâng cấp từ Angular 1.x sang Angular 2.x khá là xa xỉ vì Angular 2 là một thứ hoàn toàn khác biệt. Đó là lý do cho việc tại sao Angular 2 chưa có tỉ lệ thực nghiệm cao như người tiền nhiệm của nó.

Nhưng Angular và AngularJS vẫn tiếp tục là một công nghệ phổ dụng nhất dựa theo Stack Overflow 2017. Dự án Angular nhận được 28,000 sao trên GitHub.

Vue.js là một framework JavaScript nhỏ gọn mới xuất hiện. Nó là một framework JavaScript phổ biến trên GitHub tính theo lượng sao trên GitHub. Vue là một framework không quá cứng nhắc và do đó giúp nhà phát triển dễ dàng nắm bắt được nó. Các mẫu cú pháp HTML của Vue gắn kết phần DOM đã render với giá trị của dữ liệu.

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

Framework này cung cấp trải nghiệm giống React với những Virtual DOM của nó và các component có thể tái sử dụng giúp bạn tạo ra cả widgets và toàn bộ ứng dụng web. Hơn nữa, bạn cũng có thể dùng cú pháp JSX để viết phần chức năng render trực tiếp.

Khi trạng thái thay đổi, Vue.js sẽ mở một hệ thống phản ứng để xác định rằng điều gì đã thay đổi và render số lượng nhỏ nhất các component.

Vue.js cũng hỗ trợ tích hợp những thư viện khác vào framework mà không cần tốn công sức nhiều.

Ember.js là một framework front-end vân hành trên mô hình Model-View-View-Model (cấu trúc MVVM). Nó tuân theo nguyên tắc hơn là phương pháp cấu hình, nó phổ biến hơn những framework khác như Ruby on Raila hoặc Laravel.

Ember.js tổng hợp với những câu thành ngữ và thực tiễn nhất vào trong framework vì thế bạn có thể khởi động một ứng dụng chẳng mất nhiều công sức.

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

Ember thông thường gồm có:

  • Ember CLI: cung cấp chọn lựa tạo khuôn mẫu cơ bản (scaffolding) và hỗ trợ hàng trăm add-ons.
  • Ember Data: là một thư viện data vững chắc được cấu hình để làm việc với bất kỳ server back-end nào.
  • Ember Inspector: Một extension (phần mở rộng) cho Chrome và Firefox.
  • Liquid Fire: Một add-on cho việc chuyển đổi và hoạt hình.

Một công cụ là một tập hợp các công việc thường dùng, giúp bạn trong quá trình phát triển. Không giống thư viện, công cụ thường xử lý một task ở mã lệnh phía client. Nó dùng mã code làm dữ liệu ban đầu, thực hiện task trên đó, và trả về kết quả. Các công cụ thường dùng có transpiler và công cụ build, asset minifiers, module bundler và công cụ scaffolding.

Trình chạy task General-purpose là các công cụ được dùng để tự động các công vlệc cụ thể. Các trình chạy task general-purpose gồm có:

Gulp là một bộ công cụ JavaScript được dùng như một trình chạy task. Biên dịch, thu gọn code, tối ưu hình ảnh, unit testing linting là những task lập lại đã được tự động hoá. Nó giúp quá trình viết task dễ dàng hơn, thậm chí cho những người ít kinh nghiệm với JavaScript.

Gulp sử dụng pipeline để dẫn data từ một plugin này sang một plugin khác. Kết quả sau cùng là xuất ra một thư mục đã được chỉ định trước.

Nó thực hiện công việc tốt hơn so với Grunt bởi vì nó không tạo ra file tạm thời để lưu trữ các kết quả, nó cho kết quả có ít lần gọi I/O hơn.

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

Grunt là một task runner (trình chạy task) và một công cụ tự động của JavaScript. Grunt có một giao diện command-line cho phép bạn chạy các task tự chọn được định nghĩa trong một Gruntfile.

Nó có hàng ngàn plugins để chọn lựa, gồm có những task lập đi lập lại mà bạn sẽ gặp phải. Với Grunt, bạn có thể dùng tất cả task bằng một dòng lệnh, làm cuộc sống bạn dễ dàng hơn.

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

Gulp và Grunt đòi hỏi bạn dành thời gian học và thuần thục công cụ. Giới thiệu các phần phụ thuộc bổ sung vào dự án của bạn có thể tránh được bằng cách chọn lựa một thay thế đã được đóng gói với Node.js.

Dù npm được biết đến nhiều hơn là một trình quản lý package, mã lệnh npm cũng có thể sử dụng để thực hiện các nhiệm vụ được đề cập trước đó.

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

Xem chi tiết về npm là gì?

Testing là quá trình đánh giá và thẩm định phần mềm, đáp ứng được các yêu cầu về kỹ thuật và kinh doanh. Phương pháp Test-Driven Development cũng hướng đến việc phát hiện lỗi và được xem như một phần không thể thiếu của công việc phát triển front-end hiện đại.

Jest là một testing framework khá mới được xây dựng bởi Facebook và được cộng đồng React rất đón nhận. Có một quan niệm sai lầm là Jest được thiết kế đặc thù để làm việc với React, tuy nhiên, theo tài liệu của Jest:

“Dù Jest có thể xem là test runner đặc thù cho React, nhưng thực tế là một nền tảng testing phổ cập, với khả năng thích nghi cho bất kể thư viện hoặc framework JavaScript nào. Bạn có thể sử dụng Jest để test bất kỳ mã JavaScript nào.”

Ưu điểm của Jest so với những bộ kiểm thử khác là không cần phải có cấu hình gì để bắt đầu viết các testing. Framework đã có phần thư viên dựng sẵn và hỗ trợ sử dụng của việc bắt chước các hàm.

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

Jest có một tính năng gọi là snapshot testing, cho phép bạn chắc chắn rằng UI của ứng dụng không thay đổi theo cách không mong muốn. Nhà phát triển tại Facebook và những người đóng góp khác đã bỏ rất nhiều công sức vào dự án này, vì vậy sẽ không ngạc nhiên nếu Jet trở thành testing framework phổ biến nhất trong những năm tới đây.

Mocha là một testing JavaScript framework nổi bật với sự hỗ trợ của trình duyệt, hỗ trợ không đồng bộ gồm có promises, test coverage report (báo cáo kiểm tra), và một JavaScript API để vận hành các bài kiểm tra.

Mocha thường dùng chung với một thư viện khác như Chai, should.jsexpect.js hoặc một thu viện tốt hơn vì nó thiếu thư viện riêng.

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

Jasmine là một testing framework theo kiểu behavior-driven cho JavaScript. Nó được định hướng trở thành một trình duyệt, nền tảng và bộ kiểm tra không lệ thuộc vào framework.

Jasmine có một thư viện riêng của nó gọi là matchers với cú pháp rõ ràng và dễ đọc. Nó không có một test runner (trình chạy test) dựng sẵn, và bạn có lẽ phải dùng một test runner thuần tuý như Karma.

Những thư viện và framework của JavaScript mà bạn không thể bỏ qua

JavaScript xuất hiện từ những năm 1995, và nó dĩ nhiên sẽ tồn tại mãi miễn là các trình duyệt không quyết định thay nó bằng một ngôn ngữ khác. Mặc dù có rất nhiều ngôn ngữ khác biên dịch thành JavaScript, nhưng không có ngôn ngữ scripting nào khác có thể thay được JavaScript trong tương lai gần. Tại sao? Vì JavaScript đã trở nên quá phổ biến để có thể bị thay thế.

Ngôn ngữ này không chỉ dễ học, mà còn có rất nhiều framework và thư viện đủ để bạn bận rộn với nó. Những thư viện và framework cũ đã bị thay thế bởi những công nghệ mới hơn. Giống như jQuery, một trong những thư viện JavaScript từng được yêu mến nhất, đang đương đầu với sự thất thế về độ hấp dẫn, cách sử dụng và sự phổ biến. Các thư viện, framework và công cụ thế hệ mới đang tăng trưởng và có được sự đón nhận rộng rãi.

Việc luôn cập nhật các thư viện và framework của JavaScript sẽ là cuộc chiến lâu dài đối với các lập trình viên.

Có thể bạn quan tâm:

Xem thêm việc làm JavaScript Developer hot nhất trên TopDev

Functional Programming là gì? Tại sao nên sử dụng?

functional programming
Functional Programming là gì? Tại sao nên sử dụng

Functional Programming có điểm vượt trội so với các mô hình lập trình khác là bởi tính đơn giản, rõ ràng, dễ hiểu dễ đọc. Đồng thời chính kết cấu rõ ràng của nó tạo nên tính ổn định và tin cậy, ít xảy ra lỗi.

Functional Programming là gì?

Functional programming là một dạng mô hình lập trình (FP – Gọi là lập trình hàm), cũng giống như lập trình tuần tự hay lập trình hướng đối tượng (OOP). Functional programming là một phương pháp lập trình dựa trên các hàm toán học (function), tránh việc thay đổi giá trị của dữ liệu. Nó có nhiều lợi ích như : các khối xử lý độc lập dễ tái sử dụng, thuận lợi cho việc thay đổi logic hoặc tìm lỗi chương trình.

Functional Programming là gì? Tại sao nên sử dụng

Functional Programming có ưu điểm gì?

Functional Programming hướng đến tính kết hợp (composability) các hàm (function) để tối đa hóa khả năng tái sử dụng (reusability) trong chương trình.

Functional Programming thì chỉ có function, không assignment statements, không lưu giữ global state… Trong Functional Programming, chúng ta điều khiển luồng chương trình bằng cách phối hợp các functions lại với nhau.

Điểm khác biệt lớn nhất của lập trình hàm khác với lập trình thủ tục thuần túy (procedural programming) nằm ở điểm thay vì thực hiện tuần tự theo từng bước với các biến để lưu trạng thái thì FP chú trọng đến thực thi luồng chương trình thông qua việc kết hợp các hàm bậc cao (high order function).

Đối với các ngôn ngữ có hỗ trợ high order function thì các hàm cũng có thể được truyền như là các tham số hoặc là kết quả trả về. Do đó các thuật toán trong FP có thể được diễn tả một cách ngắn gọn và trong sáng.

Tại sao nên sử dụng Functional Programming?

Việc hiểu rõ được Functional Programming thường là một trong những bước phát triển quan trọng nhất trong sự nghiệp lập trình của bạn, và đôi khi cũng là bước khó khăn nhất.

  • Nguyên tắc thứ nhất trong Functional Programming là: cái nào đã khai báo một lần thì mãi mãi như vậy, không bao giờ thay đổi nữa. Các biến hoặc đối tượng trong kịch bản Functional Programming nếu có thì phải immutable.
  • Với Pure Function, cung cấp sự tự tin không thay đổi mọi thứ bên ngoài phạm vi của nó. Đây là nguyên tắc thứ hai trong Functional Programming: tất cả các hàm đều phải là pure function, sẽ không bị side effect ( kết quả trả về bị ảnh hưởng bởi tác nhân bên ngoài hàm). Nó sẽ không đọc, nhận bất kỳ cái gì nào ở bên ngoài hàm hoặc ghi bất kỳ cái gì ở bên ngoài hàm.
  • Dễ kiểm tra, bởi vì nó không phụ thuộc vào trạng thái của ứng dụng và xác minh kết quả cũng sẽ dễ dàng.
  • Nó làm cho code dễ đọc dễ hiểu hơn.

Functional Programming có nhược điểm gì?

  • Để viết một Pure Function đứng một mình thì đơn giản, nhưng khi kết hợp chúng vào một chương trình lớn thì rất khó: Tất cả các hàm phải tuân theo pattern giống nhau, nếu không lỗi rất dễ xảy ra.
  • FP đi kèm với các khái niệm về toán học nâng cao: đây sẽ là lý do gây nản lòng khi bạn học nó.
  • Bắt đầu với functional programming, chúng ta phải làm quen và nắm vững recursive (đệ quy), thay vì for, while sử dụng phổ biếng trong OOP. Chính vì thế việc tối ưu bộ nhớ khi sử dụng đệ quy là điểm cần lưu ý. Nhưng điều này có thể giảm đáng kể bằng cách sử dụng tail recursion.

Hadoop là gì? Kiến trúc của Hadoop

hadoop là gì

Big Data đang trở thành một phần thế mạnh và là tài sản to lớn của mỗi công ty, và Hadoop là công nghệ cốt lõi cho việc lưu trữ và truy cập dữ liệu lớn.

Hadoop là gì?

Hadoop là một Apache framework mã nguồn mở cho phép phát triển các ứng dụng phân tán (distributed processing) để lưu trữ và quản lý các tập dữ liệu lớn. Hadoop hiện thực mô hình MapReduce, mô hình mà ứng dụng sẽ được chia nhỏ ra thành nhiều phân đoạn khác nhau được chạy song song trên nhiều node khác nhau. Hadoop được viết bằng Java tuy nhiên vẫn hỗ trợ C++, Python, Perl bằng cơ chế streaming.

Hadoop giải quyết vấn đề gì?

  • Xử lý và làm việc khối lượng dữ liệu khổng lồ tính bằng Petabyte.
  • Xử lý trong môi trường phân tán, dữ liệu lưu trữ ở nhiều phần cứng khác nhau, yêu cầu xử lý đồng bộ
  • Các lỗi xuất hiện thường xuyên.
  • Băng thông giữa các phần cứng vật lý chứa dữ liệu phân tán có giới hạn.

Kiến trúc Hadoop là gì?

Một cụm Hadoop nhỏ gồm 1 master node và nhiều worker/slave node. Toàn bộ cụm chứa 2 lớp, một lớp MapReduce Layer và lớp kia là HDFS Layer. Mỗi lớp có các thành phần liên quan riêng. Master node gồm JobTracker, TaskTracker, NameNode, và DataNode. Slave/worker node gồm DataNode, và TaskTracker. Cũng có thể slave/worker node chỉ là dữ liệu hoặc node để tính toán.

Hadoop framework gồm 4 module:

1.Hadoop Distributed File System (HDFS)

Đây là hệ thống file phân tán cung cấp truy cập thông lượng cao cho ứng dụng khai thác dữ liệu. Hadoop Distributed File System (HDFS) là hệ thống tập tin ảo. Khi chúng ta di chuyển 1 tập tin trên HDFS, nó tự động chia thành nhiều mảnh nhỏ. Các đoạn nhỏ của tập tin sẽ được nhân rộng và lưu trữ trên nhiều máy chủ khác để tăng sức chịu lỗi và tính sẵn sàng cao.

HDFS sử dụng kiến trúc master/slave, trong đó master gồm một NameNode để quản lý hệ thống file metadata và một hay nhiều slave DataNodes để lưu trữ dữ liệu thực tại.

Một tập tin với định dạng HDFS được chia thành nhiều khối và những khối này được lưu trữ trong một tập các DataNodes. NameNode định nghĩa ánh xạ từ các khối đến các DataNode. Các DataNode điều hành các tác vụ đọc và ghi dữ liệu lên hệ thống file. Chúng cũng quản lý việc tạo, huỷ, và nhân rộng các khối thông qua các chỉ thị từ NameNode.

  26 công cụ và kỹ thuật trong Big Data có thể bạn chưa biết
  Tổng hợp Cheat Sheets cho AI, Neural Networks, Machine Learning, Deep Learning và Big Data

2. Hadoop MapReduce

Đây là hệ thống dựa trên YARN dùng để xử lý song song các tập dữ liệu lớn. Là cách chia một vấn đề dữ liệu lớn hơn thành các đoạn nhỏ hơn và phân tán nó trên nhiều máy chủ. Mỗi máy chủ có 1 tập tài nguyên riêng và máy chủ xử lý dữ liệu trên cục bộ. Khi máy chủ xử lý xong dữ liệu, chúng sẽ gởi trở về máy chủ chính.

MapReduce gồm một single master (máy chủ) JobTracker và các slave (máy trạm) TaskTracker trên mỗi cluster-node. Master có nhiệm vụ quản lý tài nguyên, theo dõi quá trình tiêu thụ tài nguyên và lập lịch quản lý các tác vụ trên các máy trạm, theo dõi chúng và thực thi lại các tác vụ bị lỗi. Những máy slave TaskTracker thực thi các tác vụ được master chỉ định và cung cấp thông tin trạng thái tác vụ (task-status) để master theo dõi.

JobTracker là một điểm yếu của Hadoop Mapreduce. Nếu JobTracker bị lỗi thì mọi công việc liên quan sẽ bị ngắt quãng.

3. Hadoop Common

Đây là các thư viện và tiện ích cần thiết của Java để các module khác sử dụng. Những thư viện này cung cấp hệ thống file và lớp OS trừu tượng, đồng thời chứa các mã lệnh Java để khởi động Hadoop.

4. Hadoop YARN

Quản lý tài nguyên của các hệ thống lưu trữ dữ liệu và chạy phân tích.

Hadoop hoạt động như thế nào?

Giai đoạn 1

Một user hay một ứng dụng có thể submit một job lên Hadoop (hadoop job client) với yêu cầu xử lý cùng các thông tin cơ bản:

  1. Nơi lưu (location) dữ liệu input, output trên hệ thống dữ liệu phân tán.
  2. Các java class ở định dạng jar chứa các dòng lệnh thực thi các hàm map và reduce.
  3. Các thiết lập cụ thể liên quan đến job thông qua các thông số truyền vào.

Giai đoạn 2

Hadoop job client submit job (file jar, file thực thi) và các thiết lập cho JobTracker. Sau đó, master sẽ phân phối tác vụ đến các máy slave để theo dõi và quản lý tiến trình các máy này, đồng thời cung cấp thông tin về tình trạng và chẩn đoán liên quan đến job-client.

Giai đoạn 3

TaskTrackers trên các node khác nhau thực thi tác vụ MapReduce và trả về kết quả output được lưu trong hệ thống file.

Khi “chạy Hadoop” có nghĩa là chạy một tập các trình nền – daemon, hoặc các chương trình thường trú, trên các máy chủ khác nhau trên mạng của bạn. Những trình nền có vai trò cụ thể, một số chỉ tồn tại trên một máy chủ, một số có thể tồn tại trên nhiều máy chủ.

Các daemon bao gồm:

  • NameNode
  • DataNode
  • SecondaryNameNode
  • JobTracker
  • TaskTracker

Tại sao dùng Hadoop?

Các điểm thuận lợi khi dùng Hadoop:

  • Robus and Scalable – Có thể thêm node mới và thay đổi chúng khi cần.
  • Affordable and Cost Effective – Không cần phần cứng đặc biệt để chạy Hadoop.
  • Adaptive and Flexible – Hadoop được xây dựng với tiêu chí xử lý dữ liệu có cấu trúc và không cấu trúc.
  • Highly Available and Fault Tolerant – Khi 1 node lỗi, nền tảng Hadoop tự động chuyển sang node khác.

Nguồn tham khảo:

  • https://www.mastercode.vn/blog/web-development/hadoop-la-gi-huong-dan-cai-dat-cau-hinh-hadoop-tren-windows.84
  • https://bigdataviet.wordpress.com/2015/08/08/hadoop-la-gi/

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

26 công cụ và kỹ thuật trong big data có thể bạn chưa biết

Big Data là gì? Tất tần tật về Big Data

Big data là gì? Trò chuyện cùng CTO của Datamart Solutions để hiểu hơn về data

Xem thêm Java Developer Jobs hấp dẫn lương cao tại TopDev!

Những theme cho VS Code tốt nhất

Những theme cho VS Code tốt nhất

Visual Studio Code đã chiếm được cảm tình của nhiều nhà phát triển trong những năm gần đây. Dễ sử dụng, tùy biến và trọng lượng nhẹ khiến mọi người lựa chọn. Hãy cùng xem một số theme VSCode tốt nhất có sẵn trên thị trường đang được sử dụng bởi một số nhà phát triển nổi tiếng trong cộng đồng.

Để áp dụng theme, Khởi động VS Code (Ctrl + P), dán lệnh bên dưới mỗi theme và nhấn enter để apply.

1. Night Owl

VScode Theme - Owl

ext install sdras.night-owl

Links: GitHub | MarketPlace

2. Ariake Dark

Vscode Theme- Ariake

ext install wart.ariake-dark

Links: MarketPlace

3. One Dark Pro

VScode Them One Dark Pro

ext install zhuangtongfa.Material-theme

Links: GitHub | MarketPlace

Monokai Darker

Những theme cho VS Code tốt nhất

ext install eserozvataf.one-dark-pro-monokai-darker

Links: GitHub | MarketPlace

4. Nord

Những theme cho VS Code tốt nhất

ext install arcticicestudio.nord-visual-studio-code

Links: GitHub | MarketPlace

5. Dracula Official

Những theme cho VS Code tốt nhất

ext install dracula-theme.theme-dracula

Links: GitHub | MarketPlace

6. Pitch Black

Những theme cho VS Code tốt nhất

ext install viktorqvarfordt.vscode-pitch-black-theme

Links: GitHub | MarketPlace

7. City Lights

Những theme cho VS Code tốt nhất

ext install Yummygum.city-lights-theme

Links: GitHub | MarketPlace

8. Cobalt Next

Những theme cho VS Code tốt nhất

ext install dline.CobaltNext

Links: GitHub | MarketPlace

9. Cobalt2

Những theme cho VS Code tốt nhất

ext install wesbos.theme-cobalt2

Links: GitHub | MarketPlace

10. Material Theme

Những theme cho VS Code tốt nhất

ext install Equinusocio.vsc-material-theme

Links: GitHub | MarketPlace

10 kênh Youtube học lập trình không thể bỏ qua dành cho Junior Web Developer / Designer

kênh Youtube học lập trình

Nếu bạn đang làm lập trình web ở level junior, có lẽ một trong những câu hỏi mà bạn thường hay tự hỏi chính mình đó là: Làm sao kiếm được đúng nguồn để mà học?

Đây là lúc Youtube phát huy tác dụng của nó. Youtube đã quá đỗi quen thuộc với mọi người. Nó là một dịch vụ chia sẻ video cho phép người dùng tạo những channel của riêng họ và đăng tải lên các nội dung dưới dạng video dành cho cộng đồng.

Nếu bạn là một người mới bắt đầu vào ngành, bạn cần phải sắc sảo và tinh tế hơn trên con đường học tập của mình. Không phải ai cũng đủ kiên nhẫn bỏ ra một số tiền để mua một khóa học lỗi thời trên mạng để học cả.

Đó là lý do vì sao trong bài viết này, TopDev sẽ tập hợp lại danh sách các kênh Youtube học lập trình sở hữu các nội dung tuyệt vời về Web Developer/Designer. Mong rằng sau bài viết này sẽ giúp các bạn phần nào trên con đường phát triển của mình.

Bắt đầu nhé!

  Tài nguyên thiết kế web và hình ảnh hot nhất cho Lập trình viên

  Trước khi trở thành Web Developer mình đã phải bỏ lỡ những điều gì?

Dev Ed

Là channel dạy các ngôn ngữ trong mảng front-end và các thư viện javascript cũng như là react, hay môi trường runtime trong back-end như nodejs, hoặc dạy thiết kế bằng các công cụ như figma và photoshop.

Dev Ed cung cấp cho bạn các công cụ phát triển web phong phú để đảm bảo bạn không cảm thấy nhàm chán trong quá trình học.

Bạn có thể xem qua kênh Dev Ed tại đây.

Tech Lead

Kênh Tech Lead sẽ không dạy bạn cách viết code thông qua các ví dụ thực tế. Thay vào đó, Patrick Shyu – người tạo ra kênh này sẽ chia sẻ những kiến thức của ông qua nhiều năm với tư cách là một cựu lãnh đạo công nghệ Google.

Ông cung cấp cái nhìn sâu sắc về các vấn đề mà junior developer đang phải đối mặt, từ cách làm việc sao cho hiệu quả hơn cho đến cách mọi người loại bỏ căng thẳng trong công việc. Ông ấy cũng rất có khiếu hài hước nên bạn sẽ rất thích channel này đấy.

Bạn có thể xem kênh Tech Lead tại đây.

Programming with Mosh

Programming with Mosh cung cấp cho bạn các hướng dẫn giúp bạn trở thành một lập trình viên giỏi nhất có thể. Kênh của anh ấy upload đầy đủ các ngôn ngữ front-end và cả back-end, cũng như các thư viện và framework.

Nếu bạn đang có ý định hướng tới việc cải thiện các kỹ năng code của mình với tư cách là một nhà developer front-end hoặc back-end, thì đây sẽ là một channel thích hợp nhất cho bạn.

Bạn có thể xem qua kênh Programming with Mosh tại đây.

Tyler Moore

Khi nhắc đến kênh Tyler Moore, mọi người sẽ nghĩ ngay đến những video hướng dẫn học lập trình web dành cho người dùng một cách thân thiện nhất bằng wordpress. Kênh này có hơi hướng về thiết kế hơn so với các kênh ở trên.

Tuy nhiên, nếu bạn là một developer tự do, đôi khi bạn sẽ cần phải sử dụng các công cụ như wordpress để hoàn thành công việc. Kênh Tyler Moore là một lựa chọn hoàn hảo để bạn đạt hiệu quả cao nhất trong công việc. Hiện Tyler Moore đã có gần 31 triệu lượt xem trên youtube.

Bạn có thể xem qua kênh Tyler Moore tại đây.

Wes Bos

Wes Bos cung cấp cho các bạn các hướng dẫn để cải thiện kỹ năng phát triển web của mình. Danh sách hướng dẫn về javascript trên kênh của anh ấy có tới tận 30 dự án javascript khác nhau.

Bạn có thể xem qua kênh Web Bos tại đây.

Design Course

Kênh này thuộc quyền sở hữu của Gary Simon và đã hoạt động được 8 năm rồi. Design Course cung cấp cho bạn các video giúp nâng cao kỹ năng UI/UX bằng các công cụ như photoshop và Adobe XD.

Ngoài ra, ông còn dạy cho các lập trình viên kiến thức về front-end và back-end… Chính những điều này giúp cho kênh của ông trở thành một công cụ tuyệt vời để học hỏi các công nghệ phát triển web.

Bạn có thể xem qua kênh Design Coure tại đây.

CodingTheSmartWay

CodingTheSmartWay cung cấp cho bạn các hướng dẫn về phát triển web fullstack với machine learning.

Nếu bạn đang có định hướng phát triển web fullstack, kênh này sẽ là lựa chọn phù hợp nhất cho bạn.

Bạn có thể xem qua kênh CodingTheSmartWay tại đây.

Joshua Fluke

Bỏ qua phần dịch nghĩa của tên kênh đi nhé. Khi bạn muốn tìm một công việc developer mà lại không có hoặc hạn chế về mặt kinh nghiệm, chắc chắn bạn sẽ gặp khó khăn với việc viết CV để gây ấn tượng với nhà tuyển dụng.

Đó là lý do tại sao bạn nên ghé qua kênh này. Joshua Fluke sẽ giúp bạn cách viết CV xin việc tốt hơn cũng như nhiều thứ khác nữa.

Bạn có thể xem qua kênh Joshua Fluke tại đây.

freeCodeCamp

freeCodeCamp là một cộng đồng chứa những mã nguồn mở bởi những con người bận rộn – những người học cách viết code và xây dựng các dự án cho các tổ chức phi lợi nhuận. Kênh youtube của họ đăng tải các video hướng dẫn dưới dạng một khóa học trực tuyến.

Kênh có nhiều gia sư khác nhau dạy đa dạng các công nghệ hiện nay. Nếu bạn đang muốn học phát triển Android hoặc Ionic, bạn cũng có thể tham khảo ở kênh này.

Kênh của họ còn có một chương trình âm nhạc có thể giúp bạn thư giãn trong khi code.

Bạn có thể xem qua kênh freeCodeCamp tại đây.

Traversy Media

Một kênh được khá nhiều người ưa thích trong danh sách này chính là Traversy Media (thuộc quyền sở hữu của Brad Traversy). Đây quả thật là một kênh rất tuyệt vời. Với 60 triệu lượt xem trên kênh đã đủ để chứng minh cho điều này.

Traversy Media có các hướng dẫn trực tuyến về lập trình và phát triển web tốt nhất cho tất cả các công nghệ web mới nhất hiện nay như Node.js, Angular, React.js, PHP, Rails, HTML, CSS và còn nhiều hơn thế nữa.

Bạn có thể xem qua kênh Traversy Media tại đây.

Phần kết luận

Sử dụng kênh Youtube học lập trình chưa bao giờ là một ý kiến tồi, nhưng việc tìm cho mình một kênh để học tập hiệu quả nhất thì thật sự rất mất thời gian. Bên trên là 10 kênh Youtube mà TopDev đã tổng hợp lại, hi vọng sau bài viết này các bạn đã có bí quyết học tập tốt nhất cho bản thân.

Bạn đang tìm việc làm Web Developer hay việc làm designer? Xem ngay tại TopDev

Có thể bạn quan tâm:

Bạn có đang dùng git hiệu quả hay không?

dùng git hiệu quả

“Bạn có thể mang developer ra khỏi CVS, chứ chả cách nào lấy CVS RA khỏi tay họ được đâu.” – trong trường hợp này là tôi

  Git - Học nghiêm túc một lần (Phần 1)
  Cấu hình SSH Key cho Github

Sai là sai chỗ nào? 

Có lẽ bạn cho rằng tôi kiểu ngạo nhưng tôi cho rằng hầu như mọi người đều đang dùng Github sai cách! Sao mà ta có thể biết được mình đang dùng Github sai? Làm sao để dùng Git hiệu quả

Xem thêm Git là gì?

Trắc nghiệm thử nhé! Bạn thấy mình trong những trường hợp nào dưới đây?

  • Project nào bạn cũng có một cái repository online
  • Repository / repositories của bạn có branch mà ai cũng dùng và còn developer nhiều thay đổi khác lên nó. 
  • Bạn có một process mà ai cũng phải follow để review code; chỉ có một review system và chỉ có một nơi cố định để chạy tất cả các test.

Nếu tất cả những điều trên bạn đều “dính” thì tôi xin chia buồn với bạn đã thuộc nhóm dưới đây:

CVS vs DCVS

Bạn có còn nhớ CVS không? Nó viết tắt cho Concurrent Versions System*. Ở đây, Concurrent chính là từ khoá trọng tâm. Nếu như tất cả những gì bạn thao tác với source control là phải centralize nó, thì concurrency có lẽ là cột mốc xa nhất bạn có thể đạt được.

*Chú thích: CVS cho phép nhiều lập trình viên và các thành viên khác trong một nhóm phát triển phần mềm làm việc trơn tru với nhau. Trong đó, mỗi developer thay đổi nội dung các tập tin bên trong phiên bản copy của dự án của chính họ và sau đó gởi những thay đổi của họ về máy server. Để tránh việc người này ghi đè lên những thay đổi của người khác, server chỉ chấp nhận những thay đổi đối với phiên bản gần đây nhất của một file

Mặt khác, Git lại áp dụng Distributed version control, hay còn được gọi là Distributed revision control system (DRCS) (Hệ thống các phiên bản phân tán), hoặc Distributed version control system (DVCS).

*Chú thích: Khác với hệ thống tập trung như CVS, với DCVS nếu như máy chủ ngừng hoạt động, thì bạn hoàn toàn có thể lấy kho chứa từ bất kỳ máy khách nào để sao chép ngược trở lại máy chủ để khôi phục lại toàn bộ hệ thống. Mỗi checkout thực sự là một bản sao đầy đủ của tất cả dữ liệu của kho chứa từ máy chủ.  

Có lẽ tại một thời điểm nào đó khi Git trở nên nổi tiếng, nhiều người quên mất lí do vì sao nó được ra đời. Và giờ đây họ dùng Git như một CVS gây lãng phí bộ nhớ vì cứ phải copy toàn bộ lịch sử code ở khắp mọi nơi.

Cái mà tôi muốn nhấn mạnh chính là điểm khác biệt giữa Git so với các công cụ quản lý source trước đây nằm ở sự đối lập giữa:

Concurrent Model – tạo ra các thay đổi trong codebase chung tại cùng một thời điểm VS Distributed Model phát triển code một cách độc lập rồi share các thay đổi sau.

Đây là điểm khác biệt mấu chốt. Trong Distributed Model, từng developer phải càng tự chủ động và tự lập càng tốt, cái gì cần thống nhất thì thông qua việc giao tiếp với nhau chứ không phải là kiểm soát.

Có thể các bạn cho rằng chúng không khác nhau là mấy, nhưng nó ảnh hưởng tới cả văn hóa của dân lập trình. Nó sẽ thay đổi từ việc chọn cái nào để review trên source control system trước, đến cách bạn tạo ra build system, cũng như cách để giao tiếp, review, setup testing, etc.

DVCS chính là phiên bản nâng cấp của CVS. Bạn không nhất thiết phải áp dụng toàn bộ mọi thứ của DVSC model, nhưng dùng nó rồi thì sẽ giúp ích cho bạn rất nhiều. 

Những dấu hiệu cho biết nó đang có vấn đề

Bạn đã bao giờ đi review code, rồi phải đưa ra feedback còn dài hơn – lâu hơn việc bạn tự đi sửa nó chưa? 

Đã bao giờ bạn đã sửa xong phần mà cả team đang cần, nhưng vẫn chưa dùng được vì bạn chưa “nhập nó lên master branch“, bởi những phiền phức với các tool hiện tại, cũng như các quy trình lằng nhằng mà bạn phải thực hiện?

Bạn có gặp phải bug trên “master branch”, nhưng lại chỉ ảnh hưởng đến một số developer, hay thỉnh thoảng lại fail mà không bị phát hiện ra khi test?

Có khi nào bạn rơi vào tình huống bế tắc không thể làm gì khi master branch hỏng? 

Rốt cuộc nên dùng Git hiệu quả kiểu gì?

Model phát triển phần mềm của bạn nên áp dụng theo model phát triển Linux Kernel. Nó chính là cách mà Git được tạo ra và trở nên thịnh hành như bây giờ. Nó cho phép việc phát triển code độc lập, tiện lợi giữa nhiều người. Hoạt động tốt với hơn 15 triệu dòng code, là ngôi nhà chung cho hàng ngàn developer khác nhau, từ không chuyên cho tới chuyên nghiệp. Thế nên nó cũng sẽ rất có lợi cho project của bạn.

Thay đổi code

Đừng nên chỉ có một “master branch” mà tất cả mọi người đều sử dụng chung, bởi nó kết nối tất cả với nhau và chỉ cần “Một con ngựa đâu là cả tàu bỏ cỏ”. Khi code trong master branch thay đổi hay crash thì tất cả mọi thứ xung quanh đều sẽ bị ảnh hưởng.

Việc thay đổi code nên được diễn ra một cách thoải mái và dễ dàng giữa mọi người. các team và developer có thể tự do trao đổi các patches hoặc là cả branch nếu hợp lý tùy theo tình huống. Thường thì những thay đổi này sẽ bắt đầu từ dưới đi lên và lan ra. Nhờ mà ta sẽ có thời gian test và theo dõi trước khi những thay đổi đó được đưa vào “master branch”.

Ví dụ:

  • Đi từ dưới lên (Bottom-up): Junior developers nên push những thay đổi trong code qua cho senior developer review chúng. Nếu được chấp nhận thì sẽ đưa lên cho leader xem, rồi manager xem. Cứ thế cho đến hết một qui trình.
  • Lan ra (Across): UI team sẽ trao đổi patches, review và test liên tục giữa các thành viên trong nhóm, và thường sẽ phải xin manager phụ trách để merge chúng lại. Các backend developer thì có thể giữ những thay đổi của họ dù UI có thay đổi hay không.
  • Kết hợp (Mixed): Những contributor đóng góp feature cross-project sẽ gửi những thay đổi đến chủ của các project đó.

Nghe thì có vẻ rất lộn xộn nhưng trên thực tế nó lại khá đồng bộ, hay nói cách khác: một hệ thống đồng nhất.

Reviews

Tôi không đồng tình lắm với cách sắp xếp và tổ chức code review.

Tôi tin rằng cái giá phải trả để phát triển một software thành công luôn bị đánh giá thấp.

Rõ ràng bạn không hề muốn một app đầy bug, và lập trình viên thì chỉ là con người : mà con người thì luôn luôn mắc lỗi. Vì thế mà việc review là việc rất cần thiết. Thế nhưng nếu developer cho rằng việc này gây phiền hà và không cần thiết thì sẽ ảnh hưởng không nhỏ đến hiệu quả công việc của mình.

Do đó, bản thân code-review cũng chính là một rào cản mà các developer phải vượt qua khi làm project, chúng thường bao gồm:

  • Những tool thô, chỉ phù hợp một số trường hợp nhất định
  • Web UIs vừa xấu vừa dỏm
  • Quan liêu COCC max level
  • Trễ nãi do review nhiều vòng và phải fix liên tục từ nhiều phía 

Trước tiên, developers đã có git  và môi trường để họ phát triển. Đó là tất cả những gì họ cần để thay đổi code, vốn bao gồm phải đọc lại những code cũ. Vậy thì sao họ lại phải cần những tool để đọc code, khi đang review chúng? Việc bắt các developer phải học thêm một phần mềm khác với chức năng tương tự chỉ khiến tổ tốn thời gian thêm.

Và tại sao phải ép buộc developer phải review code như nhau? Làm gì có chuyện ai cũng thích cùng một màu và cùng một web interface mà bạn chọn được? Bạn có ép họ phải xài chung một text editor luôn không?… Trong một team với distributed model thì các developer nên được phép dùng bất cứ tool gì phù hợp với họ để làm việc, bao gồm cả code review.

Quá trình review code diễn ra như sau: Bằng cách tìm output của diff command, nằm trong web-browser, và xác định được những lỗi rõ ràng thì được xem là vừa không hiệu quả vừa thiếu sót. Để review một thay đổi được hiệu quả, hãy download nó xuống, rồi dùng git checkout, mở IDE/text editor lên và xem những đoạn code mới này, chạy test hay thậm chí viết ra một số đoạn mới của chúng để thử, thao tác thỏa ý muốn của bạn. Chỉ khi đó thì ta mới thật sự gọi đó là “review code”.

Review nên tập trung về việc giao tiếp và hợp tác, chứ không phỉa về xăm xoi và chỉ trích. Một khi vấn đề đã được xác định rõ thì người review sẽ có thể sửa chúng ngay và gửi fix đó lại cho team. Nó sẽ nhanh hơn nhiều so với việc viết comment lí giải dài dòng và yêu cầu phải review lại thêm nhiều lần nữa. Hơn thế, kiểu “Tôi nghĩ rằng thay đổi mới này sẽ giúp bạn cải thiện code của mình” luôn dễ nghe hơn là kiểu “Code chú tởm lợm quá, đi mà fix nó đi”.

Testing

Bạn nên xem các developer như những người đóng góp fix sửa cho code chứ đừng cho rằng họ làm được tất cả mọi thứ ngay lập tức. Ngoài ra, hệ thống central testing cần được xem là bước cuối cùng của testing sau một loạt các bài test từ developer cũng như những người đóng góp khác. 

Nhờ đó mà nó giúp ta test được kĩ hơn và bảo đảm cho chất lượng của những thay đổi đó trước khi nó đến tay mọi người.

Để cho có hiệu quả, bạn cần phải bảo đảm việc testing giữa các member phải thật kĩ lưỡng, rõ ràng và có ích. Developers nên làm quen với việc chạy test hàng ngày. Những bài test luôn được thiết kế cho con người chứ máy móc không thể dùng test một cách hiệu quả được. Vì thế bạn nên cảm thấy thoải mái và có khả năng xác định những lỗi xuất hiện từ đâu và từ khi nào.

Kết luận

Những điều tôi nói ở trên không thể áp dụng được tất cả mọi tình huống. Và có lẽ nó chỉ đơn giản là vì bạn không khoái cái ý tưởng mà tôi đã đưa ra.

Dù vậy, CVS-es vẫn sẽ là lựa chọn tốt hơn CVS nhiều lần:

  • Dùng nó dễ hơn.
  • Developer sẽ không mất công cứ download toàn bộ lịch sử lại nhiều lần.
  • Bạn có những tính năng như: locking files hay kiểm tra sub-tree của project mình.

Tôi vẫn tin rằng cho dù bạn không thích hay ghét nó thì vẫn sẽ tốt hơn nếu bạn chịu tìm hiểu về chúng! 

Hy vọng qua bài viết này các bạn sẽ biết cách dùng Git hiệu quả nhất. Cảm ơn các bạn đã theo dõi bài viết!

Đừng bỏ lỡ những bài viết hay liên quan:

Xem thêm việc làm Software Developers hấp dẫn tại TopDev

TopDev via Codecamp

  Combo các lệnh Git đủ dùng trong một dự án cho người mới bắt đầu
  Git - Học nghiêm túc một lần (Phần 1)

10 theme Sublime Text tốt nhất

10 theme Sublime Text tốt nhất

Sublime Text là một trong những trình biên tập code phổ biến nhất và được sử dụng nhiều nhất mọi thời đại. Sublime Text cung cấp cho các developer rất nhiều công cụ để giúp cho năng suất và quy trình công việc

Cùng với font chữ, việc chọn một theme tốt với các color scheme trực quan cũng góp phần đáng kể giúp tăng năng suất làm việc của lập trình viên. Nếu bạn đang dùng Sublime Text 3 thì đừng quên khám phá những themes và color scheme cực kì bắt mắt, thân thiện của text editor này nhé.

Cài đặt Theme Sublime Text 3

Để cài đặt theme, chỉ cần sử dụng package control. Quá trình sẽ là:

  1. ctrl + shift + p or cmd + shift + p
  2. Tìm kiếm Package Control: Install Package
  3. Tìm theme và enter
  4. Sau khi cài đặt xong, bạn có thể thiết lập giao diện bằng cách mở Command Palette. Set đặt giao diện trong Preferences -> Settings – User bằng cách chỉnh sửa json property calledtheme
{
    "theme": "Lanzhou.sublime-theme"
}

Khi cài đặt nhiều theme này sẽ mang lại các màu sắc mới vào Sublime, chúng sẽ không tự động được áp dụng. Chúng phải được set tại Preferences -> Color Scheme.

5. Mỗi giao diện — theme sẽ có thể có nhiều mẫu — color scheme khác nhau. Để thay đổi mẫu màu, bạn thay đổi thuộc tính color_scheme.

{
  // change color scheme
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Monokai.tmTheme"
}

hoặc bạn có thể thay đổi theme và color scheme bằng cách mở Command Palette và tìm UI: Select Theme hoặc UI: Select Color Scheme. Sau đây là 10 mẫu theme được sử dụng nhiều nhất trên Sublime Text.

GUNA

Guna là một theme cực kỳ sáng tạo cho Sublime Text 3. Nó hỗ trợ vài function thú vị sau: widgets (clock, weather) trên sidebar, theme colors có thể điều chỉnh theo cách thủ công hoặc thích ứng (adaptively), kiểm soát status bar label bằng api của chính nó.

Predawn

  • Predawn là dark interface và syntax theme cho Sublime Text.
  • Predawn là một trong những theme hay nhất cho sublime text 3.

Cài đặt

{
  // Predawn
  "theme": "predawn.sublime-theme",
 "color_scheme": "Packages/Predawn/predawn.tmTheme"
}

Boxy

  • Boxy cung cấp cho bạn một giao diện có thể tùy chỉnh và nó cũng đi kèm với các chủ đề có màu sáng và tối.
  • Bạn có thể tùy chỉnh trình chỉnh sửa với nhiều tùy chọn có sẵn để điều chỉnh nó theo sở thích của bạn.

Cài đặt

{
  // Boxy
  "theme": "Boxy Monokai.sublime-theme"
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Monokai.tmTheme",
}

Các Boxy theme chất lượng cao là:

  1. Boxy Monokai (Predawn)
  2. Boxy Solarized Dark (Code)
  3. Boxy Yesterday (Atom)
  4. Boxy Solarized Light (Iowa)
  5. Boxy Nova (Minimal)

Cài đặt:

{
  // Boxy Monokai
  "theme": "Boxy Monokai.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Monokai.tmTheme",
}
{
  // Boxy Solarized Dark
  "theme": "Boxy Solarized Dark.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Solarized Dark.tmTheme",
}
{
  // Boxy Solarized Light
  "theme": "Boxy Solarized Light.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Solarized Light.tmTheme",
}
{
  // Boxy Nova
  "theme": "Boxy Nova.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Nova.tmTheme",
}
{
  // Boxy Ocean
  "theme": "Boxy Ocean.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Ocean.tmTheme",
}
{
  // Boxy Tomorrow
  "theme": "Boxy Tomorrow.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Tomorrow.tmTheme",
}
{
  // Boxy Yesterday
  "theme": "Boxy Yesterday.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Yesterday.tmTheme",
}

Ayu

  • Theme đơn giản và dễ tìm.
  • Theme đi kèm 3 tùy chọn là mirage, light và dark.

Cài đặt

{
  // Ayu
  "theme": "ayu-light.sublime-theme"
  "color_scheme": "Packages/ayu/ayu-light.tmTheme",
}

Ba Ayu theme chất lượng cao là:

  1. Ayu Light
  2. Ayu Mirage
  3. Ayu Dark
{
  // Ayu light
  "theme": "ayu-light.sublime-theme",
  "color_scheme": "Packages/ayu/ayu-light.tmTheme",
}

{
  // Ayu migrate
  "theme": "ayu-mirage.sublime-theme",
  "color_scheme": "Packages/ayu/ayu-mirage.tmTheme",
}

{
  // Ayu dark
  "theme": "ayu-dark.sublime-theme",
  "color_scheme": "Packages/ayu/ayu-dark.tmTheme",
}

Agila

  • Agila là một theme nhiều màu sắc và phổ biến với rất nhiều tính năng cool.
  • Một trong những tính năng phổ biến nhất của nó là không gian rộng rãi giữa các thư mục trong file tree.
  • Có rất nhiều sự lựa chọn mà chúng ta có thể lựa chọn theo sở thích của riêng mình.

Cài đặt

{
  // Agila
  "theme": "Agila.sublime-theme"
  "color_scheme": "Packages/Agila Theme/Agila Oceanic Next.tmTheme",
}

Agila với 7 theme chất lượng cao gồm:

  1. Agila Origin Theme.
  2. Agila Monokai Theme.
  3. Agila Cobalt Theme.
  4. Agila Oceanic Theme.
  5. Agila Light Theme.
  6. Agila Neon Theme.
  7. Agila Classic Theme.

Material

  • Theme này có số lượng cài đặt rất cao.
  • Cũng bao gồm nhiều tùy chọn color scheme để sử dụng trên trình soạn thảo.

Cài đặt

{
  // Material
  "theme": "Material-Theme.sublime-theme"
  "color_scheme": "Packages/Material Theme/schemes/Material-Theme.tmTheme",
}

Materialize

  • Một theme thanh lịch được xây dựng dựa trên theme Material.
  • Dựa trên thiết kế Material Design của Google
{
  // Materialize
  "theme": "Materialize-Theme.sublime-theme"
}

Seti_UI

Một bản được lấy cảm hứng từ giao diện Seti trên Atom, Seti UI vẫn giữ được những cái hay của phiên bản gốc: giao diện tối đi kèm với 7 mẫu màu. Seti UI hỗ trợ khá nhiều tùy chỉnh mà bạn có thể tham khảo trong trang chủ của nó.

{
  // Seti_UI
  "theme": "Seti_UI-Theme.sublime-theme"
}

Spacegray

  • Các theme Spacegray có các lược đồ màu Base16.
  • Hình minimal và đơn giản.
  • Cài đặt sẵn có cho chỉnh sửa phông chữ, tab và thanh bên.
{
  // Spacegray
  "theme": "Spacegray light.sublime-theme"
}

Spacegray có ba chủ đề chất lượng cao bao gồm:

  1. Spacegray.
  2. Spacegray Light.
  3. Spacegray Eighties.

Afterglow

  • Một theme tối giản cho Sublime Text.
  • Theme Afterglow được dựa trên Spacegray.
  • Hỗ trợ các tab khác nhau, các tùy chọn màu sắc, các biểu tượng bên và cú pháp markdown.
{
  // Afterglow
  "theme": "afterglow.sublime-theme"
}

Arc dark

Cài đặt

{
  // Arc dark
  "theme": "Arc-Dark-Master.sublime-theme",
  "color_scheme": "Packages/User/Arc-Dark/schemes/Arc.tmTheme"
}

Tips cho việc chọn Theme

  • Mỗi người nhìn màu khác nhau, tìm một theme tạo ra sự tương phản tốt giữa nền và văn bản cho bạn.
  • Khi đôi mắt của bạn mệt mỏi trong đêm khuya, bạn nên xem xét một chương trình như Flux. Nó làm cho màu sắc của màn hình máy tính của bạn thích ứng với thời gian trong ngày, ấm áp vào ban đêm và giống như ánh sáng mặt trời vào ban ngày.
  • Hãy thử Colorublime, nó cho phép bạn thay đổi scheme màu hiện tại của bạn ngay lập tức từ bên trong Sublime Text.

Tổng kết

Danh sách này đã được thực hiện bởi các cuộc khảo sát và ý kiến của các lập trình viên về các diễn đàn, blog, chủ đề được tìm kiếm nhiều nhất và được đề cập nhiều nhất, mức độ và xếp hạng phổ biến ở kiểm soát package và số lượt cài đặt.

Tham khảo thêm các vị trí tuyển dụng ngành it hấp dẫn tại Topdev

[Update] 43 kho lưu trữ Github JS phổ biến nhất 2024 –  Bạn đã biết hết chưa?

Cấu hình SSH Key cho Github

Chắc chắn các bạn sẽ bất ngờ với số lượng project mã nguồn mở mà TopDev sẽ chia sẻ trong bài viết hôm nay. Và bạn sẽ còn bất ngờ hơn bởi chất lượng của chúng nữa đấy. Mỗi khi gặp một vấn đề gì đó, có thể tìm ra nhiều kho lưu trữ kho lưu trữ Github JS phổ biến hơn.

Trong bài viết này, TopDev sẽ giúp các bạn khám phá kho lưu trữ với các tiện ích thực tiễn tốt nhất của Node, tiện ích mở rộng trình duyệt hiển thị cây mã trên GitHub, render JavaScript, thư viện Node.js WebSocket, framework JS để làm game 3D cũng như nhiều dự án GitHub Javascript tinh gọn khác…

  Cấu hình SSH Key cho Github
  [Update] 43 kho lưu trữ Github JS phổ biến nhất 2024 -  Bạn đã biết hết chưa?

Github là gì?

GitHub được xem như một dịch vụ, công cụ hỗ trợ và cung cấp kho lưu trữ mã nguồn Git dựa trên nền tảng web cho các dự án phát triển phần mềm. Hiện nay, Github cung cấp cả các phiên bản có tính phí và không tính phí cho nhiều phân khúc người dùng khác nhau.

Github đã dần trở thành một sản phẩm tầm ảnh hưởng sâu rộng trong cộng đồng lập trình và phát triển các mã nguồn mở. Hiện tại, giới công nghệ đã bắt đầu xem nó như một chiếc CV đúng chất lập trình, thể hiện rõ nhất năng lực của mình. Trong thời điểm hiện tại, rất nhiều nhà tuyển dụng đã yêu cầu các lập trình viên phải gởi kèm link Github trong hồ sơ xin việc của mình.

Các kho lưu trữ Github JS phổ biến nhất

  1. Node.js best pracitces: Là một kho lưu trữ với đánh giá tốt nhất trên Node hiện nay. (28.833 sao cho đến nay)
  2. Octotree: Là một tiện ích mở rộng trên trình duyệt (Chrome, Firefox, Opera và Safari) hiển thị cây mã trên Github. Được sử dụng để truy cập vào mã nguồn trong dự án mà không cần phải tải xuống nhiều kho lưu trữ vào máy của bạn. (17.145 sao cho đến nay)
  3. html2canvas: Trình render JavaScript, tập lệnh cho phép bạn chụp ảnh màn hình của các trang web hoặc các phần bên trong nó một cách trực tiếp trên trình duyệt của người dùng. (16.752 sao cho đến nay)
  4. Svelte: Là một trình biên dịch lấy các thành phần khai báo của bạn và chuyển đổi chúng thành JavaScript hiệu quả, cập nhật nhanh chóng DOM (14.571 sao cho đến nay)
  5. forever: Công cụ CLI đơn giản để đảm bảo rằng một tập lệnh đã cho chạy vô hạn. (12.221 sao cho đến nay)
  6. ws: Rất đơn giản để sử dụng và đã được kiểm tra kỹ lưỡng việc triển khai máy khách và máy chủ Node.js Websocket. (11.420 sao cho đến nay)
  7. Nightwatch: Một framework tự động kiểm tra và tích hợp liên tục dựa trên Node.js, sử dụng giao thức Webdo. (9.266 sao cho đến nay)
  8. Babylon.js: Là một framework Javascript hoàn chỉnh để xây dựng các trò chơi 3D với HTML5 và WebGL. (9.171 sao cho đến nay)
  9. Dotenv: Là một module không phụ thuộc, tải các biến môi trường từ tệp .env vào process.env. Lưu trữ cấu hình trong môi trường tách biệt với code dựa trên phương pháp Ứng dụng 12 yếu tố. (8.916 sao cho đến nay)
  10. tui.editor: Trình biên tập WYSIWYG được đánh dấu. Kho lưu trữ cho trình soạn thảo UI TOAST. Đạt tiêu chuẩn + Biểu đồ GFM và mở rộng UML. (8.547 sao cho đến nay)
  11. Sheperd: Là một thư viện JavaScript để hướng dẫn người dùng thông qua ứng dụng của bạn. Nó sử dụng Tippy.js, một thư viện mã nguồn mở khác để render các hộp thoại cho mỗi “ step”. (7.429 sao cho đến nay)
  12. node-postgres: Một tập hợp các module Node.js để giao tiếp với cơ sở dữ liệu PostgreSQL. Nó có hỗ trợ cho các cuộc gọi lại, promises, asysc / await, kết nối, câu lệnh đã được chuẩn bị, kết quả phát trực tuyến, liên kết C/C++, phân tích cú pháp một cách phong phú. ( 7.325 sao cho đến nay )
  13. Nexe: Tiện ích dòng lệnh biên dịch ứng dụng Node.js của bạn thành một tệp thực thi duy nhất. ( 7.249 sao cho đến nay)
  14. Razzle: Công cụ để tạo các ứng dụng JS được máy chủ render mà không cần cấu hình. (7.089 sao cho đến nay).
  15. react-jsonchema-form: Một thành phần React đơn giản có khả năng xây dựng các biểu mẫu HTML từ lược đồ JSON và sử dụng Bootstrap theo mặc định. (6.740 sao cho đến nay). Xem thêm JSON là gì?
  16. MDX: Là một định dạng có thể ủy quyền cho phép bạn sử dụng liền mạch JSX trong các tài liệu đánh dấu của bạn. Bạn có thể nhập các thành phần, như biểu đồ hoặc thông báo tương tác và xuất siêu dữ liệu. (6.629 sao cho đến nay)
  17. Tippy.js: Thư viện công cụ và popover có thể tùy chỉnh được cung cấp bởi Popper.js. Nó tương thích với IE11 +, khoảng 99% người dùng máy tính để bàn và 97% người dùng di động. Nó có thể được sử dụng để tạo các chú giải công cụ văn bản tĩnh đơn giản hoặc các popovers HTML phức tạp sử dụng AJAX. (5,982 sao cho đến nay)
  18. sql.js: Là một port của SQLite đến Webassugging, bằng cách biên dịch mã SQLite C với Emscripten. (5,413 sao cho đến nay)
  19. Bootbox.js: Thư viện JS để tạo các hộp thoại lập trình bằng cách sử dụng các phương thức Bootstrap. (4.649 sao cho đến nay)
  20. CSS-Only Chat: Là một cuộc trò chuyện không đồng bộ trên web một cách quái dị, nó không sử dụng bất kỳ mã JS nào trên frontend. (4.295 sao cho đến nay)
  21. np: thì tốt hơn ‘ npm publish ‘ một tí. (4.277 sao cho đến nay)
  22. vue-multiselect: Là một thành phần chọn tổng thể / đa lựa chọn / gắn thẻ phổ biến cho Vue.js. (4.270 sao cho đến nay)
  23. PostGraphile: (Trước đây là “PostGraphQL”) là API GraphQL được hỗ trợ chủ yếu bởi cơ sở dữ liệu PostgreQuery của bạn. (7.233 sao cho đến nay)
  24. Cashmột bản thay thế nhỏ của jQuery cho các trình duyệt hiện đại (IE10 +) cung cấp cú pháp kiểu jQuery để thao tác DOM. (3,838 sao cho đến nay)
  25. Bowser: là một trình phát hiện trình duyệt. Đây là một thư viện JS được tạo để giúp phát hiện trình duyệt nào mà người dùng của bạn có và cung cấp cho bạn API thuận tiện để lọc người dùng bằng cách nào đó tùy thuộc vào trình duyệt của họ. (3.698 sao cho đến bây giờ)
  26. Comlink: Một thư viện nhỏ (1.1kB), giúp loại bỏ rào cản suy nghĩ về postMessage và giúp bạn ẩn khi đang làm việc với công nhân. Nó làm cho WebWorkers thú vị hơn. (3.249 sao cho đến nay)
  27. Choices.js: là một vanilla, nhẹ (được nén tầm 22kb), plugin chọn box / văn bản có thể định cấu hình. Tương tự như Select2 và Select kích thước nhưng không có phụ thuộc vào jQuery. (2.871 sao cho đến nay)
  28. vue-select: Mọi thứ bạn muốn phần tử <select> HTML có thể làm, được gói gọn trong một thành phần Vue nhẹ và có thể mở rộng. (2.733 sao cho đến nay)
  29. ReactPlayer: Là một thành phần React để chơi nhiều loại URL, bao gồm đường dẫn tệp, YouTube, Facebook, Twitch, SoundCloud, Streamable, Vimeo, Wistia và DailyMotion. (2.501 sao cho đến nay)
  30. jquery.terminal: (jQuery Terminal Emulator) là một plugin để tạo trình thông dịch dòng lệnh trong các ứng dụng của bạn. (2.122 sao cho đến nay)
  31. autoComplete.js là một thư viện Javascript vanilla thuần túy được thiết kế để tích hợp liền mạch với nhiều dự án và hệ thống. (2.106 sao cho đến nay)
  32. Dockly là một terminal interface để quản lý các container và services của Docker. (2.062 sao cho đến nay)
  33. node-mssql là client của Microsoft SQL Server cho Node.js (1.479 sao cho đến nay).
  34. match-sorter là sự sắp xếp phù hợp nhất định của một mảng trong JavaScript. (1.313 sao bây giờ)
  35. Saber là một trình tạo trang web tĩnh để xây dựng các trang web nhanh hơn với Vue.js (1.261 sao cho đến nay)
  36. Node-convict là một thư viện quản lý cấu hình cho Node.js (1.170 sao cho đến nay)
  37. globby là một sự kết hợp người dùng trên toàn cầu lại với nhau. (1.086 sao cho đến nay)
  38. on-change là một thư viện để xem một đối tượng hoặc mảng để tiện việc thay đổi. Nó hoạt động đệ quy, do đó, nó thậm chí sẽ phát hiện nếu bạn sửa đổi một thuộc tính sâu như obj.a.b [0] .c = true (1.022 sao cho đến nay)
  39. Faast.js làm cho các chức năng thông thường trở thành các chức năng không có máy chủ trên AWS Lambda và Google Cloud. Nó xử lý việc tải lên các đoạn code của bạn một cách chi tiết, tạo cơ sở hạ tầng đám mây và dọn dẹp chúng. (1.021 sao cho đến nay)
  40. file-type là một thư viện để phát hiện loại tệp của Buffer / Uint8Array / ArrayBuffer. (1.014 sao cho đến nay)
  41. Gluegun là một bộ công cụ thú vị để xây dựng các giao diện dòng lệnh (CLI) dựa trên Node trong TypeScript hoặc JavaScript hiện đại (994 sao cho đến nay). Xem thêm TypeScript là gì?
  42. low.js: Là một port của Node.JS với yêu cầu hệ thống thấp hơn nhiều. (918 sao cho đến nay)
  43. bent: Một chức năng của client HTTP cho Node.js w / async / await. (666 sao cho đến nay)

Kết luận

Hy vọng những kho lưu trữ GitHub JS phổ biến mà mình đã liệt kê ở trên sẽ có ích cho các bạn lập trình viên. Cảm ơn các bạn đã theo dõi bài viết.

Xem thêm 50 dự án nguồn mở Github chất dành cho lập trình viên

Đừng bỏ lỡ những bài viết được cộng đồng quan tâm nhiều nhất về chủ đề GitHub:

Ngoài ra, đừng bỏ lỡ các việc làm Software Developers hot tại TopDev

  Những lập trình viên phiên bản X-men: Những code project "dị" nhất trên GitHub
  5 tip về GitHub cho lập trình viên

4 lý do để VS Code là Text Editor ưa thích của mọi lập trình viên

Ưu điểm của VS Code

Từ lâu tôi đã xem và đề xuất Visual Studio là tool số một để phát triển đa dạng use-case. Đâu là tool đầu tiên mà tôi lập trình C++, C# và cũng là tool mà tôi nhớ nhất khi quay trở lại làm việc với Python.

Dạo gần đây, tôi tự hỏi liệu mình có thể giải quyết cùng vấn đề như VS Code không. Vì sau một thời gian dài phân tích, tôi nghĩ rằng tôi thể dành chút thời gian để list ra các lí do tại sao tôi ngày càng thích VS Code.

Cùng khám phá các ưu điểm của VS Code trong bài viết này nhé!

Các settings riêng cho Workspace

Tôi cũng các đồng nghiệp đã từng tranh luận nhiều về các rule cơ bản nhưng quan trọng cho coding guidelines của chúng tôi (spaces vẫn tốt hơn).

Sau khi cài các indents (thụt dòng) rộng khoảng 8 space, tôi nhanh chóng nhận ra rằng tôi sẽ gặp phải vấn đề với Visual Studio: setting của text editor chỉ có thể set program-wide (trong phạm vi chương trình).

Tôi phải đổi đi đổi lại hoặc tìm một extension phù hợp để làm vậy nếu tôi muốn nó tương thích với những quy ước đã set trước đó.

Ưu điểm của VS Code

Trong VS Code, concept “workplace” cho phép chúng ta define bộ setting. Việc tạo một override cho một workplace cố định là khá đơn giản, tôi chỉ việc tạo folder mới và xác định một vài cái ghi đè. Nó cho phép sử dụng cùng format mà bạn define nó trên cấp user. Nó cho phép tiếp tục dùng setting của tôi cho các project cá nhân khi vẫn tương thích với các quy ước đã thỏa mãn.

  5 VS Code Extensions hữu ích cho React developers

Startup time nhanh tương đối

Ưu điểm của VS Code

Notepad là một text editor tuyệt vời cho mọi loại text có các lines kết thúc bằng CRLF, nhưng còn những loại còn lại thì sao? Edit mọi thứ mà không có các line-breaks phù hợp nghe như một cơn ác mộng vậy. Có một option đó là mở Visual Studio cho file hoặc folder đơn, nhưng bạn sẽ phải đợi một lúc. Đối với tôi thì câu trả lời là VS Code.

Run VS 2017 VS Code
1 3.5508 1.1607
2 2.9868 1.1258
3 3.4115 1.1736
4 2.4786 1.1928
5 3.3778 1.0983
6 2.9395 1.1373
7 3.1672 1.1528
8 2.8437 1.3238
9 3.4466 1.1818
10 2.9016 1.1408
Result VS 2017 VS Code
Avg 3.1104 1.1688
Min 2.4786 1.0983
Max 3.5508 1.3238

Đơn vị thời gian là trên giây.

Cross-platform support

Visual Studio chỉ hỗ trợ trên Windows, nhưng một bản khác dựa trên MonoDevelop thì hỗ trợ trên Mac. Trong khi đó Windows, Mac, và Linux đều được hỗ trợ chính thức bởi VS Code team. Điều này đồng nghĩa rằng có ít nhất thêm một tool mà chúng ta không còn bị phụ thuộc vào Windows!

Tính linh hoạt cao thông qua extensions và settings

Ưu điểm của VS Code

Một ưu điểm của VS Code nữa, đó là đã trở nên tiện dụng hơn rất nhiều, build lên cả hệ support cho các ngôn ngữ lập trình phổ biến như C++ và C# dưới dạng các packages lẻ, mặc dù TypeScript đã mặc định bao gồm trong đó.

Các interface gồm một set API tiêu chuẩn cung cấp một loại hoàn thiện code phổ biến và functionality tìm symbol mà bạn muốn từ bất kì IDE nào có support cấp cao cho ngôn ngữ.

Kết

Sau những phân tích trên, VS Code chắc chắn không dành cho tất cả lập trình viên. Tôi tin tưởng vào việc tìm solution hoặc tool phù hợp nhất để đạt được mục tiêu thay vì làm việc trong hạn chế của một tool nào đó.

Nếu bạn được quyền chọn solutions, điều quan trọng là phải phân tích xem liệu có cái gì khác tốt hơn ngoài kia không để chuyển sang nó.

Có thể bạn quan tâm:

Xem thêm việc làm Software Developers hot nhất trên TopDev

Thuật toán Quick Sort là gì?

Thuật toán Quick Sort là gì

Thuật toán Quick Sort là gì?

Thuật toán Quick Sort là một thuật toán sắp xếp, còn được gọi là sắp xếp kiểu phân chia (Part Sort). Là một thuật toán hiệu quả dựa trên việc phân chia mảng dữ liệu thành các nhóm phần tử nhỏ hơn.

Phân loại: Giải thuật sắp xếp
Phức tạp thời gian: Trung bình O(n log n)
Xấu nhất: O(n2)
Phức tạp dữ liệu: Khác nhau tùy vào cách hiện thực
Tối ưu: Thỉnh thoảng

Giải thuật sắp xếp nhanh chia mảng thành hai phần bằng cách so sánh từng phần tử của mảng với một phần tử được gọi là phần tử chốt. Một mảng bao gồm các phần tử nhỏ hơn hoặc bằng phần tử chốt và một mảng gồm các phần tử lớn hơn phần tử chốt.

Quá trình phân chia này diễn ra cho đến khi độ dài của các mảng con đều bằng 1. Với phương pháp đệ quy ta có thể sắp xếp nhanh các mảng con sau khi kết thúc chương trình ta được một mảng đã sắp xếp hoàn chỉnh.

Kỹ thuật chọn phần tử chốt

Kỹ thuật chọn phần tử chốt ảnh hưởng khá nhiều đến khả năng rơi vào các vòng lặp vô hạn đối với các trường hợp đặc biệt. Tốt nhất chọn phần tử chốt nằm ở trung vị của danh sách. Khi đó, sau log2(n) lần chia ta đạt được kích thưởng mảng con bằng 1.

Dưới đây là một số cách chọn phần tử chốt:

  • Chọn phần tử đứng đầu hoặc đứng cuối làm phần tử chốt.
  • Chọn phần tử đứng giữa danh sách làm phần tử chốt.
  • Chọn phần tử trung vị trong ba phần tử đứng đầu, đứng giữa và đứng cuối làm phần tử chốt.
  • Chọn phần tử ngẫu nhiên làm phần tử chốt. Tuy nhiên cách này rất dễ dẫn đến khả năng rơi vào các trường hợp đặc biệt.

Ý tưởng thuật toán Quick Sort

Thuật toán Quick Sort là gì
Thuật toán Quick Sort là gì
  1. Chọn phần tử chốt.
  2. Khai báo 2 biến con trỏ để trỏ để duyệt 2 phía của phần tử chốt.
  3. Biến bên trái trỏ đến từng phần tử mảng con bên trái của phần tử chốt.
  4. Biến bên phải trỏ đến từng phần tử mảng con bên phải của phần tử chốt.
  5. Khi biến bên trái nhỏ hơn phần tử chốt thì di chuyển sang phải.
  6. Khi biến bên phải nhỏ hơn phần tử chốt thì di chuyển sang trái.
  7. Nếu không xảy ra trưởng hợp 5 và 6 thì tráo đổi giá trị 2 biến trái và phải.
  8. Nếu trái lớn hơn phải thì đây là giá trị chốt mới.

Thuật toán Quick Sort là gì

Giải thuật

Dưới đây là chương trình mô phỏng thuật toán đệ quy viết trên ngôn ngữ lập trình java:

public class QuickSort {
  public static void main(String[] args) {
    int[] x = {6, 2, 3, 4, 5, 9, 1};
    printArray(x);

    int left = 0;
    int right = x.length - 1;

    quickSort(x, left, right);
    printArray(x);
  }

  public static void quickSort(int[] arr, int left, int right) {
    if (arr == null || arr.length == 0)
      return;

    if (left >= right)
      return;

    int middle = left + (right - left) / 2;
    int pivot = arr[middle];
    int i = left, j = right;

    while (i <= j) {
      while (arr[i] < pivot) {
        i++;
      }

      while (arr[j] > pivot) {
        j--;
      }

      if (i <= j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
        i++;
        j--;
      }
    }

    if (left < j)
      quickSort(arr, left, j);

    if (right > i)
      quickSort(arr, i, right);
  }

  public static void printArray(int[] arr) {
    for(int i = 0; i < arr.length; i++) {
      System.out.print(arr[i] + " ");
    }

    System.out.println();
  }
}

Lượt dịch từ:

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

Xem thêm Software Developers hot nhất trên TopDev

TopDev via viblo

Framework Hapi.js là gì? Làm quen với Hapi.js cơ bản

Framework Hapi.js là gì

Bài viết này sẽ giới thiệu cho bạn Framework Hapi.js là gì. Bên cạnh đó sẽ cũng cấp cho bạn một số bước làm quen với Hapi.js cơ bản.

Cùng bắt đầu nhé!

  Top 8 Framework Web Development hot nhất 2024
  Nhập môn Nodejs API (Authentication - CRUD) cho người mới học

Framework Hapi.js là gì?

Hapi.js (còn được gọi là hapi) là một open-source framework dùng để xây dựng các ứng dụng web. Việc sử dụng hapi phổ biến nhất là xây dựng các API service. Xem thêm Framework là gì?

Tại sao nên sử dụng hapi.js?

Hapi có cấu trúc đơn giản, dễ dàng làm quen và sử dụng. Cộng đồng lập trình viên sử dụng đông đảo nên bạn sẽ nhận được nhiều support. Hệ thống plugin của hapi vô cùng phong phú và mạnh mẽ, cho phép bạn thêm các tính năng mới và sửa lỗi với tốc độ nhanh. Hapi cho phép bạn xây dựng các API có thể mở rộng, đây là một điểm cộng rất lớn cho các ứng dụng lớn.

Bắt đầu nhanh với hapi.js

Cài đặt hapi

Hapi là một framework node.js, cho nên các bạn cần chắc chắn đã cài đặt nodejs và npm. Các bước cài đặt hapi vô cùng đơn giản và tương tự với các project nodejs khác. Bạn tạo mới một thư mục với tên project (trong ví dụ này là hello-hapi) và thực hiện các bước sau:

  • Đi vào thư mục project: cd hello-hapi
  • Khởi tạo mới project: npm init
  • Cài đặt package hapi.js: npm install @hapi/hapi

Tạo một server hapi cơ bản

Từ thư mục project, các bạn tạo một file index.js với nội dung như sau:

const Hapi = require('@hapi/hapi');
const init = async () => {
  const server = Hapi.server({
    port: 3000,
    host: 'localhost'
  });
  await server.start();
  console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
  console.log(err);
  process.exit(1);
});
init();

Đầu tiên, bạn require hapi và khởi tạo mới một server Hapi.server() có chứa thông tin về port và host. Sau đó bạn start server và log ra thông báo.

Chi tiết về các thuộc tính khi khởi tạo server các bạn có thể tham khảo tại đây: https://hapijs.com/api#-serveroptions

Thêm một route xử lý request

Sau khi các bạn chạy server ở bước trên, thì mới chỉ nhận được log thông báo server đang chạy. Để xử lý các request gọi lên server, các bạn cần thêm các route cho server.

const Hapi = require('@hapi/hapi');
const init = async () => {
  const server = Hapi.server({
    port: 3000,
    host: 'localhost'
  });
  server.route({
    method: 'GET',
    path: '/',
    handler: (request, h) => {
      return 'Hello World!';
    }
  });
  await server.start();
  console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
  console.log(err);
  process.exit(1);
});
init();

Sửa lại file index.js với nội dung như trên và start lại server. Lúc này, khi truy cập vào trình duyệt với url http://localhost:3000 các bạn sẽ thấy dòng text 'Hello World!' hiển thị trên màn hình.

Các bạn có thể nhận thấy, để thêm một route vào ứng dụng hapi rất dễ dàng, tên các thuộc tính của route cũng đã gợi ra các chức năng tương ứng. Để biết thêm các thuộc tính của route và cách dùng, các bạn tham khảo tại đây: https://hapijs.com/api#route-options

Tổ chức thư mục

Về cách tổ chức thư mục dự án thì mỗi người có một phong cách khác nhau. Không có một cách nào là tốt nhất cho tất cả, nó chỉ phù hợp cho đa số mà thôi. Đối với dự án hapi mình thường đi theo cách tổ chức thư mục như sau:

Framework Hapi.js là gì

Lời kết

Bài viết này cho các bạn cái nhìn cơ bản về framework hapi.js là gì. Cảm ơn các bạn đã dành thời gian cho bài viết này!

Có thể bạn quan tâm:

Xem thêm việc làm NodeJS Developer hot nhất tại TopDev

TopDev via codemoingay.com

SDKMan là gì? Tại sao lập trình viên Java nên cài đặt SDKMan?

SDKMan là gì

Bài viết giúp bạn hiểu thêm khái niệm SDKMan là gì, lý do tại sao lập trình viên Java nên cài đặt nó. Bên cạnh đó cung cấp cho bạn một số lệnh cơ bản sử dụng trong SDKMan. Cùng bắt đầu thôi!

SDKMan là gì?

SDKMan (Software Development Kit Manager) là một công cụ dùng để quản lý song song các phiên bản của các bộ phát triển phần trong lập trình Java.

Ví dụ bạn có thể cài nhiều phiên bản Java trên máy. Khi muốn dùng version nào thì bạn chuyển sang version đó. Hay muốn cài Java thì chỉ cần chạy lệnh của SDKMan là nó tự động cài phiên bản Java stable mới nhất hoặc theo phiên bản bạn chỉ định.

SKDMan cung cấp chuẩn giao tiếp dòng lệnh (Command Line Interface – CLI) và các api để cài đặt, xóa, chuyển đổi hiển thị danh sách SDK.

  Gitignore là gì ? Tại sao nó lại rất quan trọng trong teamwork
  Cryptography - Nó là gì và hoạt động như thế nào?

Những tính năng và ưu điểm của SDKMan

  • Giúp cho việc cài đặt dễ hơn: bạn không cần phải download, giải nén tạo các biến môi trường
  • Hỗ trợ đầy đủ các gói phát triển Java: SDKMan có thể cài được các SDK cho JVM (Xem thêm JVM là gì?) như Java, Groovy, Scala, Kotlin… Các trình quản lý thư viện Java như Ant, Gradle, Maven… (Xem các SDK mà SDKMan hỗ trợ quản lý tại đây)
  • SKDMan rất nhẹ: SDK được viết cho giao diện dòng lệnh (bash), chỉ yêu cầu chạy được lệnh curl, zip/unzip
  • SDKMan có thể chạy trên tất cả platforms UNIX: Mac OSX, Linux, Cygwin, Solaris and FreeBSD

Một số lệnh cơ bản của SDKMan

Liệt kê các sdk mà SDKMan hỗ trợ

sdk list

SDKMan là gì

Cài đặt bộ phát triển phần mềm (sdk)

Cài đặt bản stable nhất sdk install sdk_name:

Ví dụ mình muốn cài bản Java stable mới nhất thì sẽ dùng lệnh:

sdk install java

Hoặc muốn chỉ rõ một version nào đó thì bạn sử dụng sdk install sdk_name sdk_version

Ví dụ

sdk install scala 2.12.1

Hiển thị danh sách các version của sdk

Hiển thị danh sách các version của một bản sdk: sdk list sdk_name

Ví dụ mình muốn xem các version của gradle đang hỗ trợ:

sdk list gradle

SDKMan là gì

Xóa SDK

sdk uninstall sdk_name sdk_version

Ví dụ mình muốn xóa bản scala version 2.11.6

sdk uninstall scala 2.11.6

chuyển đổi giữa các version SDK

sdk default sdk_name sdk_version

Ví dụ trên máy mình có nhiều bản scala, mình muốn chuyển sang bản scala 2.11.6 làm bản mặc định

sdk default scala 2.11.6

Hy vọng qua bài viết này, các bạn có thể hiểu được SDKMan là gì. Cảm ơn các bạn đã theo dõi bài viết!

TopDev via stackjava.com

Có thể bạn quan tâm:

Xem thêm vị trí Java Developers hot nhất tại TopDev

API là gì? Tại sao API được sử dụng nhiều hiện nay?

thiết kế API

Hiện nay API nói chung và Web API nói riêng đang được ứng dụng ngày càng nhiều. Kiến trúc ứng dụng hiện đại ngày nay ngày càng phân tán, không phụ thuộc ngôn ngữ đã thúc đẩy việc ứng dụng API.  Vậy API là gì? Nguồn gốc và ưu điểm của nó là như thế nào?

API là gì?

API là các phương thức, giao thức kết nối với các thư viện và ứng dụng khác. Nó là viết tắt của Application Programming Interface – giao diện lập trình ứng dụng. API cung cấp khả năng truy xuất đến một tập các hàm hay dùng. Và từ đó có thể trao đổi dữ liệu giữa các ứng dụng.

API là gì

Tham khảo thêm: việc làm API lương cao lên đến 3000 USD

API thường ứng dụng vào đâu?

  • Web API: là hệ thống API được sử dụng trong các hệ thống website. Hầu hết các website đều ứng dụng đến Web API cho phép bạn kết nối, lấy dữ liệu hoặc cập nhật cơ sở dữ liệu. Ví dụ: Bạn thiết kế chức nằng login thông Google, Facebook, Twitter, Github… Điều này có nghĩa là bạn đang gọi đến API của. Hoặc như các ứng dụng di động đều lấy dữ liệu thông qua API.
  • API trên hệ điều hành: Windows hay Linux có rất nhiều API, họ cung cấp các tài liệu API là đặc tả các hàm, phương thức cũng như các giao thức kết nối. Nó giúp lập trình viên có thể tạo ra các phần mềm ứng dụng có thể tương tác trực tiếp với hệ điều hành.
  • API của thư viện phần mềm hay framework: API mô tả và quy định các hành động mong muốn mà các thư viện cung cấp. Một API có thể có nhiều cách triển khai khác nhau và nó cũng giúp cho một chương trình viết bằng ngôn ngữ này có thể sử dụng thư viện được viết bằng ngôn ngữ khác. Ví dụ bạn có thể dùng Php để yêu cầu một thư viện tạo file PDF được viết bằng C++.

API có thể sử dụng cho computer hardware, or software library, database system, web-based system, operating system. Bên cạnh đó, API cũng có rất nhiều dạng khác nhau, nhưng nhìn chung bao gồm một số đại diện đặc tả cho: data structures, variables, object classes, routines hoặc remote calls.

Tài liệu cho các API thường được cung cấp để tạo sự thuận lợi cho việc triển khai và sử dụng. Web API hiện đang được các doanh nghiệp lớn sử dụng cho khách hàng hoặc chính nội bộ công ty họ.

Một số khái niệm khác:

  • API hiện nay đều tuân thủ theo tiêu chuẩn REST và HTTP, tạo sự thân thiện dễ sử dụng với nhà phát triển. Giúp người dùng dễ dàng truy cập, dễ hiểu hơn. Web API hiện đại dùng cho các đối tượng cụ thể, chẳng hạn như mobile developer với document, version khác nhau.
  • API key: Đây là loại code (string) được truyền tải bởi các chương trình máy tính gọi là API để xác định chương trình, nhà phát triển hoặc người dùng nó tới trang web. Các API key được sử dụng với mục đích nhằm giới hạn, kiểm soát sử dụng API. Chẳng hạn như ngăn chặn sự việc lạm dụng API.

API Key thường hoạt động như một mã định danh duy nhất và mã thông báo bí mật để xác thực và thường sẽ có một bộ quyền truy cập trên API được liên kết với nó. Các API Key có thể dựa trên hệ thống định danh duy nhất toàn cầu (UUID) để đảm bảo chúng sẽ là duy nhất cho mỗi người dùng.

Web API là gì?

Web API là một phương thức dùng để cho phép các ứng dụng khác nhau có thể giao tiếp, trao đổi dữ liệu qua lại. Dữ liệu được Web API trả lại thường ở dạng JSON hoặc XML thông qua giao thức HTTP hoặc HTTPS.

Những điểm nổi bật của Web API

Web API hỗ trợ restful đầy đủ các phương thức: Get/Post/put/delete dữ liệu. Nó giúp bạn xây dựng các HTTP service một cách rất đơn giản và nhanh chóng. Nó cũng có khả năng hỗ trợ đầy đủ các thành phần HTTP: URI, request/response headers, caching, versioning, content format.

Tự động hóa sản phẩm

Với web API, chúng ta sẽ tự động hóa quản lý công việc, cập nhật luồng công việc, giúp tăng năng suất và tạo hiệu quả công việc cao hơn.

Khả năng tích hợp linh động

API cho phép lấy nội dung từ bất kỳ website hoặc ứng dụng nào một cách dễ dàng nếu được cho phép, tăng trải nghiệm người dùng. API hoạt động như một chiếc cổng, cho phép các công ty chia sẻ thông tin được chọn nhưng vẫn tránh được những yêu cầu không mong muốn.

Cập nhật thông tin thời gian thực

API có chức năng thay đổi và cập nhật thay đổi theo thời gian thực. Với công nghệ này, dữ liệu sẽ được truyền đi tốt hơn, thông tin chính xác hơn, dịch vụ cung cấp linh hoạt hơn.

Có tiêu chuẩn chung dễ sử dụng

Bất kỳ người dùng, công ty nào sử dụng cũng có thể điều chỉnh nội dung, dịch vụ mà họ sử dụng.

Hỗ trợ đầy đủ các thành phần MVC như: routing, controller, action result, filter, model binder, IoC container, dependency injection, unit test.

Web API hoạt động như thế nào?

  1. Đầu tiên là xây dựng URL API để bên thứ ba có thể gửi request dữ liệu đến máy chủ cung cấp nội dung, dịch vụ thông qua giao thức HTTP hoặc HTTPS.
  2. Tại web server cung cấp nội dung, các ứng dụng nguồn sẽ thực hiện kiểm tra xác thực nếu có và tìm đến tài nguyên thích hợp để tạo nội dung trả về kết quả.
  3. Server trả về kết quả theo định dạng JSON hoặc XML thông qua giao thức HTTP/HTTPS.
  4. Tại nơi yêu cầu ban đầu là ứng dụng web hoặc ứng dụng di động , dữ liệu JSON/XML sẽ được parse để lấy data. Sau khi có được data thì thực hiện tiếp các hoạt động như lưu dữ liệu xuống Cơ sở dữ liệu, hiển thị dữ liệu…

Nói thêm về Web API, hiện nay các lập trình viên website thường tự viết API riêng cho dự án của mình. Chủ yếu để thao tác với Database được xây dựng sẵn từ sản phẩm trước đây, nhằm phục vụ cho những tính năng tương đồng ở các dự án khác trong tương lai (Ví dụ Api để lấy thông tin toàn bộ bài viết theo ngày). Nó còn gọi là tái sử dụng những tài nguyên mà công ty đã xây dựng sẵn hoặc sử dụng API từ các nhà cung cấp như Microsoft hay Google, điển hình và phổ biến nhất có thể kể đến là Google Maps API hoặc Facebook Api…

Ưu và nhược điểm của Web API

Mỗi một ứng dụng bất kỳ đều có những ưu nhược điểm riêng, hỗ trợ tốt cho các ứng dụng. Vì vậy mà web API cũng không ngoại lệ:

1. Ưu điểm

  • Web API được sử dụng hầu hết trên các ứng dụng desktop, ứng dụng mobile và ứng dụng website.
  • Linh hoạt với các định dạng dữ liệu khi trả về client: Json, XML hay định dạng khác.
  • Nhanh chóng xây dựng HTTP service: URI, request/response headers, caching, versioning, content formats và có thể host trong ứng dụng hoặc trên IIS.
  • Mã nguồn mở, hỗ trợ chức năng RESTful đầy đủ, sử dụng bởi bất kì client nào hỗ trợ XML, Json.
  • Hỗ trợ đầy đủ các thành phần MVC như: routing, controller, action result, filter, model binder, IoC container, dependency injection, unit test.
  • Giao tiếp hai chiều được xác nhận trong các giao dịch, đảm bảo độ tin cậy cao.

2. Nhược điểm

Do web API còn khá mới nên chưa thể đánh giá nhiều về nhược điểm của mô hình nay. Tuy nhiên, có hai nhược điểm dễ dàng nhận thấy:

  • Web API chưa hoàn toàn phải là RESTful service, mới chỉ hỗ trợ mặc định GET, POST
  • Để sử dụng hiệu quả cần có kiến thức chuyên sâu, có kinh nghiệm backend tốt
  • Tốn thời gian và chi phí cho việc phát triển, nâng cấp và vận hành
  • Có thể gặp vấn đề về bảo mật khi hệ thống bị tấn công nếu không giới hạn điều kiện kỹ.

Lời khuyên tiếp theo là bạn nên đọc thêm các bài ở dưới đây để cập nhật toàn bộ kiến thức về API:

Xem thêm tuyển dụng API từ các công ty HOT hấp dẫn trên TopDev

  Call API trong VueJS theo cách thông minh nhất

Agenda khu vực miền Bắc – Vietnam Mobile Day chính thức đổ bộ Hà Nội vào ngày 14/06/2019!

agenda hà nội offline

Không để team Hà Nội chờ đợi quá lâu, Agenda khu vực miền Bắc (dự kiến) được công bố, bạn quan tâm đến topic nào? Vấn đề mà bạn và các chuyên gia của chúng tôi quan tâm có cùng quan điểm hay không? Cùng check qua những topics nào sẽ được trình làng tại Vietnam Mobile Day khu vực Hà Nội bạn nhé:

agenda hà nội offlinevietnam mobile day

Thay vì nóng lòng chờ đợi một mùa Vietnam Mobile Day nữa thì hãy giữ ngay cho mình một slot tham dự cùng bạn bè nào, cùng nhau cập nhật những kiến thức mới bạn nhé! Đăng ký ngay để không bỏ lỡ một trong những sự kiện công nghệ lớn nhất năm với code vé từ TopDev Blog giảm 50.000đ:

THỜI GIAN:
Hồ Chí Minh: 06/06/2019  | Hà Nội: 14/06/2019

THÔNG TIN CHI TIẾT VÀ ĐĂNG KÝ:
Website: https://mobileday.vn/

THÔNG TIN CHI TIẾT
Event team: event@applancer.net | 028 6681 3236
Ms. Thoa | thoa.nguyen@applancer.net | 038 5098 969

Tham khảo thêm: Việc làm mobile, tuyển mobile developer

Tăng tốc website. Bí kíp tối ưu Web Performance

tang-toc-website

Tối ưu web performance luôn là một câu hỏi mà bất kỳ lập trình viên nào cũng quan tâm. Có thể nói, công nghệ Web ngày càng phát triển hơn và cho tới ngày hôm nay, chúng ta đã có hàng triệu website trên thế giới và rất nhiều user đang đợi load những website.

Không còn gì khó chịu hơn khi bạn phải ngồi chờ những page này load lâu hơn thời gian dự tính chỉ vì kết nối internet chậm hoặc vì một nguyên nhân nào đó. Theo nghiên cứu, thời lượng quan tâm của user chỉ kéo dài khoảng 5 giây.

Hãy tưởng tượng nếu bạn phải đợi khoảng 3 phút để website đó load, thì chỉ có nghĩa là performance của nó “lởm”, và lượng user chắc chắn sẽ giảm xuống và đó không phải là điều mà chúng ta mong muốn.

Web Performance là tốc độ mà các trang web được tải xuống và hiển thị trên trình duyệt web của người dùng.

Tại sao Performance lại quan trọng?

Web Performance là chủ đề khá thú vị nếu bạn hỏi mình, mình nghĩ nó là một trong những điều và developer nên chú ý, vì sau cùng, chúng ta cũng chỉ build web để user có thể sử dụng bất kể trở ngại hay thách thức nào.

Ngày nay, nhiều user sử dụng Internet với mạng 2G, 3G, 4G và kết nối LTE, còn chúng ta thì phải cố gắng đưa web đến họ trong cùng một tốc độ. Performance cần thiết và quan trọng đối với user của chúng ta vì những lý do sau:

  • User là ưu tiên hàng đầu và họ là lý do để chúng ta build lên tất cả từ đầu. Nếu không có user lên webpage, mình chắc chắn là chẳng có lý do gì để lập trình web cả. Vì chúng ta đang làm web cho user, nên user phải là vấn đề để ta cân nhắc trong mọi bước phát triển và mục tiêu hàng đầu là họ có thể sử dụng website của chúng ta một cách thuận lợi nhất.
  • Cải thiện tỷ lệ chuyển đổi. Khi website được tối ưu về tốc độ và cách sử dụng, chúng ta sẽ thấy được một lượng traffic duy trì khổng lồ, user sẽ tiếp tục lên web vì họ có trải nghiệm tốt ở lần đầu ghé qua. Nhưng ngược lại, thử nghĩ nếu web của bạn chưa tối ưu Performance, điều gì sẽ xảy ra?

Vậy làm cách nào để đảm bảo được user của mình sẽ vui vẻ lên website của mình và sẽ vui vẻ quay lại vì thích nó và Performance của nó tuyệt vời? Mình sẽ hướng dẫn bạn vài tip và các bước để chúng ta có thể xây dựng web nhanh hơn nhé.

Tăng tốc website

Bỏ bớt HTTP Requests

Có một vài trường hợp, phần lớn thời gian tải web xuất phát từ các HTTP request bên ngoài. Tốc độ tải tài nguyên bên ngoài có thể thay đổi tuỳ theo cơ sở hạ tầng hoặc vị trí máy chủ của nhà cung cấp hosting.

Mục tiêu chung ở đây là đảm bảo rằng chúng ta có thể giảm được các HTTP request bên ngoài, nên chúng ta cần kiểm tra các request này và loại bỏ những tài nguyên không có lợi cho trải nghiệm người dùng như những hình ảnh không cần thiết, code JavaScript và CSS không cần thiết…

Code Splitting và Tree Shaking

Code Splitting và Tree Shaking là 2 kỹ thuật nữa được dùng để cải thiện Performance. Chúng ta phải tách code hay tree shake như thế nào cho đúng? Bạn có thể sử dụng các công cụ như Webpack, Rollup.

Code Splitting là một tính năng cho phép bạn chia code của mình thành nhiều nhóm hoặc thành phần khác nhau, sau đó có thể load theo yêu cầu hoặc load song song, còn Tree Shaking là loại bỏ code không cần thiết hoặc đã chết.

Lazy Loading

Lazy Loading là một mẫu Web Performance làm chậm quá trình load hình ảnh trên trình duyệt cho tới khi nào user cần nhìn hình đó và nó cũng là một cách tuyệt vời để tối ưu Performance. Nó đảm bảo website của bạn không quá cồng kềnh, và user của bạn có thể nhanh chóng download hình mà họ muốn xem.

Xem thêm Lazy Loading là gì.

Defer Scripts

Trì hoãn (defer) một script có nghĩa là chặn nó load đến khi nào mà các phần tử khác đã load hết. Khi bạn defer những file lớn hơn, như Javascript, bạn phải đảm bảo rằng phần còn lại của nội dung của bạn có thể load mà không bị chậm do chờ đợi các file lớn hơn load. Để thực hiện bạn chỉ cần thêm defer trong thẻ script như bên dưới:

  <script defer></script>

Tối ưu hình ảnh

Tối ưu hình ảnh trên web rất quan trọng. Theo HTTP Archive, 61% dung lượng page của website đến từ hình ảnh. Giờ chúng ta không muốn tất cả hình của mình chiếm hết chỗ trống đúng không nào.

CDN

Chúng ta có thể tối ưu đáng kể thời gian load page trên website bằng cách sử dụng Content Delivery Network. Một CDN có thể sử dụng để lưu trữ tài nguyên như hình ảnh và video mà chúng ta thường xuyên load trực tiếp vào webpage.

Khi bạn sử dụng CDN, bạn link nội dung tĩnh trên website của bạn đến một mạng lưới máy chủ mở rộng trên toàn cầu. CDN cho phép người truy cập site của bạn load dữ liệu từ server gần nhất của họ.

Nếu bạn sử dụng CDN, các tệp trên site của bạn sẽ tự động nén để chạy nhanh trên toàn cầu.

  CDN - Chỉ 1 giây làm đổi thay tâm trí khách hàng
  Cấu hình Redis Caching để tăng tốc site WordPress của bạn

Xài Caching

Caching là một kỹ thuật được sử dụng để lưu trữ tạm thời các page của web để giảm băng thông và cải thiện performance. Khi một user ghé qua website của bạn và page đó đã được lưu trữ vào cache.

Một trang được lưu trữ tương tự sẽ hiển thị đến user khi người đó quay lại lần nữa trừ khi nó được đổi kể từ lần lưu trữ cuối cùng. Việc này giúp tiết kiệm thời gian user phải đợi cho page load và làm mọi thứ nhanh hơn.

Prefetch Resources (tìm nạp trước tài nguyên)

Tìm nạp trước tài nguyên có thể cải thiện trải nghiệm dùng web của user và cải thiện đáng kể performance bằng cách tìm nạp các tài nguyên cần thiết và dữ liệu có liên quan trước khi cần đến chúng. Có 3 cách prefetch chính:

  • Link Prefetching: Nếu bạn chắc chắn là user sẽ click vào link riêng để điều hướng đến một vài trang, bạn có thể áp dụng cách prefetch này. Phương pháp này hữu ích cho những user có tương tác ổn định, như là chuyển đến trang shopping cart sau khi đã chọn một hoặc một vài món đồ.
<link rel="prefetch" href="/img/cat.png">
  • DNS Prefetching: Phương pháp này cho phép trình duyệt phân giải trước tên miền thành địa chỉ IP. Điều này giảm độ delay khi người dùng click vào link với DNS đã được prefetch, họ không cần phải đợi quá trình DNS tra cứu như thông thường.
<link rel="dns-prefetch" href="https://www.keycdn.com">
  • Prerendering: Phương pháp này là hiển thị toàn bộ trang hoặc một số yếu tố của nó trước.
<link rel="prerender" href="/second-page.html">

Các công cụ để đo lường tốc độ Web

Biết cách đo lường tốc độ website cũng quan trọng như việc cải thiện tốc độ nếu chúng ta không thoả mãn với tốc độ page hiện tại. Có thể sử dụng các công cụ chuyên dụng có sẵn để kiểm tra tốc độ. Một vài cái mình xin liệt kê bên dưới:

Kết luận

Tối ưu Web Performance có thể cải thiện đáng kể trải nghiệm người dùng trên web của bạn và quan trọng hơn nữa cho phát triển web của bạn khi mà các ứng dụng càng lớn và phức tạp.

Xem thêm việc làm web developer cực kỳ hấp dẫn tại TopDev

  Một số mẹo ít người biết để trang web chạy nhanh hơn gấp đôi!
  Học lập trình web với 13 tài liệu lập trình PHP không thể bỏ qua

26 công cụ và kỹ thuật trong Big Data có thể bạn chưa biết

cong-cu-va-ky-thuat-trong-big-data

Hôm nay mình sẽ giới thiệu đến các bạn một danh sách cực kỳ thú vị về công cụ và kỹ thuật trong Big Data, cũng như tất cả các tool mà Data Scientist và Data Engineer có thể sẽ cần để tạo platform và model.

  Chia sẻ Cuốn sách Khoa học Khám phá - Dữ Liệu Lớn (Big Data)

  Tổng hợp Cheat Sheets cho AI, Neural Networks, Machine Learning, Deep Learning và Big Data

Nhưng trước tiên, hãy tìm hiểu về Big Data, Machine Learning, Trí tuệ nhân tạo và Deep Learning thật sự là gì nhé:

Big Data là gì?

Big Data là một phương thức thu thập một lượng dữ liệu từ một hoặc nhiều nguồn. Từ đó, dùng dữ liệu để phân tích và đưa ra những giải pháp phù hợp nhất đúng với ngữ cảnh. Những tập dữ liệu lớn này có thể bao gồm các dữ liệu có cấu trúc, không có cấu trúc và bán cấu trúc, mỗi tập có thể được khai thác để tìm hiểu insights của khách hàng cũng như người dùng.

Có ba thành tố Big Data thường đặc trưng

  • Khối lượng dữ liệu: doanh nghiệp và tổ chức thu thập dữ liệu từ nhiều nguồn, gồm các giao dịch, social media, các kênh marketing truyền thống cũng như những kênh phổ biến và không phổ biến khác.
  • Nhiều loại dữ liệu đa dạng: Dữ liệu đến từ nhiều nguồn, nhiều dạng, hình ảnh, email, audio, cookies, số điện thoại, địa chỉ, điền form, các giao dịch online, v.v
  • Vận tốc mà dữ liệu cần được xử lý và phân tích để đáp ứng được nhu cầu sử dụng và tương tác với dữ liệu của tổ chức.

Tìm hiểu chi tiết Big Data là gì?

Liên hệ giữa Trí tuệ nhân tạo, Machine Learning và Deep Learning

  • Trí tuệ nhân tạo (AI): Là tên chung của lĩnh vực liên quan đến việc xây dựng các hành vi thông minh cho máy móc.
  • Machine Learning: Là một phần thuộc trí tuệ nhân tạo, sử dụng dữ liệu để tạo ra AI.
  • Deep Learning: 1 phương pháp của Machine Learning tiếp cận một dataset lớn.

công cụ và kỹ thuật trong big data

Xem thêm về Trí tuệ nhân tạo và Machine Learning tại Apple

Với cách hiểu này, chúng ta hãy cùng khám phá danh sách ngày hôm nay nhé:

Các công cụ và kỹ thuật hữu ích trong Big Data

Athena

AWS Athena là một dịch vụ được dùng để truy vấn trực tiếp các file trong S3 bucket bằng cách “dùng tới đâu, trả tới đó.” Sẽ dễ dàng để truy vấn data ở nhiều format khác nhau mà không cần phải sử dụng công cụ ETL để load nó trong database.

Dịch vụ này cũng có thể được sử dụng riêng, tích hợp với AWS Glue như là một Data Catalogue hoặc tích hợp với AWS Lambda như là một phần của cấu trúc lớn hơn.

Batch Processing (Xử lý hàng loạt)

Dự án Big Data phụ thuộc vào khả năng Data Scientist có thể xử lý terabyte hay petabyte của data. Các công cụ như Apache Flink có thể giúp bạn hoàn thành công việc sử dụng các dòng data hoặc xử lý hàng loạt.

Compute

Cần phải có các cơ sở hạ tầng để các Data Scientist xử lý các tập Data lớn. Chúng ta có thể sử dụng tự động hoá để đảm bảo có đủ khả năng xử lý khối lượng data.

Để việc quản lý AWS dễ dàng hơn, mình xin giới thiệu với các bạn công cụ Predictive Auto Scaling, sử dụng Machine Learning để mở rộng quy mô tính toán các tài nguyên hỗ trợ Machine Learning.

Docker

Việc chia sẻ kết quả của các thí nghiệm khoa học dữ liệu chưa bao giờ là dễ dàng cả. Các hệ điều hành và các thư viện R không phải lúc nào cũng tương thích tuỳ thuộc vào người bạn đang chia sẻ. Tính bảo mật cũng là một vấn đề khi chia sẻ các bộ Data và dashboard cuối cùng giữa những người dùng.

Và đó là lý do Docker ra đời. Các Data Engineer có thể cung cấp cho Docker những hình ảnh “đóng băng” hệ điều hành và các thư viện để các sandbox hoặc sản phẩm cuối cùng được chia sẻ an toàn.

Xem thêm Docker là gì?

Nguyên tắc đạo đức

Sử dụng thông tin cá nhân của khách hàng trong việc phân tích cần phải được thực hiện nghiêm túc và phải có nguyên tắc để đảm bảo an toàn. Việc này không chỉ đơn thuần là tuân thủ theo các yêu cầu pháp lý, mà các mô hình không nên có bất cứ loại sai lệch nào, và người tham gia cũng phải biết rõ dữ liệu của họ đang được sử dụng ở đâu.

Fuzzy Logic

Fuzzy Logic được sử dụng để tính khoảng cách giữa 2 string. Nó cũng giống cách sử dụng ký tự đại diện trong SQL và các biểu thức chính quy trong những ngôn ngữ khác.

Trong thế giới của khoa học dữ liệu, chúng ta có thể sử dụng thư viện Fuzzy Wuzzy Python trên các tập dữ liệu lớn.

GPU

Graphics Processing Units (GPUs) được thiết kế để xử lý hình ảnh, vì chúng được tạo thành từ nhiều lõi. Chúng có thể xử lý các lô dữ liệu khổng lồ và thực hiện cùng một nhiệm vụ nhiều lần, và đó cũng là lý do chúng có thể được sử dụng trong Khoa học dữ liệu.

Hadoop

Dự án Hadoop nguồn mở là một tập hợp các tiện ích tách riêng với Lưu trữ và Tính toán để chúng có thể được thu nhỏ hay mở rộng khi cần thiết.

Hadoop Distributed Files System (HDFS) – hệ thống phân phối file Hadoop – chia các file thành các khối logic cho lưu trữ, Spark, MapReduce hoặc công cụ khác có thể tiếp quản để xử lý (mình sẽ nói rõ hơn ở phần sau).

Fun fact: Hadoop là tên của con voi đồ chơi của con trai người tạo ra nó (Hình bên dưới).

Hadoop - công cụ và kỹ thuật trong big data

Nhận diện hình ảnh

Tensorflow là một framework Machine Learning được sử dụng để train các mô hình dùng Neural Networks để nhận dạng hình ảnh.

Neural Networks chia input thành nhiều vector mà có thể dùng để giải thích, phân cụm và phân loại.

Jupyter Notebook

Jupyter Notebook chạy code, thực hiện phân tích thống kê và trình bày dữ liệu trực quan tất cả ở cùng một nơi. Nó hỗ trợ 40 ngôn ngữ và được đặt tên là Jupyter, giống như cách mà những quyển sổ của Galileo ghi lại các mặt trăng của Jupiter.

Kaggle

Nếu bạn đang tìm kiếm công cụ để luyện tập hoặc cần một bộ dữ liệu cho một dự án, thì Kaggle chính là nơi dành cho bạn. Luyện tập với một vài bộ data trên đó là bạn đã có thể tham gia các cuộc thi. Cộng đồng trên đây vô cùng thân thiện và bạn có thể sử dụng các công cụ mà bạn tự chọn.

Kỹ thuật hồi quy tuyến tính

Hồi quy là một trong những kỹ thuật thống kê được sử dụng trong Khoa học dữ liệu để tiên đoán một biến ảnh hưởng đến biến khác như thế nào. Hồi quy tuyến tính có thể sử dụng để phân tích mối quan hệ giữa các hàng xếp hàng trong siêu thị và sự thoả mãn của khách hàng, hay giữa nhiệt độ và giá bán kem.

Nếu bạn nghĩ có một mối quan hệ nào đó giữa 2 thứ nào đó, bạn có thể dùng hồi quy để chứng minh nó.

Xem thêm các thuật toán trong Machine Learning dành cho người mới bắt đầu

MapReduce

MapReduce là một phần tính toán của hệ sinh thái Hadoop. Khi chúng ta lưu trữ data có sử dụng HDFS, chúng ta có thể sử dụng MapReduce để xử lý sau đó. MapReduce xử lý data trong các khối logic, sau đó xử lý chúng song song trước khi tổng hợp các khối trở lại.

Natural Language Processing (NLP)

NLP như là cánh tay phải của AI, có liên quan đến việc làm thế nào máy tính có thể hiểu được ý nghĩa của ngôn ngữ con người nói. Nếu bạn đã từng dùng Suri, Cortana hay Grammarly, bạn đã gặp NLP rồi đấy.

Xem thêm về kỹ thuật NLP điều khiển các thiết bị IoT

Overfitting

Cả overfitting lẫn underfitting đều dẫn đến việc tiên đoán kém.

Overfitting – xảy ra khi một model quá phức tạp hoặc quá nhiễu. Model ghi nhớ và khái quát hoá tất cả dữ liệu đang train và không thể làm cho khớp giữa các tệp dữ liệu với nhau được.

Underfitting – xảy ra khi một model quá đơn giản và không có đủ thông số để nắm bắt xu hướng.

Pattern Recognition (Nhận dạng Pattern)

Nhận dạng Pattern được dùng để phát hiện sự tương đồng hoặc bất thường trong các tập dữ liệu. Ứng dụng thực tế của nó là trong nhận diện dấu vân tay, phân tích hoạt động địa chấn và nhận diện giọng nói.

Định lượng và định tính

Nếu bạn từng là kỹ sư và  bước vào lĩnh vực Khoa học dữ liệu, có thể bạn sẽ cần kiểm tra lại số liệu thống kế của mình đấy. Tìm hiểu thêm về các kỹ năng cần thiết để chuyển vai trong cuộc phỏng vấn hấp dẫn này với Julia Silge của Stack Overflow.

Real Time

Apache Kafka là một hệ thống chính/phụ cho phép stream data từ log, hoạt động web và hệ thống giám sát.

Kafka được ứng dụng để:

  • Tạo các đường stream data real-time đáng tin cậy giữa các hệ thống và ứng dụng.
  • Tạo các ứng dụng stream real-time để biến đổi hoặc phản ứng lại các dòng data.

Spark

Apache Spark, giống MapReduce, là một công cụ để xử lý data.

Spark – có thể xử lý bộ nhớ trong nhanh hơn nhiều. Sẽ hữu ích nếu data cần được xử lý lặp đi lặp lại và trong thời gian thực.

MapReduce – Phải đọc và ghi vào đĩa nhưng có thể hạot động với các tập dữ liệu lớn hơn nhiều so với Spark.

Testing

AI có những ứng dụng thực tế trong Marketing với các đề xuất sản phẩm real-time, trong Sales với hệ thống VR giúp người mua hàng đưa ra quyết định và hỗ trợ khách hàng với NLP.

Và một ứng dụng mới phổ biến khác của AI đó là kiểm thử phần mềm. AI có thể được dùng để xếp ưu tiên thứ tự test, tự động hoá và tối ưu hoá các trường hợp và giúp QA bớt tẻ nhạt hơn.

Tìm hiểu thêm Kiểm thử phần mềm là gì

Dữ liệu phi cấu trúc

Dữ liệu có cấu trúc có thể được lưu trữ trong CSDL quan hệ là các cột, hàng và bảng.

Khi trở thành dữ liệu phi cấu trúc gồm hình ảnh, video, text, việc lưu trữ sẽ thay đổi. Data Lakes có thể giúp bạn lưu trữ cả 2 loại mà chỉ với ít chi phí.

Data được lưu trữ ở đây được lấy ra và đọc khi có yêu cầu và cũng tổ chức dựa trên nhu cầu, điều này làm cho nó phổ biến với nhiều Data Scientist, những người thà giữ những điều kỳ quặc thay vì làm sạch và tổng hợp lại.

Khối lượng và vận tốc

Năm 2001 Big Data được định nghĩa bởi 3 chữ V:

  • Volume (Khối lượng)
  • Velocity (Vận tốc)
  • Variety (Sự đa dạng)

Cho đến ngày nay thì có thêm một vài chữ V nữa là:

  • Value (Giá trị)
  • Veracity (Độ chính xác)
  • Variability (Sự thay đổi)
  • Visualisation (Hình dung)

Đã có tranh luận về việc liệu những thứ này có liên quan hay thực sự mô tả Big Data không. Nhưng nếu bạn đang nghiên cứu về ngành này thì chắc chắn chúng sẽ xuất hiện thôi.

Web Scraping

Các trường hợp cần quét web trong các dự án Big Data là:

  • Kéo data từ các trang social media hoặc diễn đàn để phân tích cảm tính
  • Lấy giá và sản phẩm để so sánh
  • Phân tích nội dung site để xếp hạng và so sánh nội dung

Để bắt đầu sử dụng Python, cài đặt Scrapy để trích xuất dữ liệu có cấu trúc từ các trang web.

XML

Định dạng XML và JSON phổ biến trong Big Data vì giúp lưu trữ và vận chuyển dữ liệu. Để sử dụng với Python, hãy tìm hiểu trên ElementTree để phân tích XML và json để phân tích JSON

NumPy

NumPy được sử dụng trong Python để tích hợp với CSDL, thực hiện các tính toán khoa học và thao tác với các mảng.

ZooKeeper

Apache ZooKeeper luôn giữ cho các cluster chạy và available. Nó duy trì mạng bằng cách gửi tin nhắn qua lại và đảm bảo:

  • Tính nhất quán tuần tự. Cập nhật từ khách hàng sẽ được áp dụng theo thứ tự mà chúng được gửi.
  • Tính nguyên tố. Cập nhật thành công hoặc thất bại. Không có kết quả một phần.
  • Hiển thị hình ảnh hệ thống đơn. Một khách hàng sẽ thấy cùng một chế độ xem bất kể máy chủ nào mà nó kết nối.
  • Tính tin cậy. Khi bản cập nhật đã xong, nó sẽ tồn tại cho đến khi khách hàng ghi đè lên lại.
  • Tính kịp thời. Quan điểm của khách hàng về hệ thống được đảm bảo cập nhật trong một thời gian nhất định.

Có thể bạn quan tâm:

Xem thêm việc làm Data Engineer mới nhất trên TopDev

  Thời của Big Data: Càng to thì càng tốt

  Lương IT nghìn USD nếu thành thạo Cloud, Big Data, AI

Top 5 kỹ năng mềm mà các kỹ sư phần mềm cần phải biết

  Rèn giũa mindset của một Data Scientist
  Có một nỗi khổ mang tên "thành viên mới" - Những khó khăn khi mới vào team

Cũng giống như với các kỹ năng về kỹ thuật chuyên môn, kỹ năng mềm cho Software Developer cũng vô cùng quan trọng.

Không ai có thể làm việc một cách đơn độc được. Mọi người đều phải có sự giao tiếp với đồng đội, đồng nghiệp, quản lý,… trong quá trình làm việc. Do đó, kỹ năng giao tiếp giữa mọi người trong team với nhau cũng rất cần thiết.

Kỹ năng mềm bao gồm những kỹ năng như giao tiếp tốt, trung thực, làm việc nhóm, liêm chính, có tổ chức, sự đồng cảm,…

Dưới đây là 5 kỹ năng mềm hàng đầu mà TopDev muốn chia sẻ với các kỹ sư phần mềm.

Khả năng phân tích sắc bén

Từ ngày đầu tiên trong công việc của bạn, chúng ta sẽ phải đối mặt với rất nhiều vấn đề, hết lần này đến lần khác, có thể nói là liên tiếp. Để giải quyết chúng, chúng ta phải sẵn sàng phân tích từng vấn đề một cách khách quan nhất.

Và với khả năng phân tích của bản thân sẽ giúp chúng ta hiểu tất cả các yếu tố thiết yếu của vấn đề, cũng như sẽ giúp chúng ta đưa ra nhiều giải pháp, từ đó có thể chọn lựa ra giải pháp phù hợp nhất để giải quyết các vấn đề đó.

Do đó, khả năng phân tích sắc bén là nền tảng của tất cả các hoạt động giải quyết vấn đề đối với lập trình viên.

Đổi mới và sáng tạo

Trong những lần chúng ta nỗ lực giải quyết các vấn đề, chúng ta sẽ dần dần phát hiện ra kỹ năng mềm này. Có thể xem kỹ năng này là tài sản quý giá nhất của một người nào đó.

Đối với nhiều vấn đề thường gặp trong quá trình làm việc của bạn, chính suy nghĩ thăng tiến sẽ thúc đẩy bạn đưa ra một giải pháp phù hợp. Tuy nhiên, trong một lúc nào đó, chúng ta sẽ gặp phải một vấn đề kỳ lạ mà các giải pháp thông thường sẽ không mang lại cho chúng ta kết quả tốt. Nói chính xác hơn, để giải quyết những vấn đề này, cần thêm tư duy và cách tiếp cận sáng tạo.

Xem thêm cách tư duy như một programmer

Nhiệt tình

Kỹ năng mềm này cần bạn để tâm nhiều đến thái độ của mình. Sự nhiệt tình trong công việc giúp chúng ta duy trì một thái độ tích cực mọi lúc mọi nơi. Đó là một bí mật thành công lớn trong cuộc sống cũng như trong sự nghiệp của bạn sau này.

Hãy nuôi dưỡng sự nhiệt tình của mình!

Làm việc theo nhóm

Mặc dù các nhà phát triển dành phần lớn thời gian của mình để làm việc độc lập, nhưng cộng tác với một nhóm nào đó vẫn rất quan trọng. Hơn nữa, đó luôn được xem là cách tốt nhất để tạo ra một sản phẩm tuyệt vời, và dĩ nhiên chỉ khi làm việc nhóm với nhau hiệu quả thì điều đó mới xảy ra.

Trong trường hợp này, các nhà phát triển nên ghi nhớ và có ý thức về các mục tiêu của nhóm đề ra cũng như cố gắng làm việc để đạt được chúng.

Bên cạnh đó, có nhiều cách để tương tác với nhau mà không cần làm việc trực tiếp nhưng vẫn đạt hiệu quả cao.

Ví dụ: làm việc trực tuyến với Slack, Hangouts, Zoom, Miro,… là những cách tuyệt vời để giữ liên lạc và cập nhật thông tin với nhau trong nhóm mà không cần gặp mặt.

Sẵn sàng phát triển bản thân thông qua các lời phê bình

Chúng ta không muốn bị ai đó chỉ trích, tất cả mọi người đều như vậy. Tuy nhiên, việc bị chỉ trích là điều không thể tránh khỏi đối với tất cả chúng ta, nhưng nhờ nó mà chúng ta có thể phát triển bản thân và làm việc chuyên nghiệp hơn sau này.

Thật đúng là như vậy. Thông qua việc thu thập thông tin phản hồi về bản thân, chúng ta luôn được khuyến khích duy trì sự cởi mở và trung thực trong nhóm, từ đó niềm tin được xây dựng theo thời gian là sự đền đáp xứng đáng cho chúng ta sau này.

Thay vì bảo vệ lợi ích của bạn thân, một nhóm có thể tập trung vào việc cải thiện sự hợp tác giữa các thành viên với nhau, cùng nhau giải quyết các vấn đề, tăng năng suất làm việc và đạt được các mục tiêu chung.

Nói chung, kỹ năng mềm cho Software Developer rất quan trọng, giúp làm việc nhóm hiệu quả hơn cũng như duy trì mối quan hệ với những người khác. Công việc sẽ mất đi ý nghĩa vốn có của nó nếu bạn làm việc mà không tương tác với mọi người xung quanh.

Cảm ơn bạn đã đọc bài viết!

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

Xem thêm việc làm Software Developers hot nhất trên TopDev

TopDev

  Junior developer là gì? Những quy tắc bất biến giành cho Junior developer
  Bài học về kỹ năng giải quyết vấn đề - Hãy tư duy như một Lập trình viên!