Hướng dẫn dùng kru counters trong PHP

Nhờ vào việc sự dụng inline style, chúng ta có thể lập trình và tận dụng gần như tất cả tiềm năng của Javascript. Đặc biệt là các lợi ích từ CSS pre-processor  [variables, mixins, và functions]. Đồng thời, nhiều vấn đề phát sinh từ CSS cũng được giải quyết, như xung đột trong style cũng như namespacing.

Để hiểu thêm về vấn đề của CSS trong JavaScript được giải quyết như thế nào, bạn hãy vào xem React CSS in JS. Còn nếu bạn muốn hiểu thêm về việc cải thiện hiệu năng nhờ vào Aphrodite, bạn có thể đọc tại Inline CSS at Khan Academy: Aphrodite. Ngoài ra, Airbnb’s styleguide cũng là một nguồn khá hữu ích cho những bạn muốn biết về CSS trong Javascript.

Qua bài viết này, tôi sẽ dùng phương thức inline JavaScript style để lập trình nhằm giải quyết một số vấn đề liên quan đến thiết kế cấu trúc mà tôi đã đề cập trong bài viết trước Before you can master design, you must first master the fundamentals.

Một ví dụ điển hình

Hãy bắt đầu với một ví dụ đơn giản: tạo và thiết kế một nút bấm [button]

Thông thường các component và style được để chung vào một file:

import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];
1 và 
import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];
2. Đó là vì cả 2 đều có chung trong một mục đích: tạo tính thẩm mĩ. tuy nhiên trong bài viết này, tôi sẽ chia code thành nhiều phần khác nhau cho dễ “tiêu hóa”

Dưới đây là button component:

...

function Button[props] {
  return [
    
  ];
}

 

Không có gì cao siêu cả – chỉ là một stateless React component, bởi Aphrodite thật sự phát huy được năng lực của mình khi trong property

import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];
3 . Lúc đó function
import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];
4 sẽ chuyển đổi
import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];
5 object vào trong CSS.
import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];
5 vốn được tạo ra nhờ vào function
import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];
7 thuộc Aphrodite. Bạn có thể thấy kết quả từ
import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];
7 nhờ vào Aphrodite playground.    

Dưới đây là stylesheet của nút bấm:

...

const gradient = 'linear-gradient[45deg, #FE6B8B 30%, #FF8E53 90%]';

const styles = StyleSheet.create[{
  button: {
    background: gradient,
    borderRadius: '3px',
    border: 0,
    color: 'white',
    height: '48px',
    textTransform: 'uppercase',
    padding: '0 25px',
    boxShadow: '0 3px 5px 2px rgba[255, 105, 135, .30]',
  },
}];

Một trong những lợi thế của Aphrodite đó là sự chuyển đổi trực tiếp cũng như nó khá dễ học, không quá khó. Các property như

import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];
9 sẽ trở thành 
...
export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};
0 và value sẽ được biến thành string. Pseudo-selectors, media queries, và thông tin về font chữ đều có thể làm được. Ngoài ra, vendor prefixes cũng được tự động thêm vào.

Sau đây là kết quả:

Với ví dụ này, giờ chúng ta hãy suy nghĩ cách dùng Aphrodite để tạo nên một visual design system đơn giản, chỉ tập trung vào 2 yếu cơ bản là: typography và spacing.

Yếu tố cơ bản thứ nhất –  typography

Typography là một trong những ý tố cơ bản nhất của design. Thế nên, điều đầu tiên ta cần làm là xác định typography thông qua hằng số. Và vì không như Sass hoặc Less, hằng số của Aphrodite có thể đặt trong JavaScript hoặc JSON file.

Xác định hằng số của typography

Khi tạo ra hằng số, hãy đặt tên cho các variable theo chức năng của chúng. Thay vì đặt tên cho một font size của bạn là

...
export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};
1, hãy dùng
...
export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};
2 để miêu tả vai trò của nó. tương tự, với độ đậm nhạt của font, thay vì dùng
...
export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};
3, thì hãy ghi là
...
export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};
4 để ám chỉ hiệu ứng của nó.

export const fontSize = {
  // heading
  displayLarge: '32px',
  displayMedium: '26px',
  displaySmall: '20px',
  heading: '18px',
  subheading: '16px',

  // body
  body: '17px',
  caption: '15px',
};

export const fontWeight = {
  bold: 700,
  semibold: 600,
  normal: 400,
  light: 200,
};

export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};

export const lineHeight = {
  // heading
  displayLarge: '48px',
  displayMedium: '48px',
  displaySmall: '24px',
  heading: '24px',
  subheading: '24px',

  // body
  body: '24px',
  caption: '24px',
};

 

Rất là quan trọng trong việc xác định được chính xác value cho các variable như kích cỡ chữ hay độ đậm nhạt của nó. Đó là bởi vì nó ảnh hưởng đến tính mĩ thuật cũng như vertical rhythm trong thiết kế. Vertical rhythm là một thuật ngữ ám chỉ việc spacing thích hợp.

Để tìm hiểu thêm về vertical rhythm thì bạn hãy vào đọc bài viết sau: Why is Vertical Rhythm an Important Typography Practice?

Việc chọn độ cao cho dòng chữ cũng như kích thước của front đều có cách thực hiện riêng của nó. Chúng ta có thể sử dụng tỉ lệ trong số học để đưa ra các set cặp kích thước thích hợp và có tiềm năng. Khoảng một tuần trước, tôi đã có một bài viết rất chi tiết về vấn đề trên: Typography can make or break your design: a process for choosing type. Để chọn được front với kích cỡ vừa ý, bạn nên sử dụng Modular Scale. Với việc xác định độ cao cho dòng chữ thì vertical rhythm calculator là một lựa chọn tuyệt vời.

Xác định những thành phần làm nên một Headline

Sau khi đã chọn ra typography mà bạn thích nhất, bước tiếp theo sẽ là tạo nên một component để sử dụng chúng. Mục đích của component này là nhằm giữa sự nhất quán trong thiết kế cũng như cách áp dụng cho heading xuyên suốt codebase.

import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];

 

Có thể thấy, component `Heading` là một stateless function với chức năng chấp nhận tag như là một phần của nó cũng như chuyển đổi tag đó với style tương thích. Điều này thực hiện được là nhờ vào việc chúng ta đã xác định tag mapping từ trước đó.

...
export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};

Ở phần cuối của component file, chúng ta sẽ xác định mục đích của

import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];
5 object. Đây là lúc mà typography phát huy tác dụng của nó.

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  
  ...
}];

Như vậy,

...
export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};
6 component của ta sẽ trông như dưới đây

function Parent[] {
  return [
    Hello World
  ];
}

Với phương pháp trên, ta sẽ hạn chế được sự xuất hiện variability trong hệ thống type. Nhờ đó mà tránh được cái bẫy của hàng trăm kích cỡ chữ khác nhau bởi ta đã tiêu chuẩn hóa heading cho cả data base. Hơn nữa,

...
export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};
6 component cũng có thể áp dụng được vào
...
export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};
8 component dành cho body copy.

Yếu tố cơ bản thứ hai –  Spacing

Khi lựa chọn về spacing giữa các yếu tố, chúng ta có thể dựa vào số học. Nhờ vào

...
export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};
9 , ta có thể tạo ra các set khoảng cách cho spacing đựa vào một điểm chung. Phương pháp trên bảo đảm tính nhất quán và logic trong spacing.

const spacingFactor = 8;
export const spacing = {
  space0: `${spacingFactor / 2}px`,  // 4
  space1: `${spacingFactor}px`,      // 8
  space2: `${spacingFactor * 2}px`,  // 16
  space3: `${spacingFactor * 3}px`,  // 24
  space4: `${spacingFactor * 4}px`,  // 32
  space5: `${spacingFactor * 5}px`,  // 40
  space6: `${spacingFactor * 6}px`,  // 48

  space8: `${spacingFactor * 8}px`,  // 64
  space9: `${spacingFactor * 9}px`,  // 72
  space13: `${spacingFactor * 13}px`, // 104
};

Có thể thấy, ví dụ ở trên đều sử dụng một tỉ lệ chung, từ dòng 1 đến 13. Tuy nhiên, bạn cứ việc mà thử nghiệm với các tỉ lệ khác nhau. Bởi thiết kế luôn đòi hỏi việc sử dụng các kích cỡ khác nhau dựa trên mục đích, người xem, và thiết bị mà họ nhắm tới. Sau đây là một ví dụ với khoảng cách spacing dựa trên tỉ lệ vàng với

...
export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};
9 của 8.

Golden Ratio [1:1.618]
8.0 x [1.618 ^ 0] = 8.000
8.0 x [1.618 ^ 1] = 12.94
8.0 x [1.618 ^ 2] = 20.94
8.0 x [1.618 ^ 3] = 33.89
8.0 x [1.618 ^ 4] = 54.82
8.0 x [1.618 ^ 5] = 88.71

Dưới đây thể hiện spacing scale sẽ như thế nào trong code. Tôi cũng thêm vào helper function nhằm xử lí việc tính toán cũng như làm tròn kết quả.

const spacingFactor = 8;
export const spacing = {
  space0: `${computeGoldenRatio[spacingFactor, 0]}px`,  // 8
  space1: `${computeGoldenRatio[spacingFactor, 1]}px`,  // 13
  space2: `${computeGoldenRatio[spacingFactor, 2]}px`,  // 21
  space3: `${computeGoldenRatio[spacingFactor, 3]}px`,  // 34
  space4: `${computeGoldenRatio[spacingFactor, 4]}px`,  // 55
  space5: `${computeGoldenRatio[spacingFactor, 5]}px`,  // 89
};

function computeGoldenRatio[spacingFactor, exp] {
  return Math.round[spacingFactor * Math.pow[1.618, exp]];
}

Sau khi đã xác định được spacing, chúng ta có thể áp dụng chúng vào thiết kế của mình.

Hãy thử thêm

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  
  ...
}];
1 vào 
import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];
1 component

...

const gradient = 'linear-gradient[45deg, #FE6B8B 30%, #FF8E53 90%]';

const styles = StyleSheet.create[{
  button: {
    background: gradient,
    borderRadius: '3px',
    border: 0,
    color: 'white',
    height: '48px',
    textTransform: 'uppercase',
    padding: '0 25px',
    boxShadow: '0 3px 5px 2px rgba[255, 105, 135, .30]',
  },
}];
0

Có thể thấy rằng nó sẽ luôn hoạt động trong mọi trường hợp. Tuy nhiên, nếu ta muốn thay đổi

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  
  ...
}];
1 property của Button tùy vào vị trí của nó thì phải làm sao?

Một cách để thực hiện là ta chèn lên style cũ một style mới từ component parent. Tuy vậy, nó có thể khá rắc rối thế nên một phương thức khác tối ưu hơn là tạo ra

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  
  ...
}];
4 component để quản lí những thay đổi trong spacing của các yếu tố trong database.

...

const gradient = 'linear-gradient[45deg, #FE6B8B 30%, #FF8E53 90%]';

const styles = StyleSheet.create[{
  button: {
    background: gradient,
    borderRadius: '3px',
    border: 0,
    color: 'white',
    height: '48px',
    textTransform: 'uppercase',
    padding: '0 25px',
    boxShadow: '0 3px 5px 2px rgba[255, 105, 135, .30]',
  },
}];
1

Nhờ đó mà ta không phải lo về tỉ lệ cũng như setting của spacing giữa các component với nhau. Nói cách khác, các component “con” sẽ trở thành các thành phần độc lập và không yêu cầu ta phải biết về vị trí đặt nó ở đầu nhằm tương thính với các yếu tố khác.

Nguyên nhân là do các component như buttons, inputs, và cards luôn cần có sự khác nhau về kích cỡ cũng như spacing. Bởi button trong một bài viết sẽ có kích thước khác với button nằm ở navigation bar. Như vậy, nếu một component luôn cần có sự nhất quán trong các kích thước khác nhau thì là lẽ hiển nhiên khi ta chỉ cần tập trung quản lí chúng thay vì là các component.

Bạn hẳn cũng nhận ra, trong ví dụ trên chỉ sử dụng

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  
  ...
}];
1. Đó là vì nếu ta xác định tất cả margin theo một hướng nhất định sẽ giúp tránh việc bị crash do không tương thích giữa các margin cũng như việc thiết kế được thuận tiện hơn. Bạn có thể tìm hiểu thêm thông qua bài viết của Harry Robert: Single-direction margin declarations.

Thêm nữa, bạn đã có thể sử dụng spacing mà bạn đã xác định trước đó như là padding.

...

const gradient = 'linear-gradient[45deg, #FE6B8B 30%, #FF8E53 90%]';

const styles = StyleSheet.create[{
  button: {
    background: gradient,
    borderRadius: '3px',
    border: 0,
    color: 'white',
    height: '48px',
    textTransform: 'uppercase',
    padding: '0 25px',
    boxShadow: '0 3px 5px 2px rgba[255, 105, 135, .30]',
  },
}];
2

Nhờ đó mà thiết kế của bạn sẽ trở nên nhất quán hơn.

Sau đây là thành quả của chúng ta

Giờ thì bạn đã hiểu thêm về CSS trong Javascript rồi đấy, hãy thử vọc và thí nghiệm đi. Áp dụng inline JavaScript styles vào project tiếp theo của bạn là một ý tưởng không tồi. Tôi tin rằng bạn sẽ cảm thấy khá tuyệt nếu có thể tự mình giải quyết được những vấn đề liên quan về styling và thẩm mĩ.

Nguồn: blog.topdev.vn via Medium

Các coder là ai và họ học code như thế nào?

Hơn 20000 người đã tham gia New Coder 2017, một cuộc khảo sát nhằm giúp các chuyện gia hiểu thêm về cách mà người lớn học về lập trình như thế nào.

Sau đó, Chúng tôi công bố và đăng thông tin về câu trả lời của từng ứng viên cho 50 câu hỏi từ cuộc khảo sát trên public GitHub repository.

Trong tháng tiếp theo, hàng trăm các chuyên gia phân tích thông tin sẽ nghiên cứu về người học lập trình dựa trên những dữ liệu quí giá đó.

Vì thế hiện tại, tôi sẽ phân tích cho các bạn biết rõ hơn về các coder mới này là ai, họ học lập trình thế nào cũng như mục đích để làm gì.

Họ là ai?

Có hơn 20,000 coder tham gia vào cuộc khảo sát. Tất cả đều có kinh nghiệm dưới 5 năm.

Sau đây là những fact cơ bản về họ:

62% số coder sống ở ngoài Mĩ

Tuổi trung bình của các coder là 28

Nữ giới chỉ chiếm 19%

Thời gian học lập trình trung bình của một coder được khoảng 21 tháng

25% số coder đã có từng đi làm về lập trình

Mục tiêu của coder

40% muốn làm freelancer hoặc tự kinh doanh và mở công ty.

Đa phần các coder đều muốn làm về lập trình web, nhưng họ cũng thích nhiều lĩnh vực khác trong lập trình.

Trong số các coder vẫn chưa đi làm, 63% lên kế hoạch đi xin việc trong vòng 12 tháng tới đây.

50% cũng cho biết họ muốn làm trong văn phòng, giảm 7% so với năm ngoái

Phần lớn các coder sẵn sàng đến công ty mới nếu có cơ hội tốt

Cách coder học lập trình

Đa phần câu trả lời là thông qua các khóa học online

Thế nhưng chỉ có một nửa là có tham gia các sự kiện liên quan tới lập trình

Nhưng các coder mới học lập trình rất ít nghe podcast. Tuy vậy, số có nghe thì có lựa chọn rất đa dạng

Cứ 4 coder thì có tới 3 là xem các video về lập trình trên Youtube

Chỉ khoảng 6% các coder mới có tham gia vào các bootcamp về lập trình. Sau đây là các bootcamp mà coder thường chọn nhất.

Đa phần những coder tham gia bootcamp và trả bằng hầu bao của họ, số còn lại thông qua hình thức “mượn tiền”

Số các coder hài lòng về chất lượng của bootcamp cũng như giới thiệu cho bạn bè của họ chiếm tới 82%

Thông tin nhân khẩu [Demographic] và tình hình tài chính của coder

Nữ giới vẫn chiếm thiểu số trong coder

Tuổi trung bình của các coder là 28

Coder tại một số nước thường học về lập trình trễ hơn so với các nước khác

 

Các coder tham gia cuộc khảo sát đến từ 187 đất nước khác nhau

Và đa phần đến từ các thành phố lớn

Có khoảng ¼ coder mang sắc tộc thiểu số

Hơn 46% số coder tham gia cuộc khảo sát nói được hơn 2 thứ tiếng. Trong đó bao gồm tiếng anh và tiếng mẹ đẻ [có khoảng 175].   

54% cho biết họ đã có bằng cử nhân hoặc cao hơn

Các coder còn đi học thì có chuyên ngành khác nhau và đa phần không hề liên quan gì tới IT

Và có ⅔ số coder đang đi làm

Trong đó hơn 1/2 làm liên quan tới lĩnh vực công nghệ

38% coder đang đi làm thường mất ít nhất 1 tiếng cho việc đi lại

Cứ 3 coder thì có tới 2 là bị FA

Thật ngạc nhiên khi có khoảng 8% coder là làm việc trong quân sự

Và có 15% đã có con nhỏ, 6% số khác thì đang nuôi cha mẹ hoặc người thân

44% nghĩ rằng công việc của họ trả quá thấp và không phù hợp với kĩ năng mình

Có tới 23% coder cho biết họ đang mắc nợ chính phủ/ngân hàng tiền học

Trong đó 11% phải thế chấp nhà

15% số coder phải chịu cảnh mạng internet yếu

Và 3% được nhận sự trợ giúp của chính phủ do khuyết tật

Và đó là xuất thân của các coder

Bạn có thể thấy rằng việc có nguồn học trực tuyến và miễn phí là rất quan trọng với các lập trình viên

Hiện tại, chúng tôi đang lọc và kiểm tra thông tin từ hơn 20,000 người tham gia cuộc khảo sát. Sau đó sẽ phân tích nhằm thu thập dữ liệu từ chúng.

Nguồn: blog.topdev.vn via Medium

Vietnam Mobile Day: Bữa đại tiệc tưng bừng cho dân mobile tại TP.HCM

Vào lúc 8h30 sáng 20/05, sự kiện được mong chờ nhất của cộng đồng công nghệ nói chung và cộng đồng Mobile – Vietnam Mobile Day đã chính thức “nổ phát súng” đầu tiên tại Tp.HCM. Chương trình tại Hà Nội và Đà Nẵng sẽ lần lượt diễn ra vào ngày 27/5 và ngày 3/6 sắp tới.

Cơn mưa đầu hè vào đêm 19/05 dường như là 1 tín hiệu đáng mừng cho một ngày hội lớn nhất về lĩnh vực di dộng tại Việt Nam. Hơn 5000 developers, IT leaders, Marketers, designers đã có mặt tại sự kiện để cùng nhau lắng nghe những bài học kinh nghiệm đến từ đại diện của các tập đoàn, công nghệ hàng đầu Việt Nam và thế giới.

“25% kinh tế thế giới sẽ được số hóa vào năm 2020”

Phiên toàn có sự góp mặt của tất cả các chuyên gia hàng đầu trong ngành mobile

Digital Transformation – bước tiến mới đến từ Cách mạng Công nghệ 4.0 trở thành chủ đề đầu tiên khai màn sự kiện. Đại diện từ Microsoft Việt Nam – Huỳnh Bảo Toàn, Technical Envangelist của Microsoft Việt Nam đưa ra những ví dụ điển hình về các mô hình kinh doanh mới ra đời nhờ Digital Transformation như Uber, Airbnb… từ đó xác nhận những điểm ưu việt, lý do tại sao tất cả mọi doanh nghiệp – kể cả các doanh nghiệp không liên quan trực tiếp đến ngành IT nên áp dụng Digital Transformation. Theo anh Bảo Toàn, Digital Transformation phải vận dụng công nghệ thì mới có thể đưa doanh nghiệp lên tầm cao mới, đáp ứng đúng nhu cầu của người dùng vào đúng thời điểm. Đặc biệt Digital Transformation còn giúp doanh nghiệp thay đổi cách bán hàng đón nhận những xu hướng mới, hạn chế sự cạnh tranh, hiểu rõ hơn insights ngành và đẩy mạnh hoạt động kinh doanh.

“25% kinh tế thế giới sẽ được số hóa vào năm 2020” chính là khẳng định chắc chắn về tương lai của Digital Transformation.

Cụ thể, top 10 ngành công nghiệp đã chi tiêu hơn 151 tỷ USD cho các chuyển đổi công nghệ số, trong đó 3 ngành chiếm tỷ trọng cao nhất là Financial [32 tỷ USD], Public sector [20 tỷ USD] và Tehco & Media [19 tỷ USD]. Tính ứng dụng của Digital Transformation trong Healthcare, Education & Research, Sports, Agriculture, Construction, Media, Retail….

Cốt lõi của Digital Transformation, không gì khác hơn chính là Systems of Intelligence gồm 4 yếu tố chính: Engage your customer, Transform your products, Optimize your operations, và Empower your employees. Để khai thác tối đa sức mạnh của Digital Transformation, doanh nghiệp nhất định phải ứng dụng Digital Transformation vào từng yếu tố 1 cách sâu rộng & hiệu quả.

Mobile app đưa thị trường E-commerce Việt Nam tiến lên

Một hoạt động chơi game nhận quà tại booth của Topdev đã thu hút hơn hàng trăm lượt người tham dự, tạo được ấn tượng tốt cho những lập trình viên

Diễn giả Đoàn Duy Khoa – đại diện của Nielsen vẽ lên bức tranh tổng quan thị trường E-commerce Việt Nam qua những con số “biết nói”, cho thấy tín hiệu khả quan của ngành:

2016 đánh dấu bước chuyển rõ rệt trong niềm tin, sự lạc quan của người tiêu dùng, đạt chỉ số 112 [quý 4/2016], vượt lên trên các nền kinh tế tiên tiến trong khu vực như Thái Lan, Úc, Trung Quốc…

  • Năm 2015, quy mô E-commerce Việt Nam là 1,71 và 1,1% thuộc ngành bán lẻ
  • Tổng chi tiêu cho ngành E-commerce là 4 tỷ USD, tốc độ phát triển 37% với 160 USD chi tiêu trung bình/user

Vai trò của Mobile trong sự phát triển của E-commerce tại Việt Nam thể hiện rất rõ qua những con số sau:

  • 95% người dùng Việt sử dụng Mobile, 78% trong số đó sử dụng smartphones
  • Thời gian người Việt dành online 25 giờ/ tuần, vượt qua Hongkong, Malaysia, Ấn Độ…

Ba hoạt động mà người dùng sử dụng Mobile khi mua sắm mobile chính là thông tin, review – comment và thanh toán. Tuy nhiên, chỉ có 1/3 người dùng Việt – chiếm 86% khảo sát an tâm với các hoạt động thanh toán này. Mức độ bảo mật là 1 trong 3 yếu tố cần cân nhắc khi mua sắm online, bên cạnh 2 yếu tố là: giá cả [85%] và sự tiện lợi [85%]. Trong đó, tỷ lệ sử dụng Mobile Banking ở mức 13% ở 2 thành phố lớn HCM & Hà Nội – tuy là con số chưa nổi bật với các nước khác nhưng lại bước nhảy vọt so với mức 8% trong 1 năm trước.

Anh Đoàn Duy Khoa đặc biệt nhấn mạnh thành phần User mới ra đời từ sự phát triển của Digital: Connected Spenders, những người vừa sở hữu khả năng truy cập Internet & sẵn sàng mua sắm. Tại Việt Nam, số lượng Connected Spenders là 23 triệu, tổng chi tiêu là 50 tỷ USD/năm, chiếm 38% chi tiêu của toàn bộ các thành phần người dùng.

Kết thúc phần chia sẻ, anh Duy Khoa rút ra 4 bài học mà các doanh nghiệp E-commerce cần lưu ý thực hiện xoay quanh Mobile app:

  • Xây dựng chiến lược Digital
  • Hiểu rõ hành vi mua sắm online của khách hàng
  • Xác định điểm khác biệt
  • Xây dựng niềm tin về mức độ bảo mật

Sau Phiên Khai Mạc, hàng chục topic khác cũng sẽ được mở ra tại các khán phòng khác nhau cùng hàng chục diễn giả nổi tiếng đồng thời chia sẻ xuyên suốt sự kiện, hứa hẹn 1 ngày hội Vietnam Mobile Day  tưng bừng, đáng nhớ với nhiều giá trị tích cực cho cộng đồng tham dự. Chương trình sẽ tiếp tục diễn ra tại Hà Nội vào ngày 27/5 và Đà Nẵng vào ngày 3/6 hứa hẹn nhiều bất ngờ cho khán giả.

Techtalk trực tiếp tại Vietnam Mobile Day 2017

Tim Cook – người lãnh đạo kín tiếng của Apple

CEO Apple Tim Cook nổi tiếng bởi năng lực lãnh đạo và kỹ năng làm việc xuất sắc. Mới đây, vị CEO tài năng này có phát ngôn khá sốc về nguồn gốc của iPhone.

Sau khi Steve Jobs từ chức CEO của Apple, Tim Cook đã được lựa chọn làm Giám đốc điều hành mới. Dưới sự lèo lái của CEO Apple Tim Cook, doanh thu của tập đoàn ngày càng tăng cao. Cuộc đời và sự nghiệp của ông được công chúng quan tâm và luôn dõi theo “nhất cử nhất động”.

Bức tranh 350 năm tuổi và phát ngôn gây sốc

Là một nhân vật nổi tiếng thế giới, những câu chuyện về Tim Cook luôn trở thành chủ đề “nóng”. Trong một bài nói chuyện tại Startup Fest ở Amsterdam, Tim Cook đã chia sẻ một câu chuyện khá lạ. Cụ thể, CEO Apple tâm sự ông gặp ám ảnh kỳ quặc khi nhìn vào bức tranh vẽ năm 1670. Trong bức tranh đó, ông nhìn thấy một người đàn ông đang cuộn tròn lá thư để đưa cho người phụ nữ ngồi gần cửa. Tuy nhiên, đối với Tim Cook, ông cho đó là một chiếc iPhone.

Khi xem bức tranh 350 tuổi này, Tim Cook nhìn thấy iPhone.

Khi được hỏi về nguồn gốc của iPhone, CEO Apple Tim Cook cho hay ông không chắc Steve Jobs sáng tạo ra iPhone mà có thể sản phẩm này được lấy cảm hứng đâu đó. Bởi lẽ, ông thường nhìn thấy iPhone khi xem bức tranh 350 tuổi do Pieter de Hooch vẽ năm 1670 và đang được treo ở một bảo tàng ở Amsterdam.

Trải nghiệm kỳ lạ của Tim Cook xảy ra với nhiều người khác. Họ cũng bị ám ảnh bởi một hình mẫu bất kỳ khi nhìn vào một bức tranh.

Năng lực làm việc xuất sắc

CEO Apple Tim Cook gây ấn tượng với công chúng bởi khả năng làm việc xuất sắc, là một người thông minh và tài năng. Sinh ngày 1/11/1960 tại Robertsdale, Alabama, Alabama, Mỹ, ông tốt nghiệp ngành kỹ thuật công nghệ tại ĐH Auburn năm 1982.

Trước khi làm việc cho Apple, Tim Cook có 12 năm làm việc cho IBM. Trong lúc làm việc tại tập đoàn công nghệ máy tính đa quốc gia này, ông đã lấy được bằng MBA của ĐH Duke bằng cách tham gia các lớp học ban đêm.

Đến năm 1994, Tim Cook rời IBM và đến làm việc cho công ty điện tử Intelligent Electronics và trở thành Giám đốc điều hành hoạt động [COO] tại bộ phận bán hàng. Sự nghiệp của ông tiếp tục nối dài những thành công khi ông rời Intelligent Electronics để gia nhập Compaq và trở thành Phó Chủ tịch mảng khách hàng doanh nghiệp vào năm 1997.

Sau 6 tháng làm việc ở Compaq, Steve Jobs đã mời Tim Cook về làm việc cho Apple sau khi nhận thấy tài năng và năng lực lãnh đạo của ông. Vào năm 2011, Steve Jobs đã từ chức CEO của Apple sau 14 năm lèo lái đưa Apple phát triển. Khi ấy, đích thân Steve Jobs chọn Tim Cook làm CEO mới. Quyết định của Steve Jobs đã đúng khi chỉ trong vòng 5 năm đảm nhiệm cượng vị CEO của Apple, Tim Cook đã giúp Apple tăng gấp đôi doanh thu. Đây là một thành quả vô cùng ấn tượng mà không phải CEO nào cũng làm được.

Bài học lãnh đạo

Là một nhà lãnh đạo xuất sắc, Tim Cook đã ghi dấu ấn cá nhân bằng một loạt thành tựu đáng nể trong sự nghiệp. Phong cách lãnh đạo của ông đã được nhiều thế hệ dõi theo và học hỏi. Một trong những bài học lãnh đạo của ông là không sửa chữa những gì không bị hỏng.

Kể từ khi đảm nhiệm chức vụ CEO, Tim Cook vẫn dẫn dắt Apple theo đúng hướng ban đầu với những sản phẩm mới đầy đột phá. Ông chỉ sữa chữa những gì thực sự cần phải chỉnh sửa. Những gì đang hoạt động tốt không bao giờ ông động tay vào chỉnh sửa để thay đổi chúng. Vị CEO này hiểu được Apple hoạt động không vì bản thân ông mà còn vì khách hàng, sản phẩm và nhân viên.

Để trở thành một nhà lãnh đạo tài năng, Tim Cook đã cho mọi người thấy đặc điểm cần thiết của một CEO là sự điềm tĩnh và có niềm tin vào bản thân. Khi cổ phiếu công ty rớt giá, ông không hề hoảng sợ. Để giải quyết vấn đề này, ông đã thực hiện chương trình mua lại cổ phiếu lớn nhất trong lịch sử, và chia nhỏ cổ phiếu theo tỉ lệ 7:1. Đặc biệt, trong tuần ra mắt iPhone 6, Apple Watch và Apple Pay, Apple đã đạt được thành công lớn. Điều này cho thấy sự bình tĩnh và niềm tin của ông đối với công việc.

Không muốn bị so sánh là giống ai đó, Tim Cook luôn nỗ lực trở thành một nhà lãnh đạo khác biệt, đi theo con đường riêng. Ông luôn cố gắng hoàn thiện bản thân để trở thành người thuyền trưởng giỏi nhất đối với Apple.

Tim Cook trái ngược với nhiều CEO lo ngại mạo hiểm nên không theo đuổi những chiến lược có nhiều rủi ro. Ông không ngại theo đuổi những chiến lược có độ rủi ro cao nhưng bằng tài năng, trí thông minh, ông đã chứng tỏ bản thân là nhà lãnh đạo tài năng, sẵn sàng đương đầu với những rủi ro.

Sống tiết kiệm, kín đáo

Mặc dù là CEO Apple sở hữu khối tài sản lớn nhưng Tim Cook sống khá tiết kiệm. Ông từng mua một căn nhà ở Palo Alto với giá 1,9 triệu USD vào năm 2010. Đây được coi là một căn nhà khá khiêm tốn so với địa vị của ông. Bởi lẽ, vào thời điểm đó, tài sản của Cook ước tính vào khoảng 100 triệu USD.

Trước đó, ông từng sống trong căn hộ cho thuê nhiều năm mà không có điều hòa, thậm chí còn mua đồ lót ở cửa hàng giảm giá.

Tim Cook không thích những kỳ nghỉ xa hoa, du thuyền, máy bay xa xỉ. Thay vào đó, ông thích đi nghỉ theo cách riêng như đi bộ đường dài trong công viên quốc gia Yosemite. Là một người kín đáo, ông cũng hiếm khi chia sẻ chuyện cá nhân.

Một điều thú vị về CEO Apple Tim Cook là ông có thói quen gọi cho mẹ hàng tuần ngay cả khi ra nước ngoài công tác. Qua đó có thể thấy vị CEO này là người tình cảm, rất quan tâm đến gia đình.

Đối với nhân viên, Tim Cook tránh mọi mối quan hệ cá nhân với họ. Ví dụ như ông thường xuyên sử dụng trung tâm thể hình tại khuôn viên của công ty một mình. Tuy nhiên, ông thường ăn trưa với nhân viên tại căng-tin công ty để gần gũi, cởi mở, chia sẻ cũng như tìm hiểu tâm tư nguyện vọng của họ để có những chính sách hợp lý.

Nguồn: BrandsVietnam via Tâm Anh via Kiến thức

YOU ONLY CODE ONCE – Kẻ thức thời mới là trang tuấn kiệt

Chưa bao giờ có thời điểm nào tốt hơn để theo duổi nghề phát triển web như hiện nay. Số lượng việc làm của các lập trình viên web tăng 20% trong giai đoạn 10 năm từ 2012-2022, nhanh hơn tỉ lệ trung bình của tất cả các ngành nghề khác.

  1. Front End [HTML/CSS/Javascript]

Những tháng cuối năm 2016 chứng kiến sự bùng nỗ về nhu cầu Front End Developer. Đây là kết quả của việc chuyển dịch sang ứng dụng Web ngày càng nhiều cũng như yêu cầu UX của người dùng ứng dụng web ngày càng tăng. Năm 2017, hàng loạt framework mới ra đời, đưa Front-end lên ngôi kèm theo nhu cầu tuyển dụng với mức lương khủng.

Điểm qua những phúc lợi dặc biệt dành vị trí tuyển dụng Front-end với mức lương lên đến $2000

[All Levels] Front-end Web Developer – FABA technology tuyển dụng

Senior FrontEnd Developer [ReactJS] – DaouKiwoom tuyển dụng

[HCM] Front-End Developer – Skedulo tuyển dụng IT

  1. Back-end

Back-end vẫn giữ vững phong độ và chưa hề có dấu hiệu hạ nhiệt, đặc biệt khi hai trong ba tổ hợp 3-tech được Back-End Developer sử dụng là Java và Javascript  luôn chia sẻ nhau ở hai vị trí quán quân và á quân trong bảng xếp hạng các ngôn ngữ lập trình phổ biến trong nhiều năm qua, đặc biệt Javascript đang chiếm giữ vị thế độc tôn ở thời điểm hiện tại, kể cả trong một vài năm tới.

Cùng TopDev ngắm qua một vài cơ hội không thể chối từ dành cho các Back-end Developer

  • [HCM, HN] BACK-END JAVA DEVELOPER – VN Pay tuyển dụng IT
  • 10 Back-end Developers [PHP, English] – BMG BrickMate tuyển dụng
  • Back-end Developer [Java, C#, Python] – Ngân hàng MSB tuyển dụng
  1. Full stack

Với lập trình viên Full-stack – những người “đau đầu” nhất team vì phải “quay cuồng” với cả công nghệ front-end và back-end, cánh cửa không bao giờ khép lại với những “người đa năng”.

Còn ngần ngại gì mà không apply ngay các việc làm full stack cực chất cho developer tại TopDev nhỉ?

  • [All Levels] Full-stack Developer [.NET] – ISB Vietnam tuyển dụng
  • Mid/ Senior Fullstack Web Developer – YOPAZ tuyển dụng IT
  • [All levels] Full-stack Developer – Urgent – Au Viet Soft tuyển dụng

Trước giờ khai mạc tại Tp.HCM, Vietnam Mobile Day cập nhật Agenda mới nhất!

Chỉ còn chưa đầy 18 tiếng nữa, sự kiện được mong chờ nhất của cộng đồng Mobile – Vietnam Mobile Day sẽ chính thức “nổ phát súng” đầu tiên tại Tp.HCM.

Trước thời khắc nóng bỏng này, BTC Topdev cũng đã cập nhật chính xác những nội dung & diễn giả góp mặt tại Ngày hội, với hy vọng đóng góp những giá trị thiết thực về chuyên môn, bài học kinh nghiệm lẫn các mối quan hệ hợp tác lâu bền, vững mạnh.

Truy cập //topdev.vn/vmd/partners để xem Agenda tại Tp.HCM

  • Thời gian & địa điểm:
    – 20/05/2017 tại Trung tâm hội nghị 272, Võ Thị Sáu, Q.3, Hồ Chí Minh
    – 27/05/2017 tại Trung tâm hội nghị và tiệc cưới Forevermark, 614 Lạc Long Quân, Quận Tây Hồ, Hà Nội
    – 03/06/2017 tại One Opera Danang hotel, 115 Nguyễn Văn Linh, Q. Hải Châu, Đà Nẵng
  • Website thông tin chi tiết: //mobileday.vn/
  • Mọi chi tiết thắc mắc xin liên hệ
    ngoc.do@applancer.net [Ms. Ngọc] | 0944 685 243
    event@applancer.net [Event Team] | 08 6273 3497

YOCO và 3 điều “khắc cốt ghi tâm” viết nên đam mê của một Mobile Developer!

YOCO = “YOU ONLY CODE ONCE”

Đam mê của một Mobile Developer chắc hẳn sẽ chẳng bao giờ có một trang bút giấy nào có thể viết hết được. Nhưng chúng ta có thể nói các lập trình viên này họ luôn sẵn sàng sống và cháy hết mình với những dòng code, hay nói rằng họ luôn sẵn sàng trong tư thế “YOCO”.

“Yoco” = “You only code once”, nghĩa đơn giản để hiểu là “Bạn chỉ code một lần”. Nó sẽ gần giống với câu nói quen thuộc của giới trẻ “Yolo”, nhưng với các bạn lập trình thì “Yoco” mới chính là câu nói dành cho họ.

Lập trình không hề đơn giản như mọi người vẫn nghĩ, và riêng về lập trình Mobile lại càng không. Để có thể viết lên một đam mê của người lập trình, họ sẽ trải qua rất nhiều thứ, và “Yoco” sẽ giúp họ làm được điều đó. Khi cháy hết mình, khi chiến code hết lực như thể họ chỉ có một lần để code trong đời, đam mê sẽ giúp họ vượt qua mọi khó khăn và đi tới thành tựu nhất định.

Và sau đây là 3 điều “khắc cốt ghi tâm” để viết lên đam mê của lập trình viên Mobile, những điều giúp họ biết bản thân phải cháy hết mình với nghề như thể you only code once.

  1. Chấp nhận khó khăn

Bạn có sẵn sàng làm thêm giờ? Các lập trình viên đa phần họ phải chịu nhiều áp lực về thời gian và khối lượng công việc. Và có thể nói rằng thời gian với họ hầu như chưa bao giờ là đủ.

Để kiên trì theo đuổi đam mê nghề lập trình Mobile, chắc chắn rằng bạn phải đối diện với những áp lực, khó khăn của nghề. Đôi lúc bạn sẽ cảm thấy chán nản, mọi thứ rối ren chẳng đâu vào đâu. Công việc code cũng không hề đơn giản, đòi hỏi bạn phải có đầu óc tư duy và kỹ năng tập trung cao. Chính những lúc bạn căng thẳng bởi các dòng code khó nhằn, bạn sẽ dễ stress và đau đầu.

Quay lại các dự án lập trình về Mobile + backend, có rất nhiều ý kiến chê trích đầu tiên sẽ nghiêng về ứng dụng di động: “Tại sao lượt down về thấp?”, “Giao diện gì mà khó dùng đến thế?”, “Kết nối không ổn, điều gì đang xảy ra với chúng?”…và sẽ có hàng ti tỉ câu hỏi đánh giá bật lên tương tự.

Nhưng vì một khi bạn đã đam mê lập trình Mobile, hẳn rằng những điều này bạn đã quá quen thuộc, và vì yêu chúng bạn sẵn sàng chấp nhận mọi khó khăn ấy.

  1. Biết thế mạnh của mình và nỗ lực cạnh tranh không ngừng

Nếu bạn là lập trình viên mobile, chắc hẳn cũng biết quy trình duyệt app chặt chẽ của Apple và Google, dĩ nhiên bạn phải tuân thủ điều đó. Trên các chợ app mobile, tỷ lệ cạnh tranh là rất cao. Nói về các ứng dụng giải trí, giữa muôn màu rừng ứng dụng mới không ngừng cạnh tranh, để có thể giữ chân người dùng chẳng phải là điều dễ dàng gì.

Có thể nói lập trình di động “dễ thở” hơn lập trình web ở vài phần, nhưng ngôn ngữ lập trình Mobile đa phần kiểm soát rất nghiêm chặt, phải biên dịch ra file để chạy dòng mã nhị phân. Chắc chắn rằng, một khi bạn gõ cẩu thả, sai logic nó sẽ dẫn đến ứng dụng bị đổ vỡ hoặc nó không vận hành được.

Đôi lúc các lập trình Mobile cần phải có ý tưởng đặc sắc, năng khiếu đồ họa…để có thể nghĩ ra các app giải trí mới lạ, độc đáo, tuy nhiên nó không phải là điều ép buộc. Chỉ cần bạn biết thế mạnh của mình là gì, luôn sẵn sàng đương đầu cạnh tranh và không ngừng nỗ lực thì chắc chắn đam mê sẽ hình thành trong bạn một sức sống mãnh liệt nhất để có thể “ngẩng cao đầu mà chiến đấu”.

  1. Có mục tiêu và biết nắm bắt cơ hội

Hiện tại, số lượng đào tạo lập trình Mobile mỗi năm không hề ít, và có rất nhiều doanh nghiệp mỗi năm luôn tìm kiếm các nhân tài lập trình tại đây. Và cơ hội nghề nghiệp cho các lập trình Mobile luôn rộng mở cho mỗi người. Nhưng cơ hội cũng sẽ chẳng đến với ai quá nhiều nếu như chẳng bao giờ biết nắm bắt.

Đam mê sẽ trở thành một chìa khóa để mở ra những cánh cửa nghề nghiệp huy hoàng, và các lập trình Mobile phải luôn trong tư thế chủ động nắm bắt các cơ hội ấy. Đam mê sẽ không còn nếu như bạn mải mê code chẳng có mục đích gì cả. Chỉ khi bạn nhìn thấy được mục đích của mình, nhìn thấy được đâu là cơ hội và biết nắm bắt lấy, thì đam mê mới chính là động lực cho bạn tiến đến và ngày càng không ngừng phấn đấu.

Để có thể nuôi dưỡng đam mê, bạn nhất định không được bỏ qua bất kỳ một cơ hội nghề nghiệp nào nếu thấy khả năng bản thân mình có thể.

Dưới đây là top các cơ hội việc làm hot nhất cho lập trình viên Mobile mà bạn không thể nào bỏ lỡ:

Việc làm IT tại Hà Nội:

  • 2D Artist – NO POWER-UP tuyển dụng
  • Back-end Developer – TKG Platform tuyển dụng
  • Back-end Developer [Javascript, TypeScript] – Corner tuyển dụng
  • iOS Developer [ LƯƠNG CẠNH TRANH] – Công ty Cổ phần Giáo dục Educa Corporation
  • BACK-END JAVA DEVELOPER – VN Pay tuyển dụng

Việc làm IT tại Hồ Chí Minh:

[HCM] iOS Developer | Salary From $800 To $1200

[HCM] Senior Android Developer [Android/Unity3D] | Salary up to $1,500

Hãy “Yoco” hết mình, mọi niềm đam mê sẽ làm nên thành công!

10 hiểu lầm tai hại về lập trình

Bạn biết đấy, có khá nhiều quan niệm sai lệch cũng như hiểu nhầm về lập trình. Cho rằng đó là nghề chỉ dành cho những thiên tài, với quá trình phức tạp, phương pháp cao siêu cũng như là đầy ánh hào quang. Tệ hơn, Nghề lập trình bị đánh giá là chỉ dành cho những “mọt sách”, hoặc là các thánh toán học bởi nó không cho phép ta được mắc sai lầm nào.

Trong bài viết này, tôi sẽ giải thích, phân tích và xóa bỏ đi những hiểu lầm về nghề lập trình, cũng như giúp các bạn đang muốn trở thành một lập trình viên thêm tự tin.

Phải là thánh về toán học thì mới có thể học lập trình được

Phần lớn mọi người hiểu nhầm mối quan hệ giữa toán học và lập trình bởi họ chỉ muốn câu trả lời đơn giản là “Có” hoặc “Không”. Thực tế thì câu trả lời là “Tùy, nhưng đa phần là không”. Bởi phần lớn thời gian lập trình đều dành cho việc viết code, chứ không phải các công thức toán học, và kiến thức toán của bạn cũng chỉ chiếm một phần nhỏ trong lập trình.

Đừng hiểu nhầm, đúng là ta vẫn sẽ phải cần đến những kiến thức cơ bản về đại số. Nhưng chỉ có vậy thôi. Ngoài ra còn có libraries và plugin, mà bạn có thể áp dụng vào code để giải quyết những vấn đề liên quan tới thuật toán.

Thế nhưng, nếu bạn muốn tạo ra các ứng dụng cao cấp thì đúng là bạn cũng sẽ cần am tường chút về toán cao cấp cũng như physic và đồ họa máy tính. [Đừng lo, có nguồn sẵn hết rồi nên bạn cũng không phải chịu cực khổ lắm đâu.]

Chỉ có thiên tài với IQ trên 160 thì mới học được

Cho dù bạn có IQ 160 hay 90, lập trình hoàn toàn trả liên quan gì đến việc bạn thông mình cỡ nào mà liệu bạn có thích nó hay không. Bài test IQ hoàn toàn không phản ánh được gì về sở thích cũng như bạn có thể tiến được bao xa trong cuộc sống.

Tôi thì dù không phải là một thành viên của MENSA nhưng ít ra thì đã có đến 4 năm kinh nghiệm lập trình, và tôi có thể làm nó một cách dễ dàng bởi vì tôi không ngại khó và học hỏi từ những sai lầm của mình. Vốn cũng chính là điều quan trọng nhất để học lập trình.

Giờ thì nâng lên một ngưỡng nữa, bất cứ ai có thể giao tiếp thì đều học được lập trình. Bởi lập trình cũng chỉ là một loại “ngôn ngữ” với ngữ pháp và từ vựng của chính nó. Và sự tồn tại của nó là giúp bạn giao tiếp được với máy móc nhằm thực hiện một hành động nhất định nào đó. Như vậy thì nó cũng chả khác gì mấy cách ta giao tiếp hàng ngày đúng không.

Muốn biết về lập trình thì phải đi học đại học

Nhiều ý kiến cho rằng bạn chỉ có thể max trình code của mình do có thầy giỏi. Cũng như đỉnh cao của học vấn chính là bằng đại học, chức vị tiến sĩ, giáo sư. Thế nhưng, nhờ vào internet, giờ đây bạn đã có thể học lập trình cùng với những dev trong nghề mà không cần phải dính dáng tới bất kì trường đại học nào cả.

Hãy thử học một khóa dành cho beginner tại các trang web như Codeacademy, hoặc đọc những bài hướng dẫn từ site như Nettuts+ với nội dung vô cùng hữu ích cùng tính năng video rất tiện lợi. Còn nếu bạn đang gặp vấn đề và muốn câu trả lời rõ ràng hơn? Stack Overflow Stackexchange sẽ là 2 nơi cứu giúp cho bạn. Ngoài ra Google sẽ giúp bạn kiếm được thứ mà bạn cần [Có hàng ngàn nguồn tư liệu quí giá hoàn toàn miễn phí đang chờ đợi bạn trên internet].

Xin đừng hiểu nhầm là tôi chê việc học đại học không giúp ích gì cho bạn. Một giáo viên hoặc giáo sư sẽ chắc chắn giúp quá trình học của bạn nhanh hơn hẳn cũng như hiểu rõ hơn về lí thuyết của các định nghĩa trong IT như Object Oriented Programming, ngoài ra còn một số lợi ích khác nữa.

Dù bạn chọn theo cách nào đi nữa, bạn sẽ phải bỏ công tự học bởi khác với những ngành khác, lập trình luôn thay đổi và phát triển với tốc độ rất nhanh, mà chỉ có bản thân bạn mới biết được rằng mình có trụ được ở trong cuộc chơi được hay không.

Ngôn ngữ lập trình chỉ dành cho người lớn

Các vị phụ huynh, xin đừng lấy độ tuổi con mình làm thước đo để quyết định khi nào chúng được học về ngôn ngữ lập trình. Tại Code.org, hiện đang có kiến nghị muốn thêm môn lập trình vào chương trình dạy học nhằm giúp trẻ em có khả năng phân tích.

Dù sao đi nữa, cách học giữa trẻ con và người lớn là rất khác nhau. Cách tốt nhất để giúp trẻ con tiếp thu nhanh là thông qua hình ảnh. Vì thế, Scratch Alice là hai trang web học lập trình rất phù hợp với trẻ.

Và nếu chúng muốn một môi trường tương tác hơn thì những cộng đồng code như Khan Academy là lựa chọn khá tuyệt vời. Ngoài ra, các bậc phụ huynh cũng nên giúp con mình trong việc học, hướng dẫn, đưa ra các tip và mánh khóe cũng như là khuyến khích và hỗ trợ cho con mình.

Đã học lập trình thì chỉ cần giỏi ngôn ngữ tốt nhất là đủ

Ngôn ngữ lập trình “tốt nhất” ? Sẽ rất nhiều hiểu nhầm câu hỏi đó bởi ngôn ngữ chỉ tốt nhất khi nó phù hợp với mục đích hiện tại của bạn. Nói cách khác, không có ngôn ngữ lập trình nào là tốt nhất cả, bởi nó hoàn toàn tùy vào việc bạn muốn làm gì.

Có rất nhiều ngôn ngữ lập trình khá hay dành cho beginner như: Python với sự đơn giản, dễ đọc mà rất linh hoạt; Java cũng khá dễ hiểu và nổi tiếng nhờ vào lượng tài liệu phong phú cũng như một cộng đồng đúng chất die-hard; hoặc là giống như tôi, bạn chọn C#. Dù thế nào đi nữa, nó hoàn toàn tùy vào bạn trong việc lựa chọn dựa trên những lợi ích như tốc độ xử lý, tính năng đặc biệt, khả năng tương thích, tính quản lí và bảo trì, etc.

Chỉ mất có vài tuần là bạn sẽ giỏi một ngôn ngữ lập trình

Đừng tin vào dòng trên. Sẽ là một điều đáng buồn nếu các bạn trẻ đầy nhiệt huyết đâm đầu vào học ngày đêm một ngôn ngữ lập trình trong thời gian ngắn rồi nhận ra  việc làm ra một game MMORPG trong vài tuần là chuyện bất khả thi. Như vậy, những bạn đó sẽ bị shock và tự cho rằng bản thân mình thật bất tài và vứt bỏ giấc mơ lập trình game.

Thật ra, bạn có thể chỉ cần vài tuần để học được một ngôn ngữ lập trình nhưng sẽ mất vài năm để thành thạo nó. Cũng như vẽ tranh, lập trình đòi hỏi sự đam mê và kiên nhẫn, bởi ban đầu những thứ bạn tạo ra thật sự không có giá trị gì mấy. Tuy nhiên, nếu bạn vẫn quyết tâm, thì hãy tiến từng bước một. Để một nhà lập trình giỏi, bạn đừng ngại thất bại, bởi chỉ có học từ những sai lầm mà ta mới có thể phát triển được.

Phải thuộc hết tất cả cú pháp và nên tự lực gánh sinh tránh nhờ vả

Tâm lý nhiều người cho rằng nếu bạn tự học mà không cần nhờ vào bất cứ sự giúp đỡ bên ngoài, thì bạn sẽ nhớ được hết mọi thứ và trở thành một pro có thể lập trình ra mọi thứ. Nhưng thực tế lại rất khác, Bạn không cần phải nhớ cú pháp, bởi ta sẽ phải viết đi viết lại những dòng code giống nhau hàng ngàn lần trước khi có thể tự tạo một framework cho riêng mình.

Google, IDE và Frameworks không phải được tạo ra cho vui – mục đích của chúng là để giúp bạn học lập trình nhanh hơn. Cách sử dụng chúng tốt nhất là dùng IDE với cú pháp thích hợp và hỏi thánh Google khi bạn gặp phải vấn đề không thể giải quyết được.

Làm quen với những framework khác nhau giúp bạn hiểu rõ thêm ngôn ngữ lập trình cũng như giới hạn của chúng đến đâu. Và khi bạn đã có đủ vốn liếng kinh nghiệm thì hãy tự khám phá, thử nghiệm và làm điều mà mình thích.

Làm sao mà viết được cả đống code dày đặc đó

Khi mới vào học lập trình, tôi đã sợ khiếp khi nhìn vào source của một trang web với hơn 4000 dòng code. Phải nói là choáng luôn. Tuy nhiên, mặc dù HTML không phải là một ngôn ngữ lập trình, nội dung của nó lại phản ánh tất cả các thông tin chứa trong code file. Và nếu bạn chú ý thì sẽ thấy những dòng code trên trang web đó thực chất lại bao gồm các báo cáo lặp, method và loop.

Chỉ có vậy thôi. Phần lớn những gì các lập trình viên dùng đều là những thứ mà bạn học trong các khóa dành cho beginner và trung cấp để giải quyết vấn đề bất kể nhỏ hay lớn. Và sau khi đã quen rồi thì bạn sẽ thấy rằng có 10,000 dòng code đi nữa cũng chỉ là trò trẻ con. Mà viết code còn dễ gây nghiện nữa.

Code không dành cho nữ

Trước khi các bạn nữ nổi giận tôi xin nói ngay rằng bản thân tôi là một fan cuồng của các nữ coder. Không chỉ thế, những bạn nữ trong lớp tôi luôn đứng đầu về môn toán, vật lý và hóa. Thật ra, có rất nhiều nữ lập trình viên được góp mặt trong những list vinh danh sự đóng góp và ảnh hưởng của họ. Sau đây là một trong những nữ lập trình viên tài năng mà bạn hẳn đã từng nghe qua:

Ada Lovelace – Lập trình viên đầu tiên của thế giới

Grace Murray Hopper – Phát triển nên compiler đầu tiên cho ngôn ngữ lập trình.

Adele Goldstine – Đóng góp cho việc tạo ra máy tính điện tử đầu tiên trên thế giới

Jean E. Sammet – tạo ra ngôn ngữ lập trình FORMAC, một phiên bản khác của FORTRAN.

Marissa Mayer – là một trong những lập trình viên nòng cốt của Google từ lúc nó mới khai sinh ra.

Sự ảnh hưởng của các nữ lập trình viên đối với ngành IT là rất rõ ràng. Thế nhưng cũng như ngành dầu thơm, tỉ lệ giữa nam và nữ lập trình viên có sự chênh lệch rất lớn do những lí do đến từ sức ép xã hội và kinh tế cũng như sự khác biệt về cách nhìn nhận và quan điểm của mỗi người.

Khi nào giỏi lập trình thì hãy nghĩ tới việc kiếm tiền

Bạn hãy thử vào các site tuyển dụng cho ngành IT đi, các công ty luôn có nhu cầu tuyển các lập trình viên với nhiều năm kinh nghiệm. Nhưng thực tế thì không phũ đến vậy. Bạn luôn tìm được công việc phù hợp với lượng kinh nghiệm mà bạn có.

Nếu như xin việc không được thì bạn có thể xin làm thực tập viên để kiếm thêm kinh nghiệm, và có cơ hội được vào làm chính thức. Ngoài ra, CV của bạn sẽ nên ấn tượng hơn. Danh tiếng rất là quan trọng, hãy thử tham gia vào một open source project ngay từ hôm nay.

Freelance cũng là một nơi rất tốt cho những bạn nào muốn bắt đầu kiếm tiền bằng nghề lập trình bởi những vị khách hàng cũng dễ tính hơn [nhưng hãy cẩn thận với những kẻ này]. Dù là thế nào đi nữa thì luôn có thứ để nói tới, và mọi người đều có vạch xuất phát khác nhau nhưng điều quan trọng là bạn phải làm một điều gì đó.

Dù thế nào đi nữa, lập trình cũng như những ngành khác, sự chăm chỉ và quyết tâm luôn sẽ được đền đáp. Vì thế sau khi bạn đã hiểu rõ nhưng hiểu lầm về lập trình, hãy bắt đầu bài học đầu tiên về lập trình ngay trong ngày hôm nay.

Nguồn: topdev via hongkiat

 

5 ngôn ngữ lập trình mới bạn cần phải biết trong năm 2022

Lập trình viên hiện là một trong những ngành Hot nhất hiện nay. Cho dù là bạn chỉ mới chập chững lập trình hay là đã là một programmer chuyên nghiệp, bạn vẫn luôn tự hỏi mình rằng: Nên học tiếp cái gì đây?

Với sự phát triển và thay đổi vượt bật của ngành web, bạn sẽ luôn thấy rằng có rất nhiều thứ mới mẻ mà bạn cần phải học. Nhưng câu hỏi đặt ra là bạn sẽ học ngôn ngữ lập trình mới nào đây?

Sở thích, kiến thức bản thân, mục tiêu sự nghiệp là những thứ bạn nên cân nhắc để đưa ra lựa chọn cho ngôn ngữ mình muốn học. Ngoài ra bạn cũng nên xem thêm về bảng xếp hạng các ngôn ngữ hàng đầu được giới công nghệ ưa thích với những lựa chọn không thể nào sai được với Java hoặc Python. Nhưng nếu bạn muốn thử một thứ khác lạ, để đáp ứng cho một lĩnh vực đặc biệt mà lại có nhu cầu cao. Bài viết sẽ giới thiệu 5 ngôn ngữ lập trình mới trong năm nay, đáng để bạn học.

Groovy

Groovy là một loại ngôn ngữ lập trình tập trung về object-scripting, được tạo ra bởi Apache dành cho platform Java. Dự án vốn được bắt đầu từ 2003 nhưng mãi đến 2007 thì phiên bản ổn định đầu tiên [Groovy 1.0] mới được chính thức tung ra. Kể từ đó, Groovy đã được nhiều ông lớn công nghệ sử dụng như Netflix, Linkedin, Airbus, and Mastercard.

Groovy được đánh giá là được viết ra cho Java bytecode, vì thế mà nó hoạt động rất hiệu quả với bất cứ Java library nào. Nếu bạn đã lập trình được bằng Java hoặc bất cứ ngôn ngữ nào sử dụng cú pháp curly-bracket thì bạn sẽ học được Groovy khá dễ dàng.

Nếu bạn muốn tìm hiểu thêm về những lợi ích của Groovy so với Java hãy vào xem cuộc thảo này trên Quora về những điểm mạnh của Groovy, cũng như JavaRevisited blog với bài viết phân tích 10 điểm khác nhau giữa Groovy và Java. Ngoài ra, trang chính của Groovy cũng có một bài tóm tắt về sự khác biệt của nó.

Do Groovy là một nguồn mở, bạn có thể tìm mã gốc tại Github, hoặc bạn đóng góp công sức vào project đó luôn nếu bạn muốn.

Mặc dù Groovy được đánh giá cao bởi nó giúp developer làm việc tốt hơn, nhưng nó còn cho phép ta dùng Grails Web Application Framework.

Nói cách khác, Grails cho phép ta tạo ra các ứng dụng web với Groovy. Bao gồm các tính năng khá thú vị như integrated ORM / NoSQL support, pluggability, powerful view technology, etc.

Rust

Rust được xếp hạng nhất trong hạng mục “The Most Loved” từ cuộc khảo sát về developer của Stack Overflow’s 2016, bởi tiềm năng của nó. Rust là một ngôn ngữ về hệ thống lập trình của Mozilla. Rust Không dùng để tạo ra các ứng dụng cho end-use mà là cho các hardware. Vì thế mà nó nằm chung nhóm với những ngôn ngữ lập trình như C hoặc C++ [Chứ không phải là JavaScript, Python, Perl, etc.].

Mozilla tuyên bồ rằng mục đích của Rusttận dụng tối đa sức mạnh của multi-core processor. Rust tập trung vào việc tối ưu hóa performancememory safety, nó ngăn chặn sự xuất hiện của lỗi phân mảng cũng như rất dễ học nhờ vào cú pháp đơn giản. Danh sách các ông lớn sử dụng Rust cũng khá là ấn tượng với Dropbox, Telenor Digital, Coursera, và SmartThings.

Rust là một open-source, vì thế mà bạn có thể kiếm mã gốc của nó trên Github. Nếu bạn có hứng thú và muốn học nó thì có thể bắt đầu với The Book, được viết bởi chính nhóm tạo ra Rust. Ngoài ra bạn có thể download Rust compiler từ chính trang web của Rust, ngoài ra bạn cũng có thể tìm thấy khá nhiều thông tin hữu ích trên đó.

Ở video dưới đây, các developer của Mozilla đang nói về nguyên nhân vì sao họ hi vọng Rust sẽ giúp web app trở thành một đối thủ với các ứng dụng truyền thống trong tương lai, cũng như việc nó giải quyết những hạn chế của C++.

Elixir

Elixir là ngôn ngữ lập trình chuyên về functional programming, cho phép developer tạo ra các ứng dụng có liên quan tới realtime distrubuted. Được khai sinh vào 2011 bởi một core Ruby contributor với mục đích giải quyết vấn đề của Ruby liên quan tới việc viết các đoạn code concurrent. Elixir được tạo ra nhằm cải thiện hiệu năng của các ứng dụng Rails chạy trên nhiều CPUs [vào đây để biết thêm chi tiết]

Elixir là một lựa chọn tuyệt vời cho lập trình các ứng dụng dành cho network và những hệ thống phản hồi cao cấp như phần mềm cho ngân hàng, và cho data processing. Elixir chạy trên Erlang Virtual Machine [BEAM]  và được compiled cho Erlang bytecode. Vì vậy mà Elixir developer có toàn quyền truy cập vào Erlang’s ecosystem.

Nếu bạn vẫn chưa biết gì về functional programming, thì bắt đầu với Elixir ngay sẽ trở nên khó khăn hơn, nhưng nó có thể giúp bạn có một cách nhìn hoàn toàn mới về lập trình. Nói cách khác, functional programming thực ra rất khác biệt so với object-oriented programming bởi nó không hề dùng tới objects và classes mà lại sử dụng operations trong functions và modules.

Nếu bạn muốn có thêm thông tin và cảm hứng trước khi nhập cuộc thì hãy đọc qua bài viết của Spreedly Engineering về You’re Smart Enough for Elixir, nó thật sự sẽ giúp bạn cảm thấy tự tin lên rất nhiều. Ngoài ra official Elixir website cũng có khá nhiều nguồn hữu ích, hướng dẫn chi tiết để bạn có thể học Elixir nhanh nhất có thể. Elixir cũng có mặt trên diễn đàn Github nên bạn có thể kiếm mã nguồn của nó để xem những vấn đề cũng như các thay đổi cập nhật được đưa ra.

Go

Ngôn ngữ lập trình Go được Google tung ra vào 2009, kể từ đó, hãng cũng dùng nó trong nhiều hệ thống khác nhau. Go là một ngôn ngữ lập trình về số liệu – statically typed, concurrent, compiled với mục đích kiếm soát và giải quyết các vấn đề lập trình mà các công ty lớn đang gặp phải. Vì thế mà tương tự như Java và C++, Go cũng thích hợp với những hệ thống lớn.

Theo kết quả từ cuộc khảo sát về GO 2016, phần lớn các developer đều hài lòng với GO. Lí do được nói đến nhiều nhất là bởi vì Go rất đơn giản, dễ sử dụng, hiệu năng tốt và có tính năng concurrency. Go còn giảm thiểu thời gian cho compile nhờ đó mà việc code-test-build loop diễn ra thuận lợi hơn. Vì thế mà GO được đánh giá là lí tưởng cho Test-Driven Development [TDD].

Nếu bạn muốn biết thêm về những tính năng và lợi ích của GO, hãy đọc để hiểu thêm vì sao mà GO lại được nhiều người yêu thích. Go có một lượng người dùng là các công ty công nghệ hàng khủng như Youtube, Bitbucket, Basecamp, BBC, Dropbox, và còn nhiều nữa [List về Go user].

Go trang chủ là một nguồn vô cùng hữu ích, bạn có thể tìm thấy một live demo khá cool để test Go hoạt động như thế nào, và còn nhiều thứ hữu ích khác nữa như documentation, packages, hướng dẫn cài đặt, Go blog. Tất nhiên, Go cũng là open-source, nên bạn có thể tìm được mã nguồn của nó tại Github.

R

Trong những năm gần đây, R càng được nhiều developer biết đến nhờ vào lượng data cực lớn mang tính cách mạng. R có thể xem là phiên bản open-source của proprietary S, được viết ra với sự hợp tác của Ross Ihaka và Robert Gentleman, thuộc đại học Auckland ở New Zealand vào những năm 1990s.

R có thể được dùng cho tính toán thống kê và đồ họa, nó cho phép bạn hoàn thành được những task như data processing, data mining, data analysis, và statistical reporting.

Hiện nay, R đang được rất nhiều công ty săn đón, theo O’Reilly’s 2016 Data Science Salary Survey, các R developer luôn có mức lương rất ấn tượng. Không có gì đáng ngạc nhiên khi R cũng là một trong những ngôn ngữ quan trọng nhất của MOOCs.

Bạn có thể download R từ trang web chính của nó, ngoài ra còn có The R journal, manualsbooks. Còn nếu bạn muốn đọc những bài viết mới hơn thì R-bloggers là một nơi lí tưởng với tính năng cho phép bạn viết ra blog về R của chính mình.

R sử dụng SVN để kiểm soát và quản lí các version và bản cập nhật nhưng bạn có thể vào read-only mirror của mã nguồn tại Github, vốn sễ dễ dàng hơn cho bạn. Nếu bạn tò mò muốn biết thêm các project có sử dụng R thì hãy vào đây theo dõi.

Nguồn: blog.topdev.vn via Hongkiat

 

5 điểm nóng trong ngày khai mạc Vietnam Mobile Day tại Tp.HCM

Chỉ còn ít ngày nữa, Ngày hội Di động Toàn Quốc – Vietnam Mobile Day sẽ chính thức khai mạc tại Tp.HCM [20/05]. Trong những thời khắc cuối cùng này, hãy cùng BTC sự kiện điểm lại 5 tâm điểm nóng tại sự kiện, bạn nhé!

Phiên Khai Mạc – Xác định bức tranh toàn cảnh của ngành

Vietnam Mobile Day tự hào là 1 trong những mùa sự kiện quy tụ đông đảo nhất các “đại gia công nghệ” trong nước và thế giới đang hoạt động trong lĩnh vực IT – Mobile. Mỗi “đại gia công nghệ” ấy lại đóng vai trò như 1 đại sứ vẽ lại 1 khía cạnh trong bức tranh toàn cảnh về xu hướng ngành, cung cấp những số liệu – dự báo hữu ích để hỗ trợ hoạt động kinh doanh/ phát triển của các cá nhân và doanh nghiệp tham dự.

  • Microsoft tập trung vào những chuyển đổi về kĩ thuật số với topic Digital Transformation
  • Nielsen khắc họa cách Mobile thay đổi hình thái thương mại điện tử tại Vietnam với How Mobile is transforming the E-commerce in Vietnam
  • Google hướng đến các doanh nghiệp/ Tech startup bằng chủ đề Building for Billions
  • MasterCard – tập đoàn toàn cầu trong lĩnh vực Thanh Toán cũng đồng hành cùng Vietnam Mobile Day qua topic Hội tụ Công nghệ Số – Digital Convergence.

Đặc biệt, 2 chủ đề đinh khác tại Phiên Khai Mạc được bật mí vào phút cuối hứa hẹn sẽ làm hài lòng những khách tham dự khó tính nhất.

Mang trải nghiệm tại thị trường thế giới về Việt Nam

Sự hiện diện của các diễn giả đến từ Facebook, Microsoft, Youtube, Google… với các topic chuyên sâu, chia sẻ từng công nghệ tân tiến nhất, từng bí kíp cập nhật nhất đang được thế giới áp dụng là điểm nóng khác không thể bỏ qua.

Nếu chủ đề On how app developers can build integrations with Workplace của diễn giả Nakul Patel – Head of Facebook SMBs APAC sẽ cho bạn biết cách xây dựng các integrations với Workplace đang được áp dụng tại Facebook thì chủ đề App re-engagement strategies của diễn giả Phương Nguyễn – Strategic Partner Manager [Online Partnership Group, Google Asia Pacific] sẽ đề cập, phân tích rõ các chiến lược App re-engagement hiệu quả cần được cân nhắc và lựa chọn.

Tham gia đại tiệc Vietnam Mobile Day
Gặp gỡ hàng trăm diễn giả trong lĩnh vực IT, Marketing, Design ngay hôm nay

Ngoài ra, những startup đang muốn tận dụng công cụ Youtube để tạo viral truyền thông, thực hành chiến thuật Growth Hacking có thể tìm kiếm được nhiều kiến thức bổ ích với chủ đề Cách build Youtube viral channel/ viral content cho start up của diễn giả Phan Dũng – Youtube Ambassador, đồng thời là Co-Founder & COO tại BIG CAT và CEO kiêm Co-Founder của Compare.vn.

Đặc biệt, với những ưu điểm về thời gian, chi phí… khi phát triển Cross-platform, topic Introduction to Xamarin – Cross-platform Mobile Development của diễn giả Khương Nguyễn, MVP của Microsoft sẽ cung cấp cái nhìn chi tiết về mặt kĩ thuật dành cho các nhà phát triển đa nền tảng tương lai.

Nhóm chủ đề Trending Technology – AI, IoT, Chatbot lên ngôi

Các ứng dụng của AI, IoT, Chatbot… là những minh chứng sống động nhất, thể hiện Cuộc Cách Mạng Công Nghệ 4.0 đang đến gần hơn bao giờ hết. Chúng ta đã có Cortana, Skype, Tay, Xiaoice của Microsoft], Alexa của Amazon, Bots cho Messenger của Facebook], Siri của Apple, Google Now trên các điện thoại Android của Google, Slack của Slack… Hơn lúc nào hết, đây chính là thời điểm tốt nhất để bạn nghiên cứu công nghệ tương lai này.

Bắt kịp xu hướng, Vietnam Mobile Day đã chọn ra những topic trọng tâm để truyền tải chính xác “nhịp đập nóng hổi” của AI/ Chatbot/ IoT hiện nay tại Việt Nam lẫn thế giới, tiêu biểu có thể kể đến: How to Adapt to Changes in a Tech & Business, Nanny Robot with Microsoft IoT, Machine learning and AI in Mobile applications, Ứng dụng AI và blockchain để tối ưu hóa đầu tư mạo hiểm…

Bí quyết tối ưu hóa công việc lập trình – Món ăn không thể thiếu

Như thường lệ, các bí quyết tối ưu hóa công việc lập trình/ thiết kế dành cho các nhà phát triển ứng dụng là nhân tố không thể thiếu tại Vietnam Mobile Day. Hầu hết các chủ đề trong chuyên mục này hoặc là tập trung vào các giải pháp mới hỗ trợ developer hoặc sẽ làm bật lên những điểm ưu việt ở từng công cụ/ platform để giúp developer đưa ra lựa chọn phù hợp nhất cho dự án của mình.

Các topic hỗ trợ công việc lập trình tiêu biểu như: Xây dựng hệ thống xử lý bất đồng bộ có độ ổn định và hiệu năng cao, Modern DevOps flow to improve developer’s productivity, Tăng tốc lập trình Android với Kotlin…

Các topic nêu bật tính năng của mỗi công cụ/ platform: Crossplatform/Native/Web app, lựa chọn nào cho dự án?, The beauty of React Native, Unidirectional Data Flow Architecture – Kiến trúc Facebook sử dụng để phát triển ứng dụng, Emotional UX, Cân nhắc chi phí và lợi ích của Mobile Test Automation…

Mobile Marketing, Digital Marketing – Trọn vẹn cho đại tiệc Mobile

Nằm trong top 3 nhóm chủ đề được quan tâm nhiều nhất của sự kiện trong 7 năm tổ chức vừa qua, Mobile Marketing nói chung và Digital Marketing nói riếng luôn chiếm thời lượng “lên sóng” đáng nể với chất lượng nội dung ngày càng tăng cao, đáp ứng được nhu cầu của cộng đồng Marketer rộng lớn.

Cùng điểm qua những chủ đề về Mobile Marketing/ Digital Marketing sẽ được đem ra “mổ xẻ”, “chiêu đãi” người tham dự: Triết lý “Zero Cost” marketing cho startup, Killer Feature sẽ làm cho ứng dụng của bạn trở nên khác biệt, Educate khách hàng trước khi làm Marketing, 5 yếu tố ảnh hưởng đến doanh thu quảng cáo của ứng dụng, Làm thế nào để ứng dụng của bạn trở nên đặc biệt?, Cách sử dụng Offer để tăng gấp đôi doanh thu…

Tham gia đại tiệc Vietnam Mobile Day
Gặp gỡ hàng trăm diễn giả trong lĩnh vực IT, Marketing, Design ngay hôm nay

Ngoài 5 điểm nóng đã kể trên, Vietnam Mobile Day năm nay cũng đón chào hàng chục topic khác được các diễn giả kinh nghiệm chia sẻ như: Cách tiếp cận làm Mobile App cho doanh nghiệp của diễn giả Nguyễn Duy Vỹ – Marketing Director của Tugo, Kinh nghiệm tối ưu trải nghiệm người dùng trên Mobile tại thegioididong.com của diễn giả Nguyễn Thanh Tùng [Tùng Jacob] – Product Director của Thế giới Di động, Đi làm startup với các công ty lớn như Google, Facebook của diễn giả Lê Yên Thanh – Backend Developer của Umbala…

Vietnam Mobile Day là một trong những chuỗi sự kiện lớn nhất về Mobile được tổ chức hàng năm với quy mô hơn 120 chủ đề, gần 100 diễn giả cùng khoảng hơn 10,000 lượt tham dự ở 3 miền đất nước.

Với sứ mệnh hỗ trợ và đẩy mạnh thị trường Mobile tại Việt Nam, Vietnam Mobile Day hy vọng sẽ quy tụ và kết nối được rất nhiều công ty, đối tác với nhau, từ đó phát triển thêm nhiều mối quan hệ cần thiết cho những bước tiến mạnh mẽ về sau. Đây chắc chắn sẽ là một Ngày hội không thể bỏ lỡ cho những ai quan tâm đến lĩnh vực công nghệ nói chung và Mobile nói riêng.

  • Thời gian & địa điểm:
    – 20/05/2017 tại Trung tâm hội nghị 272, Võ Thị Sáu, Q.3, Hồ Chí Minh
    – 27/05/2017 tại Trung tâm hội nghị và tiệc cưới Forevermark, 614 Lạc Long Quân, Quận Tây Hồ, Hà Nội
    – 03/06/2017 tại One Opera Danang hotel, 115 Nguyễn Văn Linh, Q. Hải Châu, Đà Nẵng
  • Website thông tin chi tiết: //mobileday.vn
  • Mọi chi tiết thắc mắc xin liên hệ
    ngoc.do@applancer.net [Ms. Ngọc] | 0944 685 243
    event@applancer.net [Event Team] | 08 6273 3497

“Vệ Binh Dải Ngân Hà” của Vietnam Mobile Day là ai?

Vietnam Mobile Day là ngày hội thường niên lớn nhất trong lĩnh vực Ứng dụng Di động, cập nhật những kiến thức mới, chuyên sâu từ các diễn giả được mời về từ những công ty, tập đoàn công nghệ tiên phong trong nước và quốc tế.

Để đáp ứng đầy đủ nhu cầu của người tham dự đa dạng từ Developer, Marketer, Designer đến đại diện các Tech startup, sự kiện năm nay mở rộng đến hơn 120 chủ đề chuyên sâu, hơn 100 diễn giả đến từ nhiều lĩnh vực trong ngành công nghiệp Mobile.

Phái đoàn hùng hậu của Google và Facebook

Có thể nói, 7 “vệ binh” đến từ dải ngân hà Google và Facebook xuất hiện tại Vietnam Mobile Day mang trong mình không chỉ là sứ mệnh lan tỏa tầm nhìn, định hướng của hai ông lớn trên đối với tương lai của nền công nghệ toàn cầu mà còn thể hiện tinh thần kết nối, sẻ chia những kiến thức, kinh nghiệm tại thị trường khu vực và thế giới đến hệ sinh thái Mobile Việt Nam.

Cụ thể, những chủ đề mà diễn giả Google mang đến vừa có tính chiến lược vừa giải quyết các vấn đề thực tiễn trong quá trình phát triển ứng dụng: Làm thế nào để xây dựng các ứng dụng có lợi nhuận tốt? Bí quyết nào để thực hiện App Localization hiệu quả? Hoạch địch App Re-engagement ra sao? Những đặc điểm nào cần chú ý đối với người dùng App tại thị trường Việt Nam?… Tất cả sẽ được giải đáp bởi chính những diễn giả kinh nghiệm đang giữ chức vụ cấp cao của Google tại Vietnam Mobile Day

Các diễn giả Google tại sự kiện:
  • Chị Gaby Hiền – Business Development Manager thuộc Online Partnership Group của Google với chủ đề App Re-engagement Strategies
  • Anh Aimen Khan – Mobile App Consultant của Google Marketing Solutions với chủ đề Building a Profitable App Business with Google
  • Chị Vân Vương – Strategic Partner Manager thuộc Online Partnership Group của Google với chủ đề Going global: Unlocking the secrets of app localization
  • Chị Phương Nguyễn – Strategic Partner Manager thuộc Online Partnership Group của Google Asia Pacific với chủ đề Re-Engagement Strategies for Apps
  • Anh Trường Đỗ – App Dev Account Manager của Google Asia Pacific  với chủ đề Mobile App User Landscape in Vietnam

Trong khi đó, nhóm chủ đề mà các chuyên gia Facebook chia sẻ tại Vietnam Mobile Day lại liên quan đến hoạt động của doanh nghiệp, đi sâu phân tích cách để các App Developer xây dựng Integration trên Workplace – một ứng dụng di động và ứng dụng web được thiết kế nhằm mục đích duy trì kết nối các thành viên trong team. Đặc biệt, nội dung chủ đề chắc chắn sẽ “đánh trúng tim đen” các công ty IT vừa và nhỏ qua phần hướng dẫn sử dụng Workplace hiệu quả tương tự như những gì Facebook đã và đang làm.

Các diễn giả Facebook tại sự kiện:
  • Anh Nakul Patel – Head of Facebook SMBs thuộc khu vực Châu Á – Thái Bình Dương
    với chủ đề Facebook Workplace for developers
  • Anh Georg Zoeller – Partner Engineering Manager của Facebook APAC

Youtube và Microsoft – Không đứng ngoài cuộc chơi lớn

Vietnam Mobile Day năm nay còn đón chào thêm Đại sứ thương hiệu của trang web chia sẻ video lớn nhất thế giới – Youtube là anh Phan Dũng. Từ kinh nghiệm đa dạng trong vai trò Youtube Ambassador và hiện đang giữ song song hai vai trò Co-Founder & COO tại BIG CAT và CEO kiêm Co-Founder của Compare.vn, anh Phan Dũng chắc chắn sẽ làm “nức lòng” cộng đồng startup tham dự sự kiện với chủ đề Cách xây dựng Youtube Viral Channel/ Viral Content cho startup.

Khác với 3 ông lớn Facebook, Google, Youtube, tập đoàn Microsoft vừa trực tiếp “gửi gắm” diễn giả đến chia sẻ vừa âm thầm đứng sau hỗ trợ BTC Vietnam Mobile Day xây dựng hướng nội dung bao quát của chương trình tại 3 miền đất nước. Trong đó, không thể bỏ qua 2 chuyên đề “gây xôn xao” trong thời gian gần đây là Digital Transformation và Introduction to Xamarin – Cross-platform Mobile Development, hứa hẹn sẽ mở ra bức tranh toàn cảnh về những thay đổi “chóng mặt” của kỉ nguyên Digital dành cho Marketer cùng những tiến bộ về mặt kĩ thuật khi lập trình ứng dụng dành cho Developer. Ba gương mặt diễn giả Microsoft cũng là ba chuyên gia đã quen thuộc với cộng đồng: anh Huỳnh Bảo Toàn – Senior Technical Evangelist, anh Francis Nguyễn Tuấn Anh – Giám đốc truyền bá công nghệ và anh Khương Nguyễn – MVP của Microsoft.

Các diễn giả của Youtube & Microsoft tại sự kiện:
  • Anh Phan Dũng – Youtube Ambassador
  • Anh Huỳnh Bảo Toàn – Senior Technical Evangelist của Microsoft
  • Anh Francis Nguyễn Tuấn Anh – Giám đốc truyền bá công nghệ của Microsoft
  • Anh Khương Nguyễn – MVP của Microsoft.

Như vậy, chỉ còn chưa đến 10 ngày này nữa, Ngày hội Di động Toàn quốc – Vietnam Mobile Day sẽ chính thức khởi động tại Tp.HCM [20/05], tiếp đến tại Thủ đô Hà Nội [27/05] và sau đó sẽ dừng chân tại trung tâm đất nước – Tp. Đà Nẵng [03/06].

Với sự bảo trợ tài chính đến từ các đơn vị VECOM, MasterCard, MobileFone, Verisign, Ví Việt, PA Việt Nam, Hiệp Hội Internet Việt Nam, Appota, Sixth Gears Studios cùng hàng chục startup đang hoàn tất những khâu cuối cùng để giới thiệu đến cộng đồng các sản phẩm – dịch vụ của mình, công tá chuẩn bị sự kiện gần như đã hoàn chỉnh. Tất cả góp phần đem đến cho khách tham dự một bữa tiệc công nghệ thịnh soạn nhất trong suốt 7 năm qua, hướng về một sân chơi chung cùng nhau chia sẻ, học hỏi kinh nghiệm và mở rộng vòng tròn kết nối, đưa nền công nghiệp Mobile Việt Nam từng bước phát triển, tiệm cận tầm vóc của thế giới.

Thời gian & địa điểm:
  • 20/05/2017 tại Trung tâm Hội nghị 272, Võ Thị Sáu, Q.3, Hồ Chí Minh
  • 27/05/2017 tại Trung tâm Hội nghị Forevermark, 614 Lạc Long Quân, Q.Tây Hồ, Hà Nội
  • 03/06/2017 tại One Opera Danang Hotel, 115 Nguyễn Văn Linh, Q. Hải Châu, Đà Nẵng

Website thông tin chi tiết: //mobileday.vn

Mọi chi tiết thắc mắc xin liên hệ

  • ngoc.do@applancer.net [Ms. Ngọc] | 0944 685 243
  • event@applancer.net [Event Team] | 08 6273 3497

Tổng hợp về WannaCry cho người không biết gì

WannaCry là virus [gọi vậy cho dễ hiểu và thân quen] mà khi nhiễm sẽ mã hóa toàn bộ các file dữ liệu trên máy và tống tiền nên nó được gọi là Ransomware [mã độc tống tiền]. Tên khoa học của nó là WannaCrypt [chỉ dân security dùng này cho dễ gọi, còn WannaCry là tên  tác giả malware đặt trong code]

Cách lây lan:

1. “Tác giả” con virus này vẫn đang phát tán nó qua phương thức thông thường là nhúng vào các bản crack, nhúng vô các trang web có nhiều người truy cập [trang sex, trang warez …].
Về kỹ thuật thì WannaCry vẫn đang phát tán malware qua các mạng lưới phát tán malware và các exploitkit

2. WannaCry lây lan mạnh vì nó không chỉ phát tán theo cách truyền thống mà nó còn lây lan qua mạng LAN do tận dụng các công cụ khai thác lỗi SMB mà NSA [Cơ quan an ninh quốc gia Hoa Kỳ] phát triển bí mật, nhưng bị nhóm ShadowBroker đánh cắp và tung ra public từ tháng trước. Lúc Shadow Broker tung ra các công cụ này thì các chuyên gia bảo mật đã dự đóan về một cuộc tấn cồng mạng toàn cầu mà  Wanna Cry đang làm.

Nói dễ hiểu là nếu một máy trong mạng LAN bị nhiễm WannaCry thì toàn bộ các máy trong mạng LAN cũng có thể bị nhiễm chung nếu như không được vá lỗi trước đó.

Vì cách lây lan như trên mà việc thực hiện các bước an toàn như tắt SMBv1 và cập nhật cho Windows bản vá lỗi mới nhất KHÔNG HOÀN TOÀN AN TOÀN . Nó chỉ ngăn việc con virus này nhảy từ máy khác cùng mạng LAN qua máy bạn. Không ngăn việc bạn xui xẻo tải trúng nó từ internet.

Hiện nay, WannaCry chỉ lây lan trên Windows và mạng máy tính Windows, hiện vẫn chưa ghi nhận trường hợp nhiễm virut nào xảy ra với Mac và Linux

Cách phòng chống:

1. Update bản vá lỗi mới nhất cho Windows.

2. Disable tính năng SMB bằng cách vô Start, search Windows Features, xong bỏ dấu check chỗ SMB … đi là được.

3. Cập nhật các Antivirus. Hiện Windows Defender, McAfee, Symantec, ESET, Bitdefender … tức mẫy AV nổi tiếng đều đã update WannaCry rồi. Sau khi cập nhật AV thì nhớ bật tính năng bảo vệ Realtime Protection [hoặc tên giống vậy]. Để ngăn việc máy tính bị nhiễm.

4. BACKUP DỮ LIỆU QUAN TRỌNG LÀ CÁCH DUY NHẤT CHỐNG RANSOMWARE.
Nhớ backup thường xuyên. Cá nhân thì mua 1 ổ cứng di động, copy dữ liệu quan trọng ra 1 bản bỏ vô ổ cứng rồi cất đi. Không cắm thường xuyên vô máy, cần mới cắm vô backup hoặc lấy dữ liệu ra.

5. Nên dùng các dịch vụ Cloud Drive như Google Drive, OneDrive, DropBox để thường xuyên sync [đồng bộ] dữ liệu đám mây [Cloud]. Giá của các dịch vụ này tương đối rẻ, Google Drive free 15GB, và bán 100 GB có 45 000VND/1 tháng, hoặc 250 000 VNĐ/1000 GB [1TB]. Hoặc mua Google Enterprise giá có 15$/tháng nhưng Unlimited

Tại sao nên xài dịch vụ Cloud Drive ?

Nêu lỡ bị dính ransomware thì Cloud vẫn mã hóa file trên máy và các tool sync của các dịch vụ này vẫn sync bản dữ liệu bị mã hóa lên máy chủ, NHƯNG các Cloud này có hỗ trợ tính năng File Versions. Tức là 1 file bạn backup trên Cloud thì mấy dịch vụ này sẽ lưu cho bạn 30 bản khác nhau của 30 ngày gần nhất của cái file. Tức là bạn có thể tải về bất kỳ phiên bản cũ nào của cái file đã bị ransomware tấn công

Cách xử lý khi bị nhiễm Ransomware WannaCry:

1. Ngắt ngay lập tức các máy tính bị nhiễm khỏi mạng LAN, tránh để nó lây lan qua các máy khác

2. Trả tiền cho tác giả WannaCry để nó đưa mật mã giải mã file là quyết định của bạn. Hiện chưa có báo cáo nào về việc chúng có đưa mã giải mã hay không .

Hiện chỉ mới có 160 giao dịch trị giá khoảng 300.000$ được gửi tới cái địa chỉ BitCoin tác giả WannaCry cung cấp [2 BitCoin/ giao dịch tương đương 80 triệu VND đồng]

3. Hiện có thông tin là WannaCry có lỗi trong cách thức nó mã hóa dữ liệu, nên các chuyên gia bảo mật đang thử tìm cách khai thác và viết công cụ giải mã. Nên nếu dữ liệu quá quan trọng thì có thể cất ổ cứng đi chờ công cụ được cung cấp.

4. Còn không có gì để mất thì format toàn bộ ổ cứng và cài lại win thì sẽ sạch, nhớ là chỉ FORTMAT TOÀN BỘ Ổ CỨNG thì mới sạch chứ chỉ format ổ C rồi cài lại thì không giải quyết được vấn đề.

Ransomware là vấn nạn 3 năm nay rồi, gây ra thiệt hại hàng tỉ đô. Nhưng chưa bao giờ thế giới chứng kiến một ransomware có tốc độ lay lan nhanh đến như vậy

Đó đơn giản dễ hiểu vậy thôi. BACKUP NGAY ĐI TRƯỚC KHI BỊ RANSOMWARE tấn công!!!

Nguồn: Fb Hong Phuc Nguyen

Tuyệt chiêu giúp các app trò truyện trên React chạy nhanh hơn 45%

Tôi hiện đang làm cho Missive, một team chuyên về xây và quản lí hệ thống email/chat client của React. Nó sử dụng nhiều tầng chứa các cột thông tin để hiển thị cuộc đối thoại. Khi nhấn phím ⬆︎️⬇ thì thanh navigation của app sẽ chuyển qua một cuộc nói chuyện mới. Tuy nhiên, điều đó cần diễn gần như là ngay tức khắc để người dùng không cảm nhận được app bị delay.

Một cuộc nói chuyện có thể chứa đến hàng trăm comment, email, và event. Vì thế để tối ưu hóa hệ thống navigation giữa các cuộc nói chuyện, chúng tôi chuyển đổi nhiều thành phần của cuộc nói chuyện thành một chức năng chính – functional one.

Ví dụ cụ thể là như component

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  
  ...
}];
6 sẽ được chuyển đổi từ:

...

const gradient = 'linear-gradient[45deg, #FE6B8B 30%, #FF8E53 90%]';

const styles = StyleSheet.create[{
  button: {
    background: gradient,
    borderRadius: '3px',
    border: 0,
    color: 'white',
    height: '48px',
    textTransform: 'uppercase',
    padding: '0 25px',
    boxShadow: '0 3px 5px 2px rgba[255, 105, 135, .30]',
  },
}];
3

… thành:

...

const gradient = 'linear-gradient[45deg, #FE6B8B 30%, #FF8E53 90%]';

const styles = StyleSheet.create[{
  button: {
    background: gradient,
    borderRadius: '3px',
    border: 0,
    color: 'white',
    height: '48px',
    textTransform: 'uppercase',
    padding: '0 25px',
    boxShadow: '0 3px 5px 2px rgba[255, 105, 135, .30]',
  },
}];
4

Như bạn thấy đấy, một functional component chính là một tính năng “return element” trong JavaScript. Functional component cũng được gọi là component không có “state”.

Ban đầu, chúng tôi cứ nghĩ rằng sự thay đổi trên sẽ giúp cải thiện hiệu năng cho ứng dụng ngay lập tức bởi khi điều hướng giữa các cuộc nói chuyện trong Missive, React phải unmounts mounts hàng trăm component. Bạn sẽ nghĩ rằng functional component sẽ tránh được quá trình trên cũng như cả kế đó bởi vì nó chỉ là function thế nhưng thật ra điều đó sai hoàn toàn.

There is no “optimized” support for them yet because stateless component is wrapped in a class internally. It's same code path.

— Dan [@dan_abramov] July 19, 2016

Chính bản đã chứng thực điều đó:

Pattern này nhằm khuyến khích việc tạo ra các component đơn giản vốn sẽ chiếm phần lớn những gì tạo nên ứng dụng của bạn. Trong tương lai, chúng tôi sẽ tập trung vào việc tối ưu hóa hiệu năng cho một số component bằng việc giảm đi các thao tác kiểm tra không cần thiết cũng như memory allocation.

Hóa ra, React vẫn phải làm khá nhiều việc cho các functional component, mà vốn chẳng cần đến. Vì thế mà ta bị mất đi đến vài millisecond quí giá.

Vậy liệu ta có thể bỏ qua các bước thủ tục từ React cho các component này? Thay vì gọi là mount, ta hãy gọi nó đúng theo bản chất của nó: các JavaScript function nhạt nhẽo. Nói cách khác, ta chỉ cần thay đổi các JSX tags của

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  
  ...
}];
6 thành brace, và gọi những function đó trực tiếp luôn. Như thế này:

...

const gradient = 'linear-gradient[45deg, #FE6B8B 30%, #FF8E53 90%]';

const styles = StyleSheet.create[{
  button: {
    background: gradient,
    borderRadius: '3px',
    border: 0,
    color: 'white',
    height: '48px',
    textTransform: 'uppercase',
    padding: '0 25px',
    boxShadow: '0 3px 5px 2px rgba[255, 105, 135, .30]',
  },
}];
5

Như vậy chúng ta vừa mới loại bỏ một  

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  
  ...
}];
8call quan trọng, và tất cả events của React component lifecycle. Do đó mà, ta cũng không cần phải đợi React team phải lo về vấn đề tối ưu hóa nội bộ.

Để biết được sự thay đổi có ảnh hưởng thế nào, tôi đã tạo ra benchmark này, kết quả thu được khá kinh ngạc. Từ việc chỉ chuyển đổi một class-based component thành functional component , tốc độ được cải thiện chỉ khoảng 6%. Thế nhưng khi gọi component đó là một function đơn giản thay vì mounting, thì tốc độ lại được cải thiện tới 45%.

Qua đó ta thấy được rằng, Missive đã phải mount/unmount một lượng rất lớn các component nhanh nhất có thể [điều hướng giữa các cuộc conversation]

TL;DR

Khi trực tiếp gọi một functional component là function thay vì mounting nó thì hãy sử dụng `React.createElement`. Bạn có thể làm như sau trong JSX:

 

...

const gradient = 'linear-gradient[45deg, #FE6B8B 30%, #FF8E53 90%]';

const styles = StyleSheet.create[{
  button: {
    background: gradient,
    borderRadius: '3px',
    border: 0,
    color: 'white',
    height: '48px',
    textTransform: 'uppercase',
    padding: '0 25px',
    boxShadow: '0 3px 5px 2px rgba[255, 105, 135, .30]',
  },
}];
4
...

const gradient = 'linear-gradient[45deg, #FE6B8B 30%, #FF8E53 90%]';

const styles = StyleSheet.create[{
  button: {
    background: gradient,
    borderRadius: '3px',
    border: 0,
    color: 'white',
    height: '48px',
    textTransform: 'uppercase',
    padding: '0 25px',
    boxShadow: '0 3px 5px 2px rgba[255, 105, 135, .30]',
  },
}];
7

Thật đơn giản đúng không.

Nguồn: topdev.vn via Medium

Tham khảo các vị trí tuyển dụng React hấp dẫn tại đây

Hiểu thêm về Deep Learning thông qua 12 khóa học online miễn phí

Hằng ngày, chúng ta luôn bắt gặp những đầu báo nói về Deep Learning đang thay đổi cuộc sống như thế nào:

  • Các thuật toán của Deep Learning giúp chuẩn đoán ung thư da chuẩn xác như bác sĩ đầy kinh nghiệm.
  • Amazon Go: Deep Learning và AI đã thay đổi cách thức bán hàng như thế nào.
  • Deep Learning giúp xe tự lái thông minh phát hiện ra người đi bộ khi đang chạy trên đường

Bạn tò mò muốn tìm hiểu về nó? Bạn đang muốn học hỏi nhằm phát triển kĩ năng cũng như sự nghiệp của mình? Tôi đã tìm ra 12 lớp học online [hoàn toàn miễn phí] trải dài từ những điều cơ bản nhất cho tới những nghiên cứu mới nhất.

Trước khi bắt đầu, có lẽ bạn sẽ vẫn thắc mắc rằng “Deep learning là cái quái gì?”

“Deep learning là một subfield của machine learning tập trung vào thuật toán dựa theo cấu trúc và tính năng của bộ não và được gọi là hệ thần kinh nhân tạo” – theo Jason Brownlee trong Machine Learning Mastery

Các khóa học online về Deep learning

1/ Ứng dụng thông minh của Deep learning với TensorFlow

via Kadenze ★★★★★ [14 ratings]

Khóa học bao gồm những bài học cơ bản về deep learning, nó có nghĩa gì, hoạt động như thế nào cũng như cách lập trình để tạo ra các thuật toán về mạng phức tạp sâu, các bộ mã vạch biến thể, các mạng lưới đối ứng sinh sản, và mạng nơron recurrent. Một trong những điểm chính của khóa là tập trung vào cách áp dụng các thuật toán đó để tạo nên những ứng dụng sáng tạo. Khóa có 2 lựa chọn free và trả phí [tùy thuộc vào mức độ bạn muốn học].

Christopher Kelly cho biết “ Tôi đã tốt nghiệp chuyện ngành về computer science…. tôi cũng dành cả đống thời gian học online thế nhưng tôi thật sự rất ấn tượng bởi chất lượng và tính chuyên nghiệp của khóa học này. Rất khuyến khích các bạn muốn biết về deep learning học khóa này”

2/ Neural Networks for Machine Learning

Đại học Toronto via Coursera ★★★★★ [18 ratings]

Học về mạng nơ-ron nhân tạo và cách chúng được sử dụng trong machine learning, như nhận diện vật thể, giọng nói; phân tích cử động con người; phân chia hình ảnh, etc. Khóa học cũng tập trung vào những cơ bản về thuật toán và các trick thực tiễn nhằm khiến chúng hoạt động tốt.  Khóa có 2 lựa chọn free và trả phí [tùy thuộc vào mức độ bạn muốn học].

Một review nổi bật [bởi Bobby Brady]: “Là một trong những khóa học cực hay mà bạn có thể học được từ những người giỏi nhất.Geoffrey Hinton là một trong những nhà nghiên cứu quan nổi tiếng nhất về lĩnh vực trí tuệ nhân tạo và mạng lưới thần kinh những năm 80. Hiện ông đang làm việc cho Google với project là AI/deep learning initiatives”.

3/ Practical Deep Learning For Coders, Part 1

fast.ai ★★★★☆ [3 ratings]

Khóa học kéo dài 7 tuần này dành cho những người đã có ít nhất 1 năm kinh nghiệm với lập trình, kèm với một số kiến thức về toán học cấp 3. Bạn sẽ bắt đầu với bước một – Học cách làm cho một GPU server online phù hợp với deep learning  – cho đến việc tạo ra sự hiện đại, thiết thực của các model cho computer vision, xử lý ngôn ngữ tự nhiên cũng như recommendation systems. Tất cả đều hoàn toàn miễn phí.

Anonymous cho biết: “Đây như là ngọc trong đá vậy. Jeremy Howard đã rất xuất xắc trong việc dẫn dắt người học qua những thứ cơ bản cũng như chỉ ra kết quả của chúng. Tôi đã rất ngạc nhiên khi anh liên tục đưa ra những thông tin được cập nhật không chỉ trong năm mà còn chỉ vừa cách đây vài tuần vào các bài học… Bạn được thực hành dựa trên những số liệu, thông tin có thực. Tôi cực kì khuyến khích các bạn nào chưa có kinh nghiệm mà muốn trở thành chuyên gia trong lĩnh vực này tham gia vào khóa học này”.

4/ 6.S191: Introduction to Deep Learning

Massachusetts Institute of Technology [MIT] ★★★★☆ [1 rating]

Một khóa giởi thiệu về các phương thức của deep learning với những ứng dụng vào machine translation, nhận diện hình ảnh, game, chế tạo hình ảnh và nhiều thứ khác. Là một khóa học có sự hợp tác giữa các labs thuộc TensorFlow. Hoàn toàn miễn phí.

5/ 6.S094: Deep Learning for Self-Driving Cars

Massachusetts Institute of Technology [MIT] ★★★★☆ [1 rating]

Khóa học giới thiệu về các ứng dụng thực tiễn của deep learning dựa trên theme xây dưng một xe ô tô tự chạy. Đây là một lớp học dành cho các beginner và những người hoàn toàn mới đối với machine learning, thế nhưng khóa học cũng rất hưu ích đối những nhà nghiên cứu đang tìm kiếm một phương thức áp dụng deep learning vào các app của họ. Khóa học hoàn toàn miễn phí

6/ Deep Learning

Google via Udacity ★★☆☆☆ [20 ratings]

Trong khóa học này, bạn sẽ được hiểu rõ về động lực của deep learning, và thiết kế một hệ thống trí thông minh nhân tạo với khả năng đọc hiểu các dataset phức tạp và lớn. bạn cũng se được học cách giải quyết các vấn đề vốn từng được cho là khá khó nhai, cũng như là trở nên quí trọng hơn đối với trí tuệ của con người khi bạn giải quyết những vấn đề ấy một cách dễ dàng sử dụng các cách thức của deep learning. Khóa học cũng hoàn toàn free.

7/ Deep Learning for Natural Language Processing

University of Oxford

Là một khóa học tập trung về những công nghệ mới nhất về phân tích cũng như tạo ra lời văn và text sử dụng hệ thống network neural recurrent. Các định nghĩa toán học của các model của machine learning cũng sẽ được giới thiệu cùng với những thuật toán dùng để tối ưu chúng.

Khóa học được tạo ra bởi Phil Blunsom cùng với sự hợp tác từ nhóm nghiên cứu DeepMind Natural Language. Khóa học cũng miễn phí cho các bạn.

8/ CS224n: Natural Language Processing with Deep Learning

Stanford University

Bạn sẽ được học về những công trình nghiên cứu mới nhất về deep learning trong Natural Language Processing. Về phía model, khóa học sẽ tập trung vềCác mô hình vector chữ, các mạng nơ-ron dựa trên window-base, mạng nơ-ron tái phát, các mô hình bộ nhớ dài hạn, mạng nơ-lăng đệ quy, mạng nơ-ron xoắn cũng như model mới đây có liên quan về lưu trữ bộ nhớ. Thông qua các bài học và những bài assignment, học sinh sẽ học được những trick kĩ thuật cần thiết để làm ra một neural network vận hành tốt và giải quyết được các vấn đề trong thực tiễn. Hoàn toàn miễn phí.

9/ Machine Learning

Nando de Freitas/University of British Columbia

Khóa học tập trung về những lĩnh vực nổi bật nhất của deep learning. Dựa trên những thông tin về thần kinh học và thống kê, khóa học giới thiệu về background cơ bản của neural network, Boltzmann machine, mạng thần kinh xoắn và mạng thần kinh tái diễn. Nó cũng chỉ ra sự ảnh hưởng của deep learning về cách chúng ta hiểu về trí thông minh cũng như những đóng góp vào việc tạo ra những cỗ máy với trí thông minh nhân tạo. Khóa học cũng hoàn toàn miễn phí.

10/ Deep Learning Summer School 2015 and 2016

Various organizers [including Yoshua Bengio and Yann LeCun] via Independent

Deep Learning Summer School nhắm tới các sinh viên đã tốt nghiệp và engineer cũng như những nhà nghiên cứu vốn đã có một lượng kiến thức cơ bản về machine learning [cũng như deep learning] nhưng vẫn muốn học thêm về lĩnh vực đó. Mặc dù khóa học không được sắp xếp như một khóa học online truyền thống nhưng bởi vì người tạo ra nó cũng như các thành viên tham gia giảng dạy cho khóa mà nó được đánh giá như một ỏ vàng về deep learning. Tất nhiên cũng miễn phí.

11/ Online Course on Neural Networks

Hugo Larochelle/Université de Sherbrooke

“Chào mừng các bạn đã đến với khóa học online về neural network của tôi! Đây là một khóa học mà tôi dùng nó để dạy trong trường đại học  Université de Sherbrooke. Đây là một khóa học với trình độ ngang đai học, bao gồm tất cả những điều cơ bản về nerual network và những topic nâng cao khác”. Miễn phí!

12/ Learn TensorFlow and deep learning, without a Ph.D.

Google

Một khóa học vỏn vẹn 3 tiếng [bao gồm slide và video] sẽ giới thiệu nhanh cho các developer về những nguyên tắc cơ bản nhất của deep-learning, kèm theo một số kiến thức đến từ TensorFlow. Hoàn toàn free.

Nguồn: topdev.vn via medium

Trả lời 44 câu hỏi phỏng vấn khó nhằn này, bạn sẽ vào được Apple!

Apple là một trong những công ty uy tín hàng đầu thế giới. Vì vậy, không có gì ngạc nhiên khi biết để có 1 công việc ở đó thì không dễ dàng.

Apple hỏi những câu hỏi liên quan đến kỹ thuật, dựa trên kinh nghiệm của ứng viên, và cả những câu hỏi kì quặc.

Nếu bạn đang có dự định ứng tuyển vào vị trí nhân viên bán lẻ tại Apple store, bạn sẽ được hỏi rất nhiều câu hỏi về cách xử lý với khách hàng đang tức giận.

Trang tìm việc Glassdorr đã tổng hợp những câu hỏi hóc búa nhất Apple đã từng hỏi các ứng viên. Một số câu hỏi giải quyết các vấn đề toán học, trong khi  số khác lại vô cùng đơn giản nhưng bạn phải thật sự tật trung, cảnh giác.

1/ Chúng tôi có một cốc cà phê nóng và một cốc sữa lạnh. Phòng có nhiệt độ ở khoảng giữa nhiệt độ của 2 cốc. Khi nào thì chúng tôi nên thêm sữa vào cốc cà phê để có được cốc cà phê sữa ngon nhất và sớm nhất [ lúc lạnh, mát, hay để nguội]

Vị trí : Product Design Engineer

2/ Tòa nhà Empire State Building có trọng lượng bao nhiêu?

Vị trí: Solutions Consultant


3/ Làm cách nào để kiểm tra cây nhị phân nếu nó là hình ảnh phản chiếu của sub-trees trái & phải?

Vị trí : Research scientist

4/ Bạn muốn là siêu anh hùng nào? Tại sao?

Vị trí Retail

5/ Giải thích cho đứa trẻ 5 tuổi về RAM?

Vị trí: Apple Genius

6/ Cánh máy bay hoạt động như thế nào?

Vị trí: Lead Systems Engineer

7/ Vẽ cấu trúc bên trong của 1 chiếc iPhone.

Vị trí: Hardware Test Design Lead

8/ Chỉ ra 5 cách để đo lượng xăng trong xe hơi.

Vị trí Hardware Engineering

9/ Nếu bạn có 2 quả trứng và bạn cần biết độ cao tối đa có thể thả trứng mà không làm vỡ nó thì bạn sẽ làm thế nào? Đâu là giải pháp tối ưu?

Vị trí Sofware Engineering

10/ Làm thế nào để giảm giá thành của chiếc bút này.

Vị trí: Lobal Supply Manager

11/ Mô tả một vấn đề bạn cho là thú vị và tìm lời giải cho nó.

Vị trí: Software Engineer


12/ Giải thích cho một đứa trẻ 8 tuổi về định nghĩa và chức năng của router/modem.

Vị trí: Home Advisor

13/ Mỗi ngày có bao nhiêu đứa trẻ được sinh ra?

Vị trí Global Supply Manager

14/ Bạn có 100 đồng tiền xu xếp trên mặt bàn, 10 mặt ngửa, 90 mặt sấp. Bạn không có cách nào để biết được mặt sấp hoặc ngửa của mỗi đồng xu. Tìm cách để chia số đồng xu trên thành 2 cột sao cho mỗi phần có số đồng xu mặt ngửa bằng nhau.

Vị trí: Sofware Engineering

15/ Làm cách nào để kiểm tra ứng dụng yêu thích của bạn.

Vị trí: Software QA

16/ Có 3 hộp đựng hoa quả, 1 đựng táo, 1 đựng cam và 1 cái còn lại đựng cả táo và cam. Chúng được dán nhãn sai. Bạn không được nhìn vào các hộp và chỉ được lấy ra 1 quả duy nhất từ cả 3 hộp. Hãy dán lại đúng nhãn của từng hộp.

Vị trí: Software QA Engineer

17/ Câu hỏi tình huống: “Bạn gặp một khách hàng đang rất giận dữ, cô ấy yêu cầu tư vấn từ 20 phút trước nhưng không nhận được hồi âm, và cô ta đang làm loạn. Cô ấy tuyên bố sẽ tới Best Buy hoặc Microsoft Store để mua máy tính. Bạn sẽ quyết vấn đề này như thế nào.

Vị trí: Specialist

18/ Một khách hàng gọi cho bạn và than phiền rằng chiếc máy tính cũ của anh ta bây giờ nó không khác gì cục sắt vụn. Bạn sẽ làm gì?

Vị trí: Apple Care At-Home Consultant

19/ Bạn có cho rằng mình là người thông minh?

Vị trí: Build Engineer

20/ Kể về thất bại của bạn và bạn học được điều gì từ nó?

Vị trí: Software Manager

21/ Đã bao giờ bạn bác bỏ ý kiến của sếp chưa? Bạn bác bỏ nó bằng cách nào? Cho ví dụ cụ thể, kết quả cũng như cách khắc phục hậu quả của tình huống đó.

Vị trí: Software Engineering

22/ Bạn đặt một cốc nước lên máy quay đĩa than, sau đó tăng dần tốc độ quay. Hiện tượng nào sẽ xảy ra đầu tiên: cái cốc bị trượt, cái cốc bị lộn nhào, nước bị văng ra ngoài?

Vị trí: Mechanical Engineer


23/ Điều gì trong cuộc sống khiến bạn tự hào?

Vị trí: Software Engineering

24/ Bạn có phải là người sáng tạo? Ý tưởng sáng tạo mà bạn đang nghĩ là gì?

Vị trí: Software Engineering

25/ Kể một kỷ niệm làm bạn xấu hổ

Vị trí: Chuyên gia tư vấn bán lẻ

26/ Sáng tạo ra trải nghiệm người dùng tuyệt vời và giải quyết vấn đề của người dùng, việc nào quan trọng hơn.

Vị trí: Apple At Home Advisor

27/ Tại sao Apple đổi tên từ Apple Computers Incorporated thành Apple Inc?

Vị trí- Specialist

28/ Bạn có vẻ là người khá lạc quan, điều gì khiến bạn thất vọng?

Vị trí: Family Room Specialist

29/ Chứng minh rằng chỉ bằng giọng nói của mình bạn hãy cho khách hàng cảm thấy bạn sẵn sàng giúp đỡ họ.

Vị trí: College Advisor tại nhà

30/ Điều gì khiến bạn có mặt ở đây?

Vị trí: Software Engineer candidate

31/ Chúng tôi có một kiểu app như iTunes, nó down về quá nhiều hình ảnh vô ích, bạn sẽ làm gì để tống khứ những hình ảnh này?

Vị trí: Software Engineer

32/ Bạn có một lọ tiền xu thật và giả lẫn lộn. Tiền thật thì 1 mặt sấp 1 mặt ngửa, còn tiền giả thì 2 mặt sấp hoặc 2 mặt ngửa. Bạn lấy 1 đồng ra và xoay 3 lần. Tính xác suất đồng tiền đó là thật hay giả dựa vào kết quả vừa thu được.

Vị trí: Lead Analyst

33/ Bạn hãy kể về 1 ngày tốt đẹp nhất và 1 ngày tồi tệ nhất của bạn trong 4 năm vừa qua.

Vị trí: Engineering Project Manager

34/ Khi thăm quan Apple Store với tư cách là một khách hàng, điều gì gây ấn tượng cho bạn nhất?

Vị trí: Specialist

35/ Tại sao bạn muốn làm việc ở Apple? Nếu làm việc ở Apple bạn sẽ bỏ lỡ điều gì?

Vị trí: Software Engineering

36/ Bạn kiểm tra máy nướng bánh mỳ như thế nào?

Vị trí Sofware QA

37/ Nếu bạn lên núi một ngày và xuống núi vào ngày hôm sau. Thời gian xuất phát là như nhau. Liệu rằng bạn có thể ở cùng một vị trí trong cùng một thời gian?

Vị trí: Technical Lead

38/ Bạn có phải là kiểu người quan tâm tới các phát minh công nghệ.

Vị trí: Retail specialist

39/ 62-63 = 1 là phép tính sai. hỉ được di chuyển 1 thành phần [chữ số hoặc phép toán], hãy biến nó trở thành phép tính đúng.

Vị trí: Software Development Test Engineer

40/ Món kem yêu thích của bạn?

Vị trí Administrative assistant

41/ Làm thế nào để tạo ra mô hình chuỗi cung ứng hiệu quả.

Vị trí: WW Supply Demand Planner

42/ Kể về lần bạn làm tổn thương bạn mình và cách giải quyết?

Vị trí: Technical specialist

43/ Bạn dự định lên kế hoạch đến Triều Tiên cho đồng nghiệp của mình như thế nào?

Vị trí: Hardware Test Design Lead

44/ Bạn sẽ hỏi tìm thông tin, dữ liệu nào để chuẩn bị ra iPhone ở thị trường mới?

Vị trí: Finance

Viết code có hiệu quả? Lời khuyên từ chuyên gia

Là 1 lập trình viên, có khi nào bạn giật mình nhìn lại quãng đường vừa qua với bao đêm thức trắng cùng những dòng code và tự hỏi “Code tốt liệu có đủ?”, hay “Tôi cần gì hơn để trở thành một lập trình viên xuất sắc?” và gỡ bỏ cái nhãn “code monkey” đang gắn trên trán mình?

Dưới đây là tóm tắt 1 số lời khuyên của  ông Jonathan Blow trong bài thuyết trình ở đại học UC Berkeley. Trong bài thuyết trình, ông mô tả tính thẩm mỹ trong lập trình của mình và làm thế nào để viết code có hiệu quả.

1. Đừng cố gắng tối ưu code từ lúc đầu

Thường thì các bạn sẽ thực hiện tối ưu hóa code của mình từ rất sớm, nhưng đôi khi chúng cũng làm cho mọi việc trở nên phức tạp hơn khi lúc nào bạn cũng phải nghĩ cách tối ưu cho code của mình. Hãy tập trung viết cho code hoạt động đúng trước, sau đó mới bắt đầu tối ưu những đoạn code.

2. Thực hiện tối ưu hóa với những điều đơn giản nhất

Bạn có thể tối ưu tốc độ thực thi hay tối ưu dung lượng ứng dụng nhưng điều quý giá nhất bạn cần tối ưu chính là thời gian của bạn. Hãy tối ưu hóa cho code của bạn dễ đọc, dễ hiểu và nếu như bạn phải dừng lại và tự hỏi “code này chạy như thế nào nhỉ?” hay “Tại sao mấy dòng code này không chạy?” – thì bạn đang lãng phí thời gian của mình đấy.

3. Những gì bạn học chưa chắc đúng

Một số phương pháp bạn được học tại trường nếu bạn sử dụng thì nên cẩn thận. Đa số những phương pháp đó chỉ áp dụng được trong 1 vài trường hợp nhất định. Không phải tất cả những phương pháp đó đều không đúng nhưng chúng thường được nói hơi quá so với thực tế. Và nếu bạn chấp nhận áp dụng những phương pháp đó, kết quả nhiều khi không được như ý muốn mà lại còn làm cho bạn rối thêm. Vì thế hãy cẩn thận.

4. Đơn giản thường là tốt nhất

Kẻ thù lớn nhất của hiệu suất công việc đó chính là ý chí của lập trình viên. Càng có nhiều suy nghĩ trong đầu bạn, bạn sẽ càng làm việc kém hiệu quả. Vì thế, sự phức tạp chính là kẻ thù của bạn. Bất cứ lúc nào có thể, hãy tìm cách đơn giản hóa suy nghĩ của mình. Nếu bạn luôn suy nghĩ đến những điều đơn giản, bạn sẽ tìm ra giải pháp nhanh hơn khi bạn có hàng tấn sự phức tạp ở trong đầu.

Những lập trình viên trẻ thường thích sử dụng những cấu trúc dữ liệu và ngôn ngữ lập trình nâng cao như một cách để thể hiện năng lực của họ. Nghe thì khá ấn tượng đấy, nhưng trừ khi bạn phải đảm bảo rằng nó sẽ làm cho dự án của bạn thành công. Nếu không hãy hạn chế dùng chúng.

Với mỗi class/phương thức bạn đưa vào đoạn code của mình, mức độ phức tạp sẽ tăng lên theo cấp số nhân chứ không phải cấp số cộng bình thường. Đưng đưa mọi thứ vào các hàm của bạn khi nó làm tăng thêm độ phức tạp.

5. Đừng viết những đoạn code chung chung, tổng quát

Những đoạn code chung chung có nhiều lợi ích nhưng thường lãng phí thời gian của bạn vì  nguy cơ tiềm ẩn những bugs và khá khó khăn trong việc khắc phục. Hardcode không phải là một lựa chọn tồi nếu đoạn code của bạn chỉ đơn giản thực hiện một điều gì đó.

Ngoài ra còn có một số chia sẻ được rất nhiều độc giả yêu thích:

Luôn luôn có một vài dự án phụ sẽ giữ cho đầu óc của bạn minh mẫn. Khi mọi thứ trong công việc không làm bạn quá bận rộn hoặc chưa đủ thách thức với bạn, hãy dành nhiều thời gian vào các dự án phụ của bạn vào những lúc sau giờ làm việc hay cuối tuần. Thực hiện các dự án phụ có thể sẽ giúp bạn có thêm những kỹ năng mới trong việc thiết lập công cụ của bạn cũng như thử nghiệm nó với các công nghệ mới.

Cấu trúc lại code của bạn bất cứ khi nào có thể. Một khi bạn đã có một cái gì đó làm việc, bạn có thể nghĩ ra một cách tốt hơn để viết những code tương tự. Hãy dành thời gian để viết lại các code trong một cách có ý nghĩa hơn. Có nhiều khả năng bạn sẽ có thẻ bổ sung thêm tính năng mới cho dự án của bạn.

Có một sự hiểu biết về các công cụ và môi trường phát triển của bạn. Biết các công cụ soạn thảo cũng như hiểu rỏ bàn tay của bạn. Biết tất cả các thư viện có sẵn trong các ngôn ngữ bạn học và biết làm thế nào để sử dụng chúng. Ép buộc mình phải viết một ví dụ với mỗi thư viện. Lưu những ví dụ đó để bạn có thể xem chúng bất cứ khi nào cần thiết. Một khi bạn đã hiểu một số thư viện, bạn có nhiều khả năng sẽ nhanh chóng nhớ ra chúng khi gặp vấn đề, bạn cũng biết làm thế nào để sử dụng chúng.

Đọc code của người khác. Đây là một cách học hỏi tuyệt vời. Nếu bạn gặp phải các thành ngữ, các thư viện, các ví dụ hoặc các kỹ thuật mà dường như xa lạ với bạn, hãy tiếp tục khám phá chúng cho đến khi bạn cảm thấy sẵn sàng để thử chúng trong code của riêng bạn.

Đến với sự kiện Vietnam Mobile Day, bạn sẽ được trực tiếp thực tập những lời khuyên trên: Cách tối ưu hóa công việc lập trình – Hiểu biết hơn về nhiều công cụ, môi trường phát triển phổ biến – Cơ hội nhận ra: Những điều bạn học chưa chắc là đúng – Được đọc code của nhiều chuyên gia nổi tiếng trong ngành. Ngoài ra còn có rất nhiều điều thú vị sẽ được tiết lộ dần dần trong mỗi topic mà các diễn giả của Vietnam Mobile Day đem đến!

Điểm qua những topic đinh trong 100 topic đỉnh của sự kiện bên dưới. Cập nhật toàn bộ Agenda

  • Chủ đề “Xây dựng hệ thống xử lý bất đồng bộ có độ ổn định và hiệu năng cao” – Diễn giả Lê Minh Nghĩa – Solution Architect tại Tiki.
  • Chủ đề Develop Mobile App fast with Ionic Framework 101 – Diễn giả Nguyễn Đức Minh Quân, Solution Manager tại FPT Technology Solution
  • Chủ đề Automated Testing of Embedded Software – Diễn giả Nguyễn Đức Thái Bình, Specialist engineer của BOSCH Việt Nam
  • Chủ đề “Tăng tốc lập trình Android với Kotlin” – Diễn giả Trần Duy Thanh, Giảng Viên Khoa Hệ Thống Thông Tin, Đại Học Kinh Tế-Luật, ĐH Quốc Gia TP.HCM
  • Chủ đề “Kinh nghiệm làm mobile và những bài học thất bại” – Diễn giả Nguyễn Trung Thành, Head of Research & Development Department của VNG Corporation
  • Chủ đề “Killer Feature sẽ làm cho ứng dụng của bạn trở nên khác biệt – Diễn giả Nguyễn Hoài Anh – Online Channel Manager của Giao Hàng Nhanh
  • Chủ đề “Quy trình phát triển Mobile App Giải pháp fullstack cho phát triển Mobile App nhanh nhất và chi phí cơ hội thấp nhất với React ecosystem” – Diễn giả Phạm Thanh Tú, CTO của Agiletech
  • Chủ đề “Những câu chuyện từ những dự án phần mềm thất bại” – Diễn giả Hoàng Văn Hậu, CTO của Rada JSC
  • Chủ đề “Ứng dụng AI và blockchain để tối ưu hóa đầu tư mạo hiểm, và hơn thế nữa” – Diễn giả Võ Việt Anh – CEO của DropDeck và diễn giả Phan Đình Sơn – CTO của DropDeck

 
  • Thời gian & địa điểm:
    – 20/05/2017 tại Trung tâm hội nghị 272, Võ Thị Sáu, Q.3, Hồ Chí Minh

    – 27/05/2017 tại Trung tâm hội nghị và tiệc cưới Forevermark, 614 Lạc Long Quân, Quận Tây Hồ, Hà Nội
    – 03/06/2017 tại One Opera Danang hotel, 115 Nguyễn Văn Linh, Q. Hải Châu, Đà Nẵng
  • Website thông tin chi tiết: //mobileday.vn
  • Mọi chi tiết thắc mắc xin liên hệ
    ngoc.do@applancer.net [Ms. Ngọc] | 0944 685 243

    event@applancer.net [Event Team] | 08 6273 3497

Nhìn chung, có rất nhiều cách để lập trình viên code hiệu quả, cải thiện tư duy lập trình và tiến xa hơn trong sự nghiệp của mình. Trong số đó, việc mở rộng networking, học hỏi từ các guru trong ngành là 1 trong những cách tối ưu nhất.

Keep calm and Code Smart nha các dev!

Nguồn tham khảo: gamestudio via careerbuilder.vn

Sự thật ẩn giấu đằng sau những dòng code

Các software developer hẳn cũng đều đã từng nghe qua một câu tương tự như thế này:

“Sự thật chỉ có thể tìm thấy ở 1 nơi duy nhất: code”– Robert C. Martin 

Nhưng điều đó có nghĩa là gì ?

Dựa trên điều luật nổi tiếng trong Agile Manifesto : “Thực hành lập trình luôn hơn đọc trăm cuốn sách hay”

Có thể nói các developers viết các tài liệu về software behavior dưới hình thức những dòng code.

Thực ra, các chú thích hay các thông số kỹ thuật cũng có thể ghi nhận được từ software behavior. Tuy nhiên, đôi khi các chú thích hay các thông số kỹ này thuật không được cập nhập dù code thì vẫn được phát triển. Thế là những chú thích, thông số trở nên lỗi thời. Trái lại, code  luôn phản ánh và tạo nên định nghĩa về software behavior.

Vì thế mà khi bạn muốn hiểu về software behavior, hãy nhìn vào code.

Viết cho các độc giả của bạn

Có thể xem code là một loại tài liệu. Và lẽ tất nhiên, bất cứ loại tài liệu nào cũng có những nhóm độc giả riêng của mình.

Người xem code có thể là là một compiler hoặc interpreter, hay cũng có thể là các developer khác.

Vì vậy, mà bạn code không phải chỉ để cho chính mình mà còn phải cho người khác hiểu được. Bởi những developer khác sẽ làm việc với code cũng như giúp code của bạn mở rộng và phát triển hơn.

Một phương pháp thường gặp để code dễ hiểu là sử dụng clean code. Bằng việc sử ​​dụng ngôn ngữ lập trình dễ hiểu cho variable và method names. Điều đó làm giảm bớt những code comment.

Clean code nên được dùng với nguyên tắc sau: Điều gì mà ta có thể đạt được nhờ vào một phương pháp chứ không phải làm sao mà phương pháp đó có hiệu quả.

Hãy đoán xem phương pháp này có công dụng gì:

...

const gradient = 'linear-gradient[45deg, #FE6B8B 30%, #FF8E53 90%]';

const styles = StyleSheet.create[{
  button: {
    background: gradient,
    borderRadius: '3px',
    border: 0,
    color: 'white',
    height: '48px',
    textTransform: 'uppercase',
    padding: '0 25px',
    boxShadow: '0 3px 5px 2px rgba[255, 105, 135, .30]',
  },
}];
8


Vậy giờ ta thử viết nó ra theo phong cách của clean code xem:

...

const gradient = 'linear-gradient[45deg, #FE6B8B 30%, #FF8E53 90%]';

const styles = StyleSheet.create[{
  button: {
    background: gradient,
    borderRadius: '3px',
    border: 0,
    color: 'white',
    height: '48px',
    textTransform: 'uppercase',
    padding: '0 25px',
    boxShadow: '0 3px 5px 2px rgba[255, 105, 135, .30]',
  },
}];
9

Clean code là một ý tưởng tốt. Nhưng thế vẫn là chưa đủ.

Tầm quan trọng của việc chia sẻ hiểu biết

Khi có một yêu cầu mới, bạn cần phải hiểu làm cách nào để thực hiện nó, và điều đó ảnh hưởng như thế nào đến code.

Sẽ là một thách thức nếu phần mềm của bạn đã được viết cách đây một khoảng thời gian.

Sau đây là một tình huống mà tôi bắt gặp khá thường xuyên:

X: chúng ta không thể tiếp tục duy trì tính năng Foo

Y: Tại sao?

X: bởi vì Z là người duy nhất biết về nó- ông ấy đã implement code mà chúng ta đang muốn thay đổi

Y: vậy tại sao chúng ta không hỏi ông ấy?

X: bởi vì, ông ấy ốm/ đang trong nghĩ lễ/ đang có cuộc họp,/..

Y: oh

Vấn đề là, nêu code bạn viết dễ hiểu thì ai cũng sẽ đọc được nó

Có rất nhiều cách để làm điều đó. Ví như, Pair programming là một ý tưởng không tồi, hay trau đổi với các developer khác về code của bạn.

Tuy nhiên, cũng cần lưu ý, nếu có quá nhiều developer tham gia vào phát triển 1 sản phẩm sẽ thật khó để làm hài lòng tất cả, cũng như là vấn đề nếu họ bỏ giữa chừng thì sao?

Câu chuyện

Clean code giúp bạn chọn được những từ hay ý đẹp.

Câu hỏi đặt ra là: Bạn sẽ dùng chúng để kể câu chuyện gì qua code của bạn ?

Tôi thì chắc chắn chả biết rồi, chuyện của bạn mà.

Tuy nhiên, thông qua câu chuyện về một điển hình kinh doanh, mà tôi sắp giới thiệu với bạn, tôi tin tưởng tưởng khá chắc chắn rằng bạn sẽ cảm thấy thú vị với câu chuyện code đằng sau đó.

Câu chuyện từ cửa hàng găng tay

Là một người sử dụng phần mềm, tôi luôn mong muốn đạt được kết quả tốt nhất. Vì thế, vào mùa đông, tôi muốn mua một đôi găng tay mới để giữ ấm cho các ngón tay khi phải làm việc.

Vì vậy, tôi dạo qua các trang web bán găng tay. Các web này cho phép tôi mua găng tay trực tuyến.

Basic flow” [ hay còn được biết đến với tên gọi  “kịch bản ngày vui” ] được áp dụng trong trường hợp cụ thể này như sau:

  • Hệ thống bắt đầu với một giỏ hàng trống.
  • Hệ thống hiển thị danh sách găng tay hiện có
  • Tôi lựa cho găng tay mà mình thích thêm nó vào giỏ hàng. Hệ thống  ghi nhận đơn đặt hàng của tôi.
  • Tôi kiểm tra
  • Tôi nhập chi tiết thông tin giao hàng và phương thức thanh toán thanh toán. Hệ thống sẽ lưu các thông tin này.
  • Hệ thống hiển thị bản tóm tắt đơn đặt hàng.
  • Tôi xác nhận. Hệ thống bắt đầu vận chuyển đơn đặt hàng của tôi.

Sau vài ngày, tôi có găng tay mang

Còn đây là câu chuyện tôi muốn đọc trong code

Chương 1: use cases

Chương đầu tiên của câu chuyện là về các use case. Khi tôi đọc code tôi muốn có thể làm theo từng bước cho đến khi ra kết quả mong đợi

Từ góc độ người dùng, tôi muốn biết hệ thống phản ứng thế nào khi gặp vấn đề. Dưới góc nhìn của một user.

Tôi cũng muốn hiểu sự thay đổi có thể xảy ra xuyên suốt quá trình.

Ví dụ: người dùng thường cố gắng quay trở lại chi tiết hóa đơn thanh toán với thông tin vận chuyển, để biết:  Điều gì đã xảy ra? Thậm chí điều gì đó có thể xảy ra hay không?

Tôi muốn hiểu tường tận về code để có thể giải quyết vấn đề trong mọi trường hợp

Vậy một use-case sẽ có những thành phần nào?

Phần cơ bản của một use-case là “step” – các bước mang  người dùng tới gần hơn kết quả mong đợi

Ví dụ: “Hệ thống hiển thị danh sách găng tay.”

Không phải tất cả người dùng đều có thể đi thẳng một bước đạt được kết quả kỳ vọng. Chỉ có một nhóm người dùng nhất định [actors] bao gồm: những khách hàng mua găng tay, những nhà marketing cung cấp găng tay mới tham gia vào hệ thống.

Hệ thống cũng có thể tự chạy một số “Step”.  Giống như việc hiển thị danh sách găng tay, hệ thống tự chạy một số bước mà  người dùng không cần thực hiện thêm bất cứ thao tác nào.

Hoặc, một “Step” là sự tương tác với người dùng. Hệ thống sẽ đưa ra những phản ứng khi có event cho customer. Ví dụ: user điền thông tin vào mục shipping, hệ thống sẽ tự dộng lưu lại những thông tin đó.

Tôi muốn biết được loại data nào cần trong những event đó. Thông tin về Shipping thì sẽ bao gồm tên người dùng, địa chỉ , số điện thoại, etc.

Và người dùng phải thực hiện tuần tự các bước. Ví như: người dùng chỉ có thể thanh toán sau khi cung cấp đầy đủ thông tin vận chuyển. Rõ ràng, có một “flow” các bước diễn ra tuần tự trong trường hợp này. Ngoài ra, còn có những điều kiện được đặt ra để cho phép hệ thống có những phản ứng thích hợp.

Để hiểu về code, bạn cần có một cách học thật tốt để biết về nhiều thứ

Đối với 1 use-case tương tự như trường hợp  “mua găng tay”

  • Tuần tự các bước

Đối với mỗi bước:

  • Actors nào có quyền truy cập  [có nghĩa là nhóm người nào sử dụng ]
  • Điều kiện để hệ thống phản ứng
  • Nếu bước này là tự động, hoặc dựa trên sự tương tác của người dùng
  • Phản ứng của hệ thống

Đối với mỗi tương tác từ người dùng:

  • Các user event [như “người sử dụng nhập thông tin vận chuyển”]
  • Dữ liệu đi kèm với tương tác

Một khi tôi biết nơi để tìm một use-case và các phần của nó trong code, tôi sẽ có thể đi sâu hơn nữa.

Chương 2: chia nhỏ thành các bước thông qua components

Trách nhiệm của components:

Tạm xem các thành phần tạo nên software là các component. Vậy  mỗi Component sẽ đảm nhận những chức năng riêng, góp phần tạo nên solfware

Một component có thể là:

  • Component kỹ thuật như database,
  • Một dịch vụ như “dịch vụ giỏ hàng”
  • Một entity trong domain model

Điều đó phụ thuộc vào thiết kế phần mềm của bạn. Nhưng bất kể là gì: bạn cũng thường cần một vài component để biết được một bước của 1 use-case.

Hãy nhìn vào system reaction của step. Khi hệ thống hiển thị một danh sách găng tay. Bạn cần phải phát triển ít nhất hai chức năng: tìm thấy găng tay trong cơ sở dữ liệu và chuyển danh sách găng tay vào trang web.

Khi đọc code tôi muốn hiểu những điều sau đây:

  • Chức năng của từng thành phần là gì?

Ví dụ: “find gloves” cho database.

  • Inputs/outputs của mỗi chức năng là gì?

Ví dụ :

  • Inputs: tiêu chí để tìm găng tay.
  • outputs : danh sách găng tay.
  • Ai đang cùng chịu trách nhiệm chức năng này

Ví dụ: Đầu tiên tìm găng tay. Chuyển kết quả sang trang web thứ hai.

Chương 3: Nhiệm vụ của component là gì?

Code của component sẽ đảm nhận mọi nhiệm vụ.

Vốn là điều hay xảy ra đối với các mô hình miền có sử dụng thuật ngữ  liên quan trong lĩnh vực kinh doanh.

Ví dụ như các thuật ngữ găng tay, đặt hàng.

Với domain model mô tả data về găng tay gồm có: có màu sắc, thương hiệu, kích thước, giá cả ,… Mô hình miền cũng thực hiện tính toán trên dựa trên data để đưa ra tổng giá trị đơn hàng người dùng phải chi trả .

Component có thể là một bộ phận kỹ thuật như kho dữ liệu. Code cần phải trả lời câu hỏi: Làm thế nào để khởi tạo, tìm kiếm, cập nhật và xóa các thông tin trong data?

Kể câu chuyện của bạn

Câu chuyện của bạn có thể giống hoặc không giống câu chuyện trên.

Dù câu chuyện của bạn là gì, ngôn ngữ lập trình vẫn cho bạn sự tự do tuyệt đối để kể câu chuyện của mình.

Điều đó giúp các developer thích nghi được với những hoàn cảnh và các yêu cầu  khác nhau.

Tuy nhiên, nó cũng tiềm ẩn nguy cơ khi các developer kể quá nhiều điều khác nhau khiến câu chuyện trở nên khó hiểu. Kể cả khi là để cho ra một sản phẩm. Vì thế mà ta luôn gặp phải việc đọc code của người khác viết cực kì khó khăn do nó quá rối rắm.

Một cách để giải quyết vấn đề này là sử dụng các design pattern có sẵn.Chúng cung cấp cho bạn cấu trúc code mà bạn cần. Nhờ đó mà team của bạn có thể đi đến tiếng nói chung về cấu trúc của code.

Ví dụ, khung Rails được dựa trên mô hình Model View Controller nổi tiếng

Model này là nơi lưu trữ các domain data.

The view ám chỉ phía client với giao diện người dùng, như các trang HTML. Đây là nguồn gốc của các user events

Các controller sẽ nhận các user events từ phía máy chủ. Nó chịu trách nhiệm điều phối flow.

Vì vậy, khi có nhiều developer sử dụng Rails, họ biết phần nào của code có chức năng gì, và cân nhắc sử dụng chúng một cách thích hợp.

Họ chia sẻ những hiểu biết của mình, khắc phục những vấn đề gặp phải, và thậm chí hưởng lợi từ những chia sẽ đó.

Nếu bạn thấy đến đây là ổn rồi thì cũng tốt. Nhưng tôi còn muốn đi xa hơn thế.

Requirements

Nhiều khách hàng hỏi tôi làm thế nào để giải quyết với vấn đề về tài liệu phần mềm với tầm nhìn dài hạn.

Khi làm việc trong một môi trường đòi hỏi sự nhanh nhạy, làm thế nào để bạn tạo documentation để thực hiện software maintenance?

Những yêu cầu nào đã được thực hiện?

Bạn tìm thấy vị trí được thêm vào ở đâu trong code?

Hàng hoạt câu hỏi được đặt ra cho tôi, lúc đầu tôi cũng không có câu trả lời thỏa mãn. Tất nhiên ngoại trừ: tầm quan trọng của các bài kiểm tra viết, tự động, code sạch, chia sẻ sự hiểu biết.

Nhưng một vài năm trước, tôi bắt đầu suy nghĩ: Nếu sự thật nằm bên trong code, thì code có thể nói lên sự thật . Nói cách khác: nếu bạn quan tâm đến việc kể câu chuyện của mình bằng code tại sao bạn phải diễn giải lại câu chuyện đó bằng lời?

Cần có một cách tốt hơn. Phải tạo ra tài liệu để kể câu chuyện đó một cách chính xác, mà ai cũng có thể hiểu. Và nó phải luôn được cập nhật thường xuyên.

Và như vậy thì chỉ có một nguồn duy nhất: đó là chính bản thân Code.

Sau nhiều thí nghiệm, tôi đã thu được kết quả. Nó đã được công bố trong dự án Github có tên  gọi là requirementsascode.

Cách thức mà nó hoạt động

  • Ví dụ: UseCasemodel định nghĩa các khái niệm về the actorsuse cases, their flowsand steps.  Như đã được giới thiệu ở phần đầu của bài viết.
  • Mô hình UseCaseModelRunner. Mỗi người dùng đều có những cách thức sử dụng khác nhau, bởi vì mỗi người dùng có thể đi theo những con đường khác nhau thông qua các mô hình use-case
  • Người dùng  tương tác với các user event thông qua giao diện tương tác được gọi là system reaction
  • Nhưng tương tác chỉ được thực hiện khi người dùng tuân thủ tuần tự các bước

Ví dụ: người dùng chỉ có thể cung cấp thông tin thanh toán nếu đã hoàn thành thông tin giao hàng

  • Hệ thống tương tác [systemreaction] là một phương pháp. Phương pháp này có nhiệm vụ phối hợp các bộ phận với nhau nhằm thực hiện các bước, như được mô tả trong chương 2.
  • Chương 3 nằm ngoài phạm vi của requirementsascode. Nó mang tính ứng dụng nhiều hơn. Điều đó làm cho các yêu cầu bằng code tương thích với các thiết kế phần mềm tùy ý.

Vì vậy, UseCaseModelRunner kiểm soát hành vi hiển thị của người sử dụng phần mềm. Dựa trên một UseCaseModel.

Với requirementsascodeextract, bạn có thể tạo ra tài liệu từ các mô hình use case tương tự. Bằng cách đó, tài liệu hướng dẫn luôn phản ánh cách phần mềm hoạt động.

Yêu cầu bằng code sử dụng FreeMarker template engine giúp bạn tạo ra bất kỳ tài liệu văn bản  nào bạn thích, ví dụ các trang HTML. Quá trình xử lý có thể biến nó thành các định dạng tài liệu khác như PDF.

Nguồn: blog.topdev.vn via Medium

Không thể bỏ lỡ: Bí kíp Digital Marketing tại ngày hội Vietnam Mobile Day

Vietnam Mobile Day là ngày hội thường niên lớn nhất trong lĩnh vực Ứng dụng Di động, cập nhật những kiến thức mới, chuyên sâu từ các diễn giả được mời về từ các công ty công nghệ tiên phong trong nước và quốc tế.

Để đáp ứng đầy đủ nhu cầu của người tham dự đa dạng từ Developer, Marketer, Designer đến đại diện các tập đoàn, các công ty Tech startup, sự kiện năm nay mở rộng đến hơn 120 chủ đề chuyên sâu, hơn 100 diễn giả đến từ nhiều lĩnh vực hoạt động trong ngành công nghiệp Mobile.

Cùng điểm qua các topic thú vị về Marketing sẽ xuất hiện tại Vietnam Mobile Day nhé!

Chủ đề #1: Cách tiếp cận làm Mobile app cho doanh nghiệp

Mobile app gần như đã thay đổi hoàn toàn cách doanh nghiệp giao tiếp với khách hàng, đối tác… Với khả năng đa dạng, từ cấu hình, giao diện đến sự tiện lợi, giá thành, Mobile app có thể tích hợp và truyền tải mọi giá trị của thương hiệu, của sản phẩm. Giờ đây, tất cả đã “thu bé lại vừa bằng vài thao tác trên màn hình cảm ứng”!

Đặc biệt, Mobile app còn có tính bảo mật cao, lưu trữ được rất nhiều data hữu ích từ hành vi của người dùng để hoàn thiện sản phẩm/ dịch vụ của mình, tối ưu hóa các hoạt động Marketing.

Nhưng, làm sao hiểu và làm được một app phù hợp với đối tượng khách hàng, nhằm tạo nên nhiều giá trị đồng thời thông qua đó xây dựng thương hiệu doanh nghiệp là điều rất khó!

Topic CÁCH TIẾP CẬN LÀM MOBILE APP CHO DOANH NGHIỆP của diễn giả Nguyễn Duy Vỹ – Marketing Director của Tugo.com.vn đã sẵn sàng hóa giải khó khăn này cho bạn. Với 10 năm kinh nghiệm làm Marketing, nắm giữ các chức vụ quan trọng tại những công ty đình đám như Thế giới di động, Yan TV, Lingo, anh Duy Vỹ sẽ trực tiếp đem ra “mổ xẻ” các cách tiếp cận Mobile app, đem đến cái nhìn thực tiễn và bài học quý giá cho mọi cá nhân, startup đang vận hành xoay quanh ứng dụng di động.

Chủ đề #2 Zero Cost Marketing for Mobile Startups

Dường như ai đang dấn thân theo nghiệp Startup cũng đều trải qua trăn trở: Làm thế nào để tối ưu hoá chi phí Marketing cho giai đoạn đầu phát triển của Startup.

Là người sáng lập viên của Umbala – công ty khởi nghiệp của người Việt đặt trụ sở tại Silicon Valley, đồng thời là nền tảng Video Gameshow tương tác trực tuyến trên Mobile đầu tiên trên thế giới, diễn giả Nguyễn Minh Thảo sẽ giải quyết 2 câu hỏi lớn trong topic Zero Cost Marketing for Mobile Startup của mình. Đó chính là:

  • Lý do vì sao Mobile Startup cần phải tối ưu hoá chi phí Marketing?
  • Cách thức để có thể thực hiện được các chiến thuật Zero Cost Marketing?

“Hy vọng sẽ có thể trao đổi những câu chuyện nghe phi lý nhưng thực sự có giá trị cho các bạn làm khởi nghiệp, vì để hiểu được điều này mình phải trả giá khá nhiều” – Anh Minh Thảo cho biết.

Chủ đề #3: Các bước xây dựng truyền thông cho 1 ứng dụng di động

Có 1 ứng dụng di động được đưa lên thành công trên App Store là 1 điều tuyệt vời với các lập trình viên Mobile, nhưng điều đó chưa đủ! Chiến trường App Store khốc liệt, đòi hỏi đơn vị sản xuất phải có kế hoạch Marketing hợp lý, hiệu quả để thu hút lượt tải khách hàng hoặc đưa ứng dụng lên vị trí top đầu.

Hiện đang là Marketing Manager của Appota – một trong những start-up lớn nhất hiện nay trong mảng Mobile Business tại Việt Nam, anh Đặng Thái Sơn sẽ truyền tải 5 năm kinh nghiệm lĩnh vực Truyền thông ứng dụng & phát hành Game đến người tham dự Vietnam Mobile Day qua chủ đề Các bước xây dựng truyền thông cho 1 ứng dụng di động!

Chủ đề sẽ hướng dẫn bạn các bước đơn giản để xác định sự khác biệt hóa, đối tượng truyền thông, từ đó xây dựng tài liệu truyền thông phù hợp. Đặc biệt, anh Thái Sơn còn bật mí các chiến thuật truyền thông ứng dụng hiệu quả đến người dùng.

Chủ đề #4: Xu hướng Mobile Marketing

Hoạt động trong lĩnh vực Marketing, có 1 thực tế “phũ phàng” rằng bạn phải liên tục cập nhật những thay đổi của ngành nếu không muốn bị “bỏ rơi” giữa bể kiến thức mênh mông bất tận. Đặc biệt, khi công nghệ nói chung & xu hướng smartphone dần trở thành “nếp sống” của đại bộ phận người trẻ, các Marketer lại càng phải đối mặt với nhiều thách thức để bắt kịp được nhu cầu thị trường, tiêu biểu nhất chính là công cụ MOBILE MARKETING.

Nhắc đến Mobile Marketing, ngoài SMS Marketing phổ biến lâu đời, 1 số hình thái mới đang nảy sinh thu hút sự quan tâm của các nhà làm dịch vụ như: Internet Mobile Marketing, Game/ Ứng dụng, Location based services [Dịch vụ trên nền tảng định vị], Google Mobile Ads…

Vậy trong năm này, xu hướng Mobile Marketing nào sẽ lên ngôi? Xu hướng nào xứng đáng để Marketer đầu tư chi phí, công sức?

Nhân vật được BTC Vietnam Mobile Day trao gửi chủ đề Mobile Marketing nóng này, chính là anh Phan Thế Anh – người có kinh nghiệm nghiên cứu sinh tiến sĩ Quản trị marketing tại Hàn Quốc và hiện đang học tiến sĩ Quản trị Kinh doanh tại Đài Loan, từng là diễn giả trẻ nhất tại 4th Asian SME Conference [Indonesia].

Chủ đề #5: 9 lý do khiến bạn làm thương hiệu cá nhân thất bại

Hầu hết mọi người chưa đánh giá đúng tầm quan trọng của Personal Branding và không phải ai xây dựng Personal Branding cũng đều như ý. Đặc biệt khi các thiết bị di động đang không ngừng thay đổi thói quen của đại bộ phận giới trẻ – những người vừa là khách hàng của các ứng dụng Mobile vừa là những người âm thầm phát triển nên các ứng dụng sáng tạo đột phá, liệu các kinh nghiệm về khẳng định bản thân, tìm kiếm một chỗ đứng trong xã hội có còn giá trị và được áp dụng ra sao trong công việc hằng ngày?

Anh Nguyễn Ngọc Long – Người sáng lập của Truyền Thông Trăng Đen, đồng thời là một blogger có góc nhìn đặc sắc đối với nhiều vấn đề gai góc trong xã hội sẽ là nhân vật “cầm cân nảy mực” cho chủ đề 9 lý do khiến bạn làm thương hiệu cá nhân thất bại tại Vietnam Mobile Day.

Đến với chủ đề, bạn sẽ hiểu rõ tại sao Personal Branding của mình chưa tốt, làm thế nào để tránh được những thất bại “đã được báo trước”, để từ đó khẳng định được giá trị của bản thân trong công việc và cuộc sống.

Ngày Hội Di Động Toàn Quốc – Vietnam Mobile Day quy tụ những tên tuổi hàng đầu trong trong ngành Truyền thông – Marketing, sẽ mở ra cho người tham dự những cơ hội giao lưu, học hỏi, phát triển networking quý giá!

  • Thời gian & địa điểm:
    – 20/05/2017 tại Trung tâm hội nghị 272, Võ Thị Sáu, Q.3, Hồ Chí Minh
    – 27/05/2017 tại Trung tâm hội nghị và tiệc cưới Forevermark, 614 Lạc Long Quân, Quận Tây Hồ, Hà Nội
    – 03/06/2017 tại One Opera Danang hotel, 115 Nguyễn Văn Linh, Q. Hải Châu, Đà Nẵng
  • Website thông tin chi tiết: //mobileday.vn
  • Mọi chi tiết thắc mắc xin liên hệ
    ngoc.do@applancer.net [Ms. Ngọc] | 0944 685 243
    event@applancer.net [Event Team] | 08 6273 3497

Bí kíp tạo website nhờ vào GitHub và Cloudflare

Bạn nên đọc bài viết này nếu…

  1. Bạn muốn setup redirect hoặc server configuration theo ý mình và hoàn toàn miễn phí
  2. Bạn muốn đưa site mình lên HTTPS nhưng chả biết phải làm gì
  3. Bạn thấy bị choáng bởi vô số lựa chọn cho bạn [như là Netlify, Surge, BitBalloon, Now]

Tại sao lại chọn Github?

  1. Dễ dàng trong setup cũng như là để bắt đầu với các trang trên Github
  2. Ngay lập tức deploy khi new code được đưa ra

Tại sao lại là Cloudflare?

  1. Do nó Miễn phí
  2. Bởi vì nó có hỗ trợ cho SSL [HTTPS] [Vào đây xem nguyên nhân tại sao HTTPS lại quan trọng]
  3. Quản lí DNS cực kì dễ dàng
  4. Cho phép được điều chỉnh  browser cache expiration cho các tài nguyên của mình
  5. Tự động giảm thiểu tài nguyên sử dụng để tránh lãng phí
  6. Rules cho các custom page cho việc setup redirect [vd như luôn HTTPS]
  7. HTTP2/SPDY hỗ trợ cho trình duyệt web
  8. Cho phép setup  HSTS [HTTP Strict Transport Security]

Trước khi ta bắt đầu, bạn sẽ cần có một vài thứ sau:

  1. Một tài khoản trên Github
  2. Một tài khoản trên Cloudflare
  3. Quyền truy cập vào một custom domain. Bạn có thể mua nó từ bất cứ Domain Name Registrar nào như: Namecheap, GoDaddy, BigRock

Nếu bạn đã sẵn sàng thì hãy bắt đầu:

Bước 1: Tạo ra Github repo với code của bạn

  • Vào trang //pages.github.com
  • Chọn vào mục Project Site để tìm hướng dẫn về việc tạo một trang cơ bản từ đầu hoặc bằng cách sử dụng theme tự chọn.

Bước 2: Cài đặt Github page cho repository

Vào mục setting của repository. Trong mục lục của Github Page, chọn master branch để phục vụ cho website của bạn. Sau khi xong, bạn có thể vào //.github.io/repository để xem website của mình hoạt động như thế nào.

Bước 3: Thêm custom domain

Thêm custom domain mà bạn vừa mới mua vào và nhớ là save nó lại. Từ giờ, website của bạn đã sẵn sàng với custom domain của chính mình.

Như vậy là đã hoàn thành các setup bên Github rồi. Giờ chúng ta sẽ tiếp tục setup cho bên Cloudflare  nhằm trang bị cho website mình các tính năng mạnh mẽ mà tôi đã đề cập đến ở đầu bài viết.

Bước 4: Setup domain của bạn trên Cloudflare

Đăng nhập vào Cloudflare. Nếu đây là lần đầu tiên bạn sử dụng nó, thì bạn sẽ thấy một bảng hiện ra như hình trên. Còn nếu đã dùng vài lần rồi, thì giờ bạn cứ kiếm mục Add Site trên navigation bar ở phía trên bên phải màn hình để thêm domain mới. Hãy điền tên domain mà bạn muốn quản lí và click nút Begin Scan.

Bước 5: Setup DNS record cho domain

Trong bước này, chúng ta sẽ cho Cloudflare biết là ta muốn kết nối domain của ta với

bằng cách sử dụng 2 A Record DNS entry:

  1. 192.30.252.153
  2. 192.30.252.154

Sau khi đã làm xong, thì tất cả những yêu cầu đến domain của bạn sẽ được chuyển về trang web trên Github ở bước 3.

Trước khi qua bước tiếp theo, chúng ta cần có một sub-domain www cho trang web của mình. Vì thế bạn sẽ cần thêm vào một CNAME record DNS entry với công dụng kết nối sub-domain [www] tới domain chính của bạn [@].

NOTE: Đừng có thử truy cập vào trang web của bạn ngay lúc này. Không hoạt động được đâu. Bởi chúng ta chỉ mới hoàn thành Cloudflare cho Github setup. Bạn còn cần phải có DNS Registrar -> Cloudflare setup, vốn sẽ được nói đến trong bước 7.

Giờ thì click continue để tới bước tiếp theo.

Bước 6: Chọn Free Cloudflare plan

Những Free plan dành cho Cloudflare bao gồm các lựa chọn khác nhau khá là hay mà vốn đã được tôi đề cập trong phần vì sao lại là Cloudflare? ở đầu bài viết.

Tiếp theo là click vào continue

Bước 7: Nâng cấp tên server trên DNS Registrar của bạn

Khi đã đến được trang này rùi, hãy giữ nó luôn mở trong một tab riêng và truy cập trang DNS Registrar của bạn [nơi mà bạn mua cái domain ấy]. Nếu bạn sử dụng một trong các Registrar do tôi đưa ra thì cứ click vào một trong các nguồn sau đây để hiểu thêm về cách thay đổi tên của server:

  1. Bigrock
  2. Namecheap
  3. GoDaddy

Bạn sẽ cần thay đổi tên của server trong domain setting bằng tên của trong trang Cloudflare mà bạn đã để sẵn ở tab riêng.

Và thế là bạn đã thành công trong việc setup custom domain của mình để sử dụng Cloudflare như một DNS provider. Bạn có thể tới mục Overview ở phía trên và bạn sẽ thấy rằng việc đổi tên cho server vẫn đang chờ để được thực hiện.

Lúc Overview tab hiện ra dòng Status: Active, thì bạn đã có thể truy cập vào trang web của mình nhờ vào custom domain.

Bước 8: Điều chỉnh Minification

Ở mục Speed setting, trong phần Auto Minify, bạn hãy chọn auto-minify everything: Javascript, CSS, HTML. Nhờ đó Cloudflare sẽ tự động cached mỗi lần các asset có thay đổi.

Điểm mạnh của minification chính là ở việc các file thông tin đưa đến trình duyệt của bạn sẽ có kích cỡ giảm đi nhiều nhờ đó mà sẽ tăng hiệu năng xử lí và cải thiện trải nghiệm người dùng.

Bước 9: Tinh chỉnh Browser Cache Expiration

Nếu bạn scroll down trên cùng một trang của Auto Minify, bạn sẽ thấy phần Browser Cache Expiration. Thường thì nó sẽ được setup ở mức 30 ngày/ 1 tháng, để WebpageTest không phải đưa ra một lời warning nào cho bạn. Cái mức thời gian này thể hiện việc khi trang web của bạn được load trên bất cứ trình duyệt nào, thì trình duyệt web đó sẽ không yêu cầu thêm những asset lần thứ 2 cho đến khi hết cái khoảng thời gian trên.

Trước khi qua bước tiếp theo, bạn hãy kiểm tra mục Crypto setting trên Cloudflare. Nó sẽ hiện ra dòng Active Certificate tại mục SSL [Note: nếu không thấy thì thử reload lại trang để nó update]. Ở 2 bước tiếp theo, chúng ta sẽ khiến cho website của bạn luôn chạy thông qua HTTPS. Để làm được điều đó, bạn cần phải có tài khoản với active certificate trên Cloudflare.

Bước 10: điều chỉnh nguyên tắc hoạt động của trang web

Ở bước này, chúng ta cần làm 2 điều sau:

  • Chuyển hướng tất cả các request cho www.yourcustomdomain.com đến yourcustomdomain.com
  • Chuyển hướng tất cả các request cho //yourcustomdomain.com đến //yourcustomdomain.com

Sau đó đến mục Page Rules setting và click vào Create Page Rule.

Để hoàn thành việc chuyển hướng từ www.yourcustomdomain.com đến yourcustomdomain.com, thay tweetify.io với tên của yourcustomdomain.com. Sau đó click Save and Deploy.

Để hoàn thành việc chuyển hướng từ //yourcustomdomain.com đến //yourcustomdomain.com,  thay tweetify.io với tên của yourcustomdomain.com. Sau đó click Save and Deploy.

Bước 11: Tinh chỉnh HSTS

Vào mục Crypto setting và scroll down đến phần HTTP Strict Transport Security [HSTS]. Click vào Enable HSTS. Khi đó bạn sẽ được hỏi rằng “bạn có biết mình đang làm gì không”. Trước khi bạn nhấn vào là I understand, tôi sẽ giải thích cho bạn vì sao ta phải làm như vậy:

Nếu một người dùng đã từng truy cập vào website của bạn, thì kể từ đó, bất cứ khi nào người dùng muốn quay trở lại, họ sẽ luôn được truy cập vào phiên bản HTTPS của trang web. Nhờ  đó mà site của bạn sẽ load nhanh hơn một chút đối với các người dùng hay truy cập bởi nhờ vào việc chuyển hướng từ HTTP đến HTTPS đối với client thay vì phải qua Cloudflare Page Rule như ở bước 10

Sau khi hoàn thành tất cả, bạn sẽ xe được một list các tinh chỉnh setting như hình dưới. bạn có thể đọc thêm chi tiết tại đây.

Chúc mừng bạn trong việc tạo ra một website thành công. Giờ đã đến lúc khoe hàng với thế giới rồi.

Nguồn: blog.topdev.vn via medium

JavaScript Arrays và Objects thật ra không khác gì sách và báo

Khi bạn vừa mới bắt đầu JavaScript, sẽ rất khó để tìm ra cách sắp xếp và lưu trữ dữ liệu tốt nhất đối với bạn.

Mặt khác, bạn hẳn cũng đã làm quen với arrays từ việc học vòng lặp “loop”. Tuy nhiên khi bạn cố nhồi nhét đống dữ liệu vào array, thì nó cũng trở nên vô cùng hổ lốn và việc review đống code thì y như nhiệm vụ bất khả thi bởi đọc xong cũng chả hiểu.

Vì thế mà việc lựa chọn giữa object và array sẽ chở nên đơn giản hơn nếu bạn xác định được mục đích của chúng. Array thì giống như sách còn Object thì là báo vậy.

Tìm việc làm Javascript tại đây

Arrays: Thứ tự của dữ liệu mới là quan trọng nhất

Dưới đây là một phần của cuốn sách cực ngắn, trong hình thức array:

export const fontSize = {
  // heading
  displayLarge: '32px',
  displayMedium: '26px',
  displaySmall: '20px',
  heading: '18px',
  subheading: '16px',

  // body
  body: '17px',
  caption: '15px',
};

export const fontWeight = {
  bold: 700,
  semibold: 600,
  normal: 400,
  light: 200,
};

export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};

export const lineHeight = {
  // heading
  displayLarge: '48px',
  displayMedium: '48px',
  displaySmall: '24px',
  heading: '24px',
  subheading: '24px',

  // body
  body: '24px',
  caption: '24px',
};
0

 

Thôi được rồi, nó là 3 chường đầu của quyển Harry Porter thứ nhất. Dưới đây là dạng hình ảnh của array:

Bạn sẽ muốn dùng array khi mà thứ tự là điều quan trọng nhất để sắp xếp dữ liệu. Chả có ai lại nhìn vào tên các chương của quyển sách rồi nghĩ “chương 3 tên nghe ngầu vãi, thôi đọc chương 3 ngay và luôn!” – Các chương đã được sắp theo thứ tự để bạn biết đọc như nào.

Khi ta lấy thông tin lại từ array, bạn sẽ cần tới index của từng phần. Các array là 0-indexed, chúng bắt đầu đềm từ số 0 chứ không phải là 1.

Như vậy nếu bạn muốn lấy thông tin từ index 0 của array [chứa thông tin về 1 chương của quyển sách], bạn sẽ phải ghi như thế này:

export const fontSize = {
  // heading
  displayLarge: '32px',
  displayMedium: '26px',
  displaySmall: '20px',
  heading: '18px',
  subheading: '16px',

  // body
  body: '17px',
  caption: '15px',
};

export const fontWeight = {
  bold: 700,
  semibold: 600,
  normal: 400,
  light: 200,
};

export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};

export const lineHeight = {
  // heading
  displayLarge: '48px',
  displayMedium: '48px',
  displaySmall: '24px',
  heading: '24px',
  subheading: '24px',

  // body
  body: '24px',
  caption: '24px',
};
1

Và kết quả bạn nhận được là:

export const fontSize = {
  // heading
  displayLarge: '32px',
  displayMedium: '26px',
  displaySmall: '20px',
  heading: '18px',
  subheading: '16px',

  // body
  body: '17px',
  caption: '15px',
};

export const fontWeight = {
  bold: 700,
  semibold: 600,
  normal: 400,
  light: 200,
};

export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};

export const lineHeight = {
  // heading
  displayLarge: '48px',
  displayMedium: '48px',
  displaySmall: '24px',
  heading: '24px',
  subheading: '24px',

  // body
  body: '24px',
  caption: '24px',
};
2

Bạn chọn đọc dựa vào thứ tự của chương chứ không là tên của chúng.

Object: Tên của dữ liệu mới là quan trọng nhất

Dưới đây là cách một tờ báo được thể hiện bằng Object

export const fontSize = {
  // heading
  displayLarge: '32px',
  displayMedium: '26px',
  displaySmall: '20px',
  heading: '18px',
  subheading: '16px',

  // body
  body: '17px',
  caption: '15px',
};

export const fontWeight = {
  bold: 700,
  semibold: 600,
  normal: 400,
  light: 200,
};

export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};

export const lineHeight = {
  // heading
  displayLarge: '48px',
  displayMedium: '48px',
  displaySmall: '24px',
  heading: '24px',
  subheading: '24px',

  // body
  body: '24px',
  caption: '24px',
};
3

Một góc nhìn khác, thể hiện bằng hình ảnh

Object được sử dụng khi bạn muốn sắp xếp dữ liệu dựa vào tên của chúng. Bởi khi ta đọc báo, đôi khi không theo một trình tự nhất định mà cứ tin nào hay thì đọc trước. Không cần biết thông tin đó ở vị trí nào, bạn có thể lật tới ngay để xem. Vốn khác hoàn toàn so với sách bởi bạn cần đọc theo một thứ tự rõ ràng.

Object sắp xếp dữ liệu thông tin dựa vào key/value pairs. Nó sẽ trông như thế này

export const fontSize = {
  // heading
  displayLarge: '32px',
  displayMedium: '26px',
  displaySmall: '20px',
  heading: '18px',
  subheading: '16px',

  // body
  body: '17px',
  caption: '15px',
};

export const fontWeight = {
  bold: 700,
  semibold: 600,
  normal: 400,
  light: 200,
};

export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};

export const lineHeight = {
  // heading
  displayLarge: '48px',
  displayMedium: '48px',
  displaySmall: '24px',
  heading: '24px',
  subheading: '24px',

  // body
  body: '24px',
  caption: '24px',
};
4

Chẳng hạn nếu bạn muốn vào xem phần “Business” của tờ báo, bạn sẽ phải dùng key như sau

export const fontSize = {
  // heading
  displayLarge: '32px',
  displayMedium: '26px',
  displaySmall: '20px',
  heading: '18px',
  subheading: '16px',

  // body
  body: '17px',
  caption: '15px',
};

export const fontWeight = {
  bold: 700,
  semibold: 600,
  normal: 400,
  light: 200,
};

export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};

export const lineHeight = {
  // heading
  displayLarge: '48px',
  displayMedium: '48px',
  displaySmall: '24px',
  heading: '24px',
  subheading: '24px',

  // body
  body: '24px',
  caption: '24px',
};
5

hoặc

export const fontSize = {
  // heading
  displayLarge: '32px',
  displayMedium: '26px',
  displaySmall: '20px',
  heading: '18px',
  subheading: '16px',

  // body
  body: '17px',
  caption: '15px',
};

export const fontWeight = {
  bold: 700,
  semibold: 600,
  normal: 400,
  light: 200,
};

export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};

export const lineHeight = {
  // heading
  displayLarge: '48px',
  displayMedium: '48px',
  displaySmall: '24px',
  heading: '24px',
  subheading: '24px',

  // body
  body: '24px',
  caption: '24px',
};
6

Khi đó thông tin sẽ được chuyển lại cho bạn là value “giá vàng lại giảm” chẳng hạn. Vì thế nên khi bạn thấy việc sắp xếp dữ liệu dễ dàng hơn dựa vào tên thì hãy dùng object.

Kết hợp cả Object và Array

Nãy giờ, chúng ta chỉ nói về cách sắp xếp string dựa vào Object hoặc Array. Giờ thì bạn còn có thể dùng kết hợp cả hai lại:

  1. Array trong Object
  2. Object trong Array
  3. Array trong Array
  4. Object trong Object

Đây là lúc mọi chuyện chở nên rối rắm. Tuy nhiên, trong đời thực, bạn sẽ luôn luôn phải dùng cách kết hợp ít nhất 2 cách sắp xếp để lưu trữ dữ liệu một cách tốt nhất. Ngoài ra, nó còn phải tiện cho bạn để mỗi lần review code sau một tuần làm việc thì bạn còn hiểu được mình đã viết cái gì.

Quay về với ví dụ sách ở trên. Giả sử bạn còn muốn lưu trữ thông tin của từng trang của từng phần của quyển sách thì sao? Đó là lúc bạn nên sử dụng cáchObject trong Array, như thế này:

export const fontSize = {
  // heading
  displayLarge: '32px',
  displayMedium: '26px',
  displaySmall: '20px',
  heading: '18px',
  subheading: '16px',

  // body
  body: '17px',
  caption: '15px',
};

export const fontWeight = {
  bold: 700,
  semibold: 600,
  normal: 400,
  light: 200,
};

export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};

export const lineHeight = {
  // heading
  displayLarge: '48px',
  displayMedium: '48px',
  displaySmall: '24px',
  heading: '24px',
  subheading: '24px',

  // body
  body: '24px',
  caption: '24px',
};
7

 

export const fontSize = {
  // heading
  displayLarge: '32px',
  displayMedium: '26px',
  displaySmall: '20px',
  heading: '18px',
  subheading: '16px',

  // body
  body: '17px',
  caption: '15px',
};

export const fontWeight = {
  bold: 700,
  semibold: 600,
  normal: 400,
  light: 200,
};

export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};

export const lineHeight = {
  // heading
  displayLarge: '48px',
  displayMedium: '48px',
  displaySmall: '24px',
  heading: '24px',
  subheading: '24px',

  // body
  body: '24px',
  caption: '24px',
};
8

Bạn vẫn giữ được thứ tự của từng chương và giờ lại có thêm tính năng đánh số từng trang. Và nếu bạn muốn biết số trang thì cứ thêm dòng này.

export const fontSize = {
  // heading
  displayLarge: '32px',
  displayMedium: '26px',
  displaySmall: '20px',
  heading: '18px',
  subheading: '16px',

  // body
  body: '17px',
  caption: '15px',
};

export const fontWeight = {
  bold: 700,
  semibold: 600,
  normal: 400,
  light: 200,
};

export const tagMapping = {
  h1: 'displayLarge',
  h2: 'displayMedium',
  h3: 'displaySmall',
  h4: 'heading',
  h5: 'subheading',
};

export const lineHeight = {
  // heading
  displayLarge: '48px',
  displayMedium: '48px',
  displaySmall: '24px',
  heading: '24px',
  subheading: '24px',

  // body
  body: '24px',
  caption: '24px',
};
9

Kết quả sẽ là value với 18.

Giờ ví dụ như bạn muốn biết list xếp hạng những tác giả sách hay nhất dựa theo tuổi của họ trong bài báo thì sao. Đây là lúc bạn dùng Array trong Object rồi đấy:

import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { tagMapping, fontSize, fontWeight, lineHeight } from '../styles/base/typography';

function Heading[props] {
  const { children, tag: Tag } = props;
  return {children};
}

export default Heading;

export const styles = StyleSheet.create[{
  displayLarge: {
    fontSize: fontSize.displayLarge,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displayLarge,
  },
  displayMedium: {
    fontSize: fontSize.displayMedium,
    fontWeight: fontWeight.normal,
    lineHeight: lineHeight.displayLarge,
  },
  displaySmall: {
    fontSize: fontSize.displaySmall,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.displaySmall,
  },
  heading: {
    fontSize: fontSize.heading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.heading,
  },
  subheading: {
    fontSize: fontSize.subheading,
    fontWeight: fontWeight.bold,
    lineHeight: lineHeight.subheading,
  },
}];
0

Array lúc này trở nên vô cùng phù hợp bởi list xếp hạng cần có thứ tự. Tương tự, ta cũng có thể có array list các vận động viên trong object sport.

Một vài thử thách dành cho bạn

Bạn đang làm một web app có phần quiz, yêu cầu người xem phải điền vào một list các câu hỏi và xem số điểm mình ghi được là bao nhiêu ở cuối bài. Bạn sẽ muốn lưu trữ tất cả các câu trả lời của người dùng và kiểm tra chúng sau khi đã hoàn thành bài test. Vậy thì ta nên dùng phương thức nào để lưu trữ những câu trả lời của user trước khi kiểm tra nó? Tại sao?

Thí dụ bạn cho phép user tạo profile của mình trên trang web của bạn, bao gồm tên, họ, email và mật khẩu. Bạn sẽ muốn lưu trữ những thông tin đó trước khi gởi nó đến back end. Như vậy bạn sẽ chọn phương thức nào để lưu trữ những thông tin về user? Tại sao?

Giờ bạn đang phải tạo ra một forum site, công việc của bạn là xếp hạng các comment dựa trên số vote chúng có. Vậy thì phải xài cách nào khi bạn phải theo dõi cả nội dung của comment và số vote của chúng? Gợi ý: Đó là một phương thức kết hợp.

Chủ Đề