Home Blog Page 220

5 bài học quí giá về việc phát triển ứng dụng iOS

Với hơn 8 năm kinh nghiệm trong lập trình iOS và tham gia phát triển vô số app khác nhau, tôi rút ra được 5 bài học quan trọng quyết định việc tạo ra một ứng dụng một cách hiệu quả, nhất quán mà lại không hề buồn chán.

Hãy cứ giữ nguyên chúng

Cứ mỗi lần bạn muốn nhắm tới cross-platform thì mọi thứ đều sẽ chỉ làm tăng thêm sự phức tạp và bug cho project của bạn. Do đó, hãy cứ giữ nguyên mọi thứ và dùng cách mà bạn thành thạo nhất. Hơn nữa, nó còn giúp việc quản lí và báo cáo ít tốn thời gian hơn. Sau 8 năm lăn lộn trong giới IT, Tôi chưa từng thấy một project lớn nào hối tiếc khi họ lựa chọn native. Nhưng số lượng thất bại của project cross-plattform thì không đếm hết được.

Tuyển lập trình ios hấp dẫn lương cao cho bạn

Đừng dùng external libraries

Với sự phát triển của công nghệ và kĩ thuật trong lập trình, external libraries thật sự không còn cần thiết nữa. Bởi hầu như mọi vấn đề đều có thể giải quyết chỉ với native frameworks. Networking là một ví dụ điển hình – bạn không cần phải dùng tới những library cao sang làm gì. Cứ build nó từ con số không và tùy chỉnh theo nhu cầu của project của bạn. Vừa đơn giản mà lại linh hoạt. Tất nhiên là có một số trường hợp cá biệt, yêu cầu bạn phải dùng đến external libraries, như những tính năng liên quan tới Google Map hoặc InterCom chẳng hạn. Tuy nhiên, cứ theo lời tôi, hạn chế hết mức có thể việc dùng tới external libraries.

Hãy quên package manager đi

Bởi vì bạn đã không muốn đụng tới external libraries, thế nên package manager cũng không còn cần thiết để quản lí chúng nữa bởi số lượng quá ít. Vì vậy, cứ thêm external libraries thẳng vào project của mình luôn. Một tool dù có tốt đến mấy nhưng nếu bạn không cần chúng thì cũng vứt đi thôi.

Để Layout trong code thay vì Storyboard

Storyboard có thể khá hữu ít cho những bạn coder còn non tay, tuy nhiên khi bạn bắt đầu phải lập trình những app phức tạp, project lớn đòi hỏi layout rõ ràng thì storyboard trở nên vô dụng hẳn. Vì thế sao ta lại không dùng Layout ngay từ bắt đầu. Tôi đã chứng kiến nhiều project có hẳn một bảng storyboard đồ sộ nhưng thật chất lại trống rỗng. Chưa kể nếu bạn xài auto layout thì nó lại rất phiền phức. Vì thế, tôi khuyên bạn hãy cố gắng đặt hết logic vào layout trong code thay vì nhờ tới storyboard hoặc auto layout. Nó cực kì đơn giản mà lại rất linh hoạt.

Core Data sẽ giúp mọi thứ dễ dàng hơn

Khi mới bước vào thế giới lập trình của iOS, phần lớn các bạn luôn tránh xa Core Data. Bởi nó phức tạp, cần rất nhiều chuẩn bị cũng như không cuốn hút đối với người mới. Đến cả tôi còn bị fail, bỏ dở giữa chừng. Mãi cho đến khi tình cờ đọc được một bài viết rất hay thì tôi mới tập dùng lại Core Data. Cuối cùng mọi thứ cũng trở nên rõ ràng, Core Data thật sự là cách tốt nhất để làm việc với Data trên iOS. Không chỉ nó vô cùng mạnh mẽ, Core Data còn giải quyết được nhiều vấn đề như persistence và data change propagation vốn tồn tại trong mọi ứng dụng.

Nếu bạn làm theo những gì tôi nói thì tin rằng quá trình phát triển project của bạn sẽ được cải thiện đáng kể. Hãy giữ mọi thứ luôn đơn giản hết mức có thể.

Nguồn: blog.topdev.vn via hackermoon

 

Top 7 JavaScript Frameworks

Infographic đơn giản, dễ hiểu tóm lược lại 7 Javascript frameworks nổi tiếng đang được cộng đồng ưa chuộng nhất.

Nguồn: blog.topdev.vn via hackernoon

Bill Gates và Mark Zuckerberg lo lắng trước sự phát triển của máy móc và AI

Mark Zuckerberg và Bill Gates là những người đã xây nên 2 công ty công nghệ trị giá hàng tỉ dollar, dù ở hai lĩnh vực khá khác nhau nhưng cả hai đều có cùng quan điểm về tình hình việc làm ở Mỹ vốn đang rất khó khăn.

Tại buỗi lễ trao bằng ở trường đại học Harvard thứ năm vừa rồi, ông chủ của Facebook, Zuckerberg, có bài phát biểu đầy mạnh mẽ về thực tại việc làm trong năm 2017, “Thế hệ của chúng ta sẽ phải đối mặt với việc hơn 10 triệu việc làm sẽ bị thay thế bởi máy móc như xe tự lái” – ông nói – “Khi ba mẹ chúng ta tốt nghiệp, việc làm luôn có sẵn. Nhưng ngày nay, công nghệ và máy móc đang loại bỏ khá nhiều việc làm. Nhiều người bị mất vị thế trong xã hội. Chúng ta cảm thấy bị mất kết nối, lạc lõng”

Gate, nhà sáng lập nên Microsoft, trong đầu tháng này, cũng truyền tải một thông điệp tương tự. Ông dí dỏm nói rằng mình không muốn bị cho là như nhân vật Benjamin Braddock (Dustin Hoffman) vốn rất nổi tiếng bởi lời thoại “Tôi chỉ muốn nói với anh một từ thôi. Chỉ duy nhất một từ….Nhựa”.  Và ngày hôm  nay?  từ đó là “robot”. Ông tuyên bố trên tài khoản Twitter với 34.8 triệu follower rằng trí thông minh nhân tạo sẽ thay đổi tất cả. Nói cách khác, sau lại không hòa nhịp cùng sự thay đổi? Dù sao đi nữa, đó cũng chính là điều mà Zuckerberg và Gates đã làm với mạng xã hội và computer software.

Tháng 2 vừa rồi, Gate chia sẻ với Quartz rằng robot sẽ giúp giải phóng một lượng lao động “cũng như cho họ có cơ hội tập trung vào những công việc như chăm sóc người già, dạy học sinh, giúp đỡ trẻ em có hoàn cảnh đặc biệt. Những công việc đòi hỏi tình cảm và sự quan tâm của con người, vốn không có máy móc nào làm được” – Gate nói rằng cách mà chúng ta có thể kiểm soát nguy cơ nỗi dậy của robot – “Hãy chỉ để chúng thực hiện những công việc đòi hỏi máy móc và con người tập trung vào những công việc đòi hỏi trí tuệ và tình cảm”.

Zuckerberg cũng nhấn mạnh việc tìm kiếm những công việc có ý nghĩa trong thời đại kinh tế tự động hóa. “Các bạn sẽ tốt nghiệp và bước vào một thế giới đòi hỏi ta phải có mục tiêu. Và nó hoàn tùy thuộc vào chính bạn” – ông nói – “Bắt đầu với những project lớn có ý nghĩa là cách chúng ta tồn tại trong thế giới này. Tiếp theo đó, là sự bình đẳng để mọi người đều có cơ hội để được theo đuổi mục tiêu của họ” – Zuckerberg cho rằng những bạn trẻ sẽ cần phải tự tạo ra con đường cho chính mình nhưng đồng thời xã hội cũng cho phép họ sự tự do để được thất bại để có thể thành công.

Zuckerberg và Gate đều không hề sai. Các chuyên gia nhận định rằng Robots sẽ tạo ra hơn 15 triệu lượng lao động tại U.S trong vòng 10 năm tiếp theo, nhờ vào sự phát triển của trí thông minh nhân tạo và công nghệ tự động hóa. Nói cách khác, Robot sẽ chiếm 10% lực lượng lao động. Điều đáng lo ở đây là nó cũng khiến cho ta mất đi 10% việc làm dành cho nhân sự. Và điều này đánh dấu bởi sự ảnh hưởng của công nghệ tương tự như khi chiếc máy tính đầu tiên được tung ra thị trường. Các chuyên gia còn dự đoán rằng sau 50 năm nữa, robot và máy tính sẽ thay thế con người làm gần như mọi việc. Không những thế, cuộc khảo sát do Pew Research Center tổ chức chỉ ra rằng 38% số lượng việc làm tại US sẽ bị thay thế bằng máy móc tự động hóa.

Đối với những người không muốn làm những nghề có liên quan tới máy móc, AI thì có thể chọn những sự nghiệp như họa sĩ, thầy giáo, bác sĩ, HR. Ngoài ra, các ngành liên quan đến sửa chữa như thợ mộc, thợ điện, sửa ống nước cũng sẽ không bị thay thế.

Tuy vậy, đối với những việc làm lương thấp thì khả năng bị thay thế bởi máy móc rất cao. Do đó, việc có học thức ngày càng quan trọng. Theo Marketwatch, khả năng bị thay thế đối với những việc làm với mức lương $20/giờ cao tới 83%. Trong khi tỉ lệ này chỉ đạt 31% với việc làm $30/giờ và dưới 4% với những việc được trả trên $40/giờ.

Gates cũng tin rằng các ngành nghề liên quan tới sinh học và năng lượng sẽ khá có tiềm năng. Nghành công nghiệp năng lượng cung cấp hơn 6.4 triệu việc làm cho người Mĩ. Ngoài ra, các ngành liên quan tới sinh học cũng phát triển tốt với hơn 10% mức tăng trưởng mỗi năm và hơn 1.7 triệu nhân viên.

Zuckerberg cũng đưa ra lời khuyên dành cho các bạn entrepreneur và startup company – “ Tôi sẽ nói cho bạn biết một bí mật. Chả ai biết được mình sẽ làm như thế nào khi mới bắt đầu cả. Mọi ý tưởng thường chỉ hé lộ một phần của nó. Và chúng chỉ sáng tỏ ra khi bạn bắt tay vào làm. Vì thế hãy cứ làm đi” – Ông nói – “Nếu mà tôi cần phải hiểu rõ hết mọi thứ trước khi bắt đầu thì Facebook sẽ không bao giờ tồn tại. Hình ảnh hào nhoáng trên báo chí và phim ảnh không hề đúng. Chúng rất nguy hiểm bởi khiến cho chúng ta cảm thấy tự ti và sợ hãi do không có ý tưởng hay được như vậy. Tệ hơn, là còn làm ta chùng bước để bắt đầu một project”.

Nguồn: blog.topdev.vn via Marketwatch

8 npm mẹo cực hay để gây ấn tượng với đồng nghiệp

npm là gì

Khi bạn thấy 1 đồng nghiệp code bằng chiêu trò mà bạn không hề hay biết. Lúc đó chắc chắn bạn sẽ thấy nó thật ngầu như một thiên tài.

Trong bài viết ngắn này chúng tôi sẽ chỉ cho bạn một số trick của npm. Tất nhiên là có rất nhiều thủ pháp khác nhau, nhưng tôi sẽ chỉ tập trung vào những cái hay và liên quan nhất cho việc code hằng ngày của chúng ta.

Những trick rút gọn cơ bản

Để bắt đầu, đặc biệt là với các bạn mới làm quen với npm, chúng ta sẽ cũng điểm lại một số thủ pháp rút gọn cơ bản nhưng khá là hữu ích.

Cài đặt một Package

Bình thường: npm install pkg => Rút gọn:npm i pkg.

Cài đặt Global:

Bình thường: npm i --global pkg => Rút gọn: npm i -g pkg.

Cài đặt một Package và lưu trữ nó như một Dependency:

Bình thường: npm i --save pkg => Rút gọn: npm i -S pkg

Cài đặt một Package và lưu trữ nó như một devDependency:

Bình thường: npm i --save-dev pkg => Rút gọn: npm i -D pkg.

Để biết thêm những trick rút gọn cơ bản, các bạn có thể vào đây xem.

Giờ thì tới phần hấp dẫn hơn

Initializing một Package mới

Chúng ta hẳn đều đã biết rõ về npm init, lệnh code đầu tiên khi ta muốn tạo ra một Package mới.

Tuy nhiên, với cả đống câu hỏi được đặt ra mà không sớm thì muộn chúng ta cũng sẽ chỉnh sửa thay đổi nó, thế thì sao không bỏ qua luôn?

npm init -ynpm init -f chính là câu trả lời

Running tests

Một command  khác mà chúng ta đều dùng là npm test

Bạn sẽ nghĩ sao nếu tôi có cách để rút ngắn nó đi khoảng 40% mà vẫn chạy tốt? Thử nghĩ xem số lượng thời gian bạn tiết kiệm được nhiều đến thế nào.

npm t chính là cứu cánh của bạn

Liệt kê List available scripts

Khi bắt đầu với một project mới chúng ta luôn tự hỏi phải xuất phát từ đầu. Những câu hỏi thường thấy như: Ta chạy nó như thế nào? Những script nào thì available?

Phương pháp phổ biến là mở package.json file và kiểm tra section scripts

Tất nhiên, phương pháp tốt hơn (ngắn hơn) là dùng npm run để xem list của tất cả các script available.

Một lựa chọn khác là cài đặt ntl (npm i -g ntl), và sau đó chạy ntl trong thư mục chứa project. Nó đồng thời cũng cho phép chạy script, vốn rất tiện lợi.

Liệt kê ra list installed packages

Tương tự như available script, đôi khi chúng ta tự hỏi ta có những dependency nào trong project của mình.

Tất nhiên là bình thường thì sẽ phải vào package.json file để check nhưng chúng ta đều đã biết rằng có phương pháp tốt hơn.  

Chúc mừng bạn đã gặp npm ls --depth 0.

Với các list của globally-installed package, ta vẫn sẽ dùng giống như trên nhưng thêm -g vào, npm ls -g --depth 0.

Chạy các locally-installed executable

Khi cài đặt một package vào trong project của mình, nó luôn kèm theo một executable, nhưng nó chỉ hoạt động khi ta dùng thông qua một npm script. Tại sao ư?

Đó là bởi vì khi thi hành một command trong terminal, nó sẽ tìm kiếm executable có cùng tên từ tất cả các path thuộc PATH environment variable. Đó là vì sao Locally-installed package đăng kí các executable vào một nơi khác chứ không phải trên PATH nên sẽ không bị tìm thấy.

Vậy nó hoạt động như thế nào khi ta dùng npm script để chạy executable? Đó là vì npm tạo ra thêm một folder vào PATH , <project-directory>/node_modules/.bin.

Bạn có thể dùng npm run env | grep "$PATH"hoặc npm run env để xem tất cả available environment variable.

node_modules/.bin, chính là nơi locally-installed package lưu trữ của executable.

Thử chạy ./node_modules/.bin/mocha trong project’s directory để xem nó hoạt động ra sao.

Đơn giản đúng không? Cứ dùng  ./node_modules/.bin/<command> khi bạn muốn chạy một locally-installed executable.

Tìm ra Package của bạn trên internet

Bạn có bao giờ tự hỏi rằng repository entry trong package.json file để làm gì không?

Hãy thử chạy npm repo  và xem nó hoạt động như thế nào trong trình duyệt web.

Cũng tương tự vậy đối với npm home cho homepage.

Nếu bạn muốn mở Package page trên npmjs.com, thi hãy dùng npm docs.

Chạy script trước và sau một script khác

Hẳn bạn đã  quá quen thuộc với pretest, với nhiệm vụ sàng lọc code trước khi chạy test script.

Nhưng bạn sẽ rất ngạc nhiên khi biết rằng bạn có thể có pre và post scripts cho mọi script.

Nó cực kì hữu dụng cho các project mà bạn dùng npm làm build tool chính cũng như khi cần phải sắp xếp một lượng lớn script.

Bumping package’s version

Bạn có một package, bạn sẽ dùng semver  cho versioning, và bạn cần bump phiên bản đó trước khi một bản release mới được tung ra.

Cách thủ công là vào package.json file và sửa bằng tay, nhưng chẳng ai có dư thời gian cả.

Thay vào đó hãy dùng npm version với major, minor hoặc patch.

Lời kết

Hi vọng qua bài viết này, các bạn đã có thể code tốt hơn cũng như gây ấn tượng với đám bạn.

Nguồn: blog.topdev.vn via Medium

Bí quyết sử dụng “Immutability” để code gọn và sạch hơn

Immutability – sự nhất quán là một trong những yếu tố quan trọng nhất của lập trình. Nó cho phép cho bạn viết code gọn và dễ dàng mà lại an toàn hơn. Tôi sẽ chỉ cho bạn cách để ta có được Immutability qua một số ví dụ trong Javascript sau.

Theo nguồn của Wikipedia

Immutable object (object không thay đổi) ám chỉ các object không thể bị đổi state sau khi nó đã được tạo ra. Điều hoàn toàn trái ngược so với mutable object (object có thể thay đổi) vốn cho phép ta được thoải mái thay state của nó. Trong một số trường hợp, object vẫn được cho là Immutable mặc dù một số thuộc tính bên trong đã thay đổi nhưng state của object vẫn không khác gì so với cũ.

Immutable Array

Để hiểu rõ về bản chất hoạt động immutability thì ta nên bắt đầu với Array.

const arrayA = [1, 2, 3];
arrayA.push(4);
 
const arrayB = arrayA;
arrayB.push(5);
 
console.log(arrayA); // [1, 2, 3, 4, 5]
console.log(arrayB); // [1, 2, 3, 4, 5]

Trong ví dụ trên, arrayB được xem là dựa trên arrayA, do đó phương thức “Push” sẽ tự động thêm vào giá trị 5 vào cả 2 variable. Tuy nhiên, lúc đó Code của ta cũng sẽ tự thay đổi các giá trị khác một cách gián tiếp, vốn là điều mà bạn không muốn. Bởi nó hoàn toàn trái ngược với immutability.

Vậy ta có thể biến chúng thành Immutable Array bằng slice function, và lúc này code sẽ hành xử theo một cách khác.

const arrayA = [1, 2, 3];
arrayA.push(4);
 
const arrayB = arrayA.slice(0);
arrayB.push(5);
 
console.log(arrayA); // [1, 2, 3, 4]
console.log(arrayB); // [1, 2, 3, 4, 5]

Đây là điều mà chúng ta muốn. Code không tự ý thay đổi các giá trị khác.

Note: Khi sử dụng Push để thêm một giá trị vào array bất kì, bạn đang làm biến đổi chính array đó và khiến phát sinh ra những hiệu ứng (side effect) mà ta không muốn. Lúc đó, bạn cần sử dụng slice function để trả về một phiên bản copy của đoạn array trên.

Function

Giờ thì bạn đã biết cách tránh việc thay đổi các giá trị ngoài ý muốn. Nhưng làm cách nào để tạo ra một function “pure” – không có bất kì side effect nào cũng như state không bị thay đổi.

Giờ ta thử áp dụng cách thức trên, nhưng thay vì cho array thì giờ là function. Đầu tiên ta cần function có khả năng tự ý gây biến đổi giá trị.

const add = (arrayInput, value) => {
  arrayInput.push(value);
 
  return arrayInput;
};
const array = [1, 2, 3];
 
console.log(add(array, 4)); // [1, 2, 3, 4]
console.log(add(array, 5)); // [1, 2, 3, 4, 5]

 

Một lần nữa, bởi do các giá trị Input bị thay đổi khiến cho funtion mới được tạo ra ngoài ý muốn. Trong lập trình, chúng ta có một qui luật vàng đó là: mỗi lần thêm vào function, nó sẽ làm biến đổi array variable và kết quả tạo ra một thứ hoàn toàn khác.

Vậy thì ta có thể làm như sau

const add = (arrayInput, value) => {
  const copiedArray = arrayInput.slice(0);
  copiedArray.push(value);
 
  return copiedArray;
};
 
const array = [1, 2, 3];
const resultA = add(array, 4);
console.log(resultA); // [1, 2, 3, 4]
const resultB = add(array, 5);
console.log(resultB); // [1, 2, 3, 5]

 

Giờ thì ta có thể call function nhiều lần liên tiếp, và kết quả đưa ra luôn giống nhau nếu input không đổi. Đó là bởi vì array đã không còn bị tự ý biến đổi và kết quả là một function thuần khuyết (pure function).

Bạn có thể dùng spread syntax, trong ES6, để làm ngắn gọn function trên.

const add = (arrayInput, value) => […arrayInput, value];

 

Concurrency

App của NodeJS sử dụng một khái niệm gọi là concurrency (đồng thời). Một concurrent operation có nghĩa là 2 phép tính kết hợp nhưng đều có khả năng tự hoàn thành quá trình được đặt cho chúng. Nói cách khác khi có 2 mục tiêu A và B, thì phép tính cho B không cần đợi phép tính A hoàn thành mà tự chạy luôn.

 

NodeJS khiến concurrency xảy ra là nhờ vào event-loop. Event loop sẽ liên tục lặp lại một event và kích hoạt bất kì các trình xử lí event. Cách thức hoạt động trên cho phép một app của NodeJS giải quyết lượng lớn các yêu cầu đến từ các người dùng. Nếu bạn muốn hiểu thêm thì hãy vào đây.

Nhiều bạn khi đọc đến đây sẽ thắc mắc rằng immutability có liên quan gì concurrency? Đó là do nhiều operation có khả năng thay đổi giá trị nằm ngoài tầm ảnh hưởng của function bằng cách của concurrent. Khiển cho output trở nên thiếu chính xác cũng như kết quả ngoài ý muốn. Vì thế hãy cẩn thận đối với các function có khả năng làm biến đổi giá trị ở ngoài phạm vi của chúng bởi nó khá là nguy hiểm.

Bước tiếp theo

Immutability là một khái niệm quan trọng mà bạn cần phải hiểu để học về lập trình. Vì thế mà tôi khuyến khích bạn đọc thêm bài ImmutableJS, của các delopver tại Facebook, về library chứa cấu trúc immutable data như Map, Set,List

Nguồn: blog.topdev.vn via Medium

Dấu ấn Vietnam Mobile Day tại Hà Nội

Dấu ấn Vietnam Mobile Day tại Hà Nội

Sáng ngày 27/05, sự kiện Vietnam Mobile Day tiếp tục hành trình lan tỏa sứ mệnh kết nối và chia sẻ giá trị kiến thức đến cộng đồng Hà Nội. Hơn 4000 nhà phát triển, chuyên gia truyền thông, đại diện các Tech startup… đã đắm chìm trong không gian Công nghệ – Mobile đa sắc màu suốt 8 tiếng đồng hồ với gần 50 chuyên đề và diễn giả cùng hàng chục gian hàng triễn lãm kết hợp nhiều hoạt động thú vị thu hút sự quan tâm của người tham dự.

Dấu ấn Vietnam Mobile Day tại Hà Nội

Dấu ấn của Cuộc Cách Mạng Công Nghệ 4.0

Như thường lệ, Vietnam Mobile Day luôn mở màn với các nội dung mang tính định hướng, dự báo bức tranh tương lai, cung cấp số liệu toàn ngành nhằm hỗ trợ cá nhân, doanh nghiệp định hướng công việc của bản thân và hoạt động kinh doanh chung.

Năm nay, Phiên Khai Mạc ghi đậm dấu ấn của các bài tham luận liên quan sức ảnh hưởng của thiết bị di động nói chung và Cuộc Cách Mạng Công Nghệ 4.0 nói riêng do chính những đại diện đến từ các tập đoàn công nghệ lớn của thế giới chia sẻ.

Theo chị Đặng Thúy Hà – Nielsen Việt Nam, điện thoại di động đang thay đổi sâu rộng ngành Thương mại điện tử tại Việt Nam. Điều này xuất phát từ những nguyên nhân cụ thể như: người dùng Việt là người tiêu dùng kết nối có thời gian online nằm trong top 3 khu vực, thường xuyên sử dụng điện thoại để tìm hiểu sản phẩm (79%), xem xét phản hồi về sản phẩm (75%), so sánh giá cả (63%).

Lúc này, vai trò đặt lên vai doanh nghiệp là phải áp dụng được các chuyển đổi về công nghệ số như chính anh Huỳnh Bảo Toàn – Microsoft Việt Nam đã chia sẻ là System of Intelligence với bốn khía cạnh chính xoay quanh Transform your products, Optimize your operations, Empower your employees và Engage your customer.

Bên cạnh đó, BTC còn dành riêng thời gian buổi chiều của khán phòng A để bao phủ các nội dung về AI – Trí thông minh nhân tạo và IoT – Internet of Things, tiêu biểu là những ứng dụng demo của AI trong gia đình, văn phòng thông minh, hệ sinh thái của Amazon và Google cũng như trong ngành Logistics, chế tạo Robot.

Phát triển ứng dụng nhanh hơn – Truyền thông ứng dụng hiệu quả hơn

Vốn là “đặc sản” tạo nên thương hiệu Vietnam Mobile Day, năm nay các chủ đề chuyên sâu về lập trình được chia sẻ tại Hà Nội đa phần tập trung vào xu hướng phát triển Đa nền tảng với những ưu điểm không thể phủ nhận về chi phí, thời gian và nguồn lực. Tiêu biểu có thể kể đến những chủ đề như Lập trình app sử dụng React Native, so với Android/ iOS, Phát triển ứng dụng di động với Xamarin, Serverless Design Patterns and Best Practices, Mobile backend as a serive (MBaaS), Kinh nghiệm tối ưu trải nghiệm người dùng trên Mobile tại thegioididong.com...

Đặc biệt, khi khâu truyền thông ứng dụng được đánh giá là có tầm quan trọng bậc nhất trước thực trạng thị trường ứng dụng đang có dấu hiệu bão hòa, các chuyên gia đã không ngần ngại đúc kết bí kíp từ quá trình làm việc của mình trong hàng loạt các chủ đề như: Các bước xây dựng kế hoạch truyền thông cho 1 ứng dụng di động, 5 yếu tố ảnh hưởng đến doanh thu quảng cáo của ứng dụng, Tối ưu hiệu quả chiến dịch Marketing/quảng cáo trên di động, Killer feature sẽ làm cho ứng dụng của bạn trở nên khác biệt…

Hỗ trợ startup – Sứ mệnh tự hào của Vietnam Mobile Day 2017

Bên cạnh các gian hàng triển lãm hỗ trợ Tech startup giới thiệu sản phẩm, giao lưu mở rộng mối quan hệ hợp tác thì mảng nội dung của Vietnam Mobile cũng chú trọng vào bài học kinh nghiệm đặc thù riêng cho startup như:  Kinh nghiệm làm mobile và những bài học thất bại: Từ R&D tới Production và Business, Cách build Youtube viral channel/ viral content cho start up, Triết lý “Zero Cost” marketing cho startup, Phát triển sản phẩm Mobile App theo mô hình Lean Startup trong xu hướng phát triển IT hiện nay, Câu chuyện về một dự án thất bại…

Dấu ấn Vietnam Mobile Day tại Hà Nội

Chẳng hạn, với mô hình Lean Startup với mục tiêu tinh gọn quy trình phát triển sản phẩm, anh Nguyễn Trung Thành của tập đoàn VNG cho rằng các startup có thể tiết kiệm chi phí và giảm thiểu rủi ro bằng cách vận dụng 5 phương pháp cốt lõi từ mô hình này là:

  • Minium Viable Product (MVP) – đưa ra các phiên bản sản phẩm với chi phí tối thiểu nhưng nhận được phản hồi có giá trị cao từ user, dùng các kiểm nghiệm ý tưởng
  • Continuous Deployment: đưa các phiên bản càng nhanh càng tốt đến người dùng, giảm vòng đời phát triển ứng dụng
  • Actionable Metrics: sử dụng các công cụ tracking để quyết định về sản phẩm
  • Pivot: liên tục thay đổi, không giới hạn về chức năng và ý tưởng
  • Build – Measure – Learn: quy trình Ideas – Build – Products – Measure – Data – Learn
  • Dấu ấn Vietnam Mobile Day tại Hà Nội

Có thể nói, với sự hỗ trợ hợp tác của các đơn vị VECOM, MasterCard, Mobifone, FTC Verisign, Ví Việt, PA Việt Nam, Hiệp Hội Internet Việt Nam, Appota, Gear Inc, VietGuys, FPT Telecom, NganLuong.vn, Vietnam Mobile Day  đã để lại những dấu ấn không thể quên, đem đến những kiến thức bổ ích, những giá trị vô hình và hữu hình cho cộng đồng Mobile tại Hà Nội.

Đừng quên cuộc “hạ màn” đáng mong đợi của Vietnam Mobile Day 2017 tại Tp. Đà Nẵng vào ngày 03/06 tới nhé!

Thời gian & địa điểm: 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: http://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

Cải thiện hiệu năng cho JavaScript Web Application chỉ trong vòng vài bước đơn giản

JavaScript là một trong những ngôn ngữ lập trình phổ biến nhất thế giới. Được sử dụng cho web pages, software, mobile apps, ứng dụng trong console, etc.

JavaScript hiện diện ở khắp mọi nơi. Tuy nhiên, có nhiều ứng dụng sử dụng JavaScript gặp vấn đề về hiệu năng. Và trong bài viết hôm nay, chúng ta sẽ nói về cách tối ưu hóa các ứng dụng JavaScript.

Throttling & Debounce

Khi ta thêm event listener cho những hành động của user như scrolling, chúng ta thường bỏ qua một điều là listener sẽ tự hoạt động khi event được kích hoạt. Điều này có khả năng dẫn đến hiện tượng “nghẽn cổ chai” đối với các ứng dụng của Javascript.

Lấy scroll event làm ví dụ, khi chúng ta làm như sau:

function scrollHandler() {
    return console.log('yippeeeee');
}

window.addEventListener('scroll', scrollHandler());

Mỗi lần user scroll, “yippeeeee” sẽ logged vào console.

Cũng không có gì đáng lo đúng không? Nhưng đối với level hoạt động cao hơn như kiểm tra element trong viewport để ta có thể tạo animate, thì nó sẽ khá tốn kém memory cũng như thời gian xử lý chậm hơn.

Một cách đơn giản để sửa vấn đề trên là dùng debounce hoặc throttle trong function scrollHandle.

Nghe có vẻ phức tạp, nhưng:

Debouncing bảo đảm một function sẽ không bị gọi lại sau một khoảng thời gian.

Trong khi

Throttling giới hạn số lần gọi tối đa cho một junction trong một khoảng thời gian nhất định.

Như vậy, với ví dụ trên về scrolling, chúng ta sẽ debounce nhờ vào Lodash:

window.addEventListener('scroll', _.debounce(scrollHandler, 300));

// or

window.addEventListener('scroll', _.throttle(scrollHandler, 300));

Ngoài ra, tôi cũng khuyến khích bạn sử dụng library Underscore. Tất nhiên là bạn hoàn toàn có thể sử dụng một trong hai library ở trên hoặc là cứ lấy đoạn code function từ codebase mà dùng cho ứng dụng của mình.

Chuyển qua HTTP/2 và đừng Bundle

Trong khi HTTP/2 đang ngày càng phát triển và được biết đến nhiều hơn, thì việc kết hợp các JavaScript files thành một bundle lớn đã không còn cần thiết nữa.

HTTP/2 có chức năng của một multiplexed – nói cách khác nó được tạo ra để có thể thực hiện và quản lí nhiều file request cùng một lúc. HTTP/2 sử dụng chỉ một TCP connection để request nhiều file, không như HTTP/1 khi ta bắt buộc phải chia connection ra cho từng request riêng biệt. Nhờ đó mà HTTP/2 có tốc độ xử lý nhanh hơn hẳn.

Như vậy, việc đưa ra nhiều file lại là một việc khá tốt nếu bạn sử dụng HTTP/2. Tất nhiên là đừng quá nhiều (tham thì thâm mà).

Lược bỏ những thứ dư thừa

Nếu bạn sử dụng NPM để cài đặt các dependencies, thì hẳn bạn cũng nhận ra build file của mình chứa đầy rác. Theo như Guy Fieri đã nói, bạn sẽ không ngờ được file của mình nó chứa nhiều thứ vớ vẩn đến không ngờ.

Vì thế, thay vì phải thêm cả một lượng dữ liệu ngang với database chỉ để dùng một phần của chúng. Hãy lấy Lodash làm ví dụ, nó có rất nhiều function mà chúng ta có thể sẽ dùng tới, thay vì cứ giữ tất cả mọi thứ mà user có thể sẽ cần tới, thế thì tại sao không yêu cầu những gì chúng muốn.

Như thế này đây:

// Load the full build.
var _ = require('lodash');

// Load only the array helper.
var arr = require('lodash/array');

// Load only the debounce function.
var debounce = require('lodash/debounce');

Làm như trên sẽ giúp bạn giảm kích cỡ của file cũng như giúp tốc độc xử lí nhanh hơn.

Minify – Giảm thiểu

Là một trong những kĩ thuật tối ưu hóa trong Javascript được mọi người bàn tán nhất

Minification ám chỉ việc ta rút bỏ những yếu tố không cần thiết  và tính năng cồng kềnh trong Javascript Source.

Những yếu tố này bao gồm comments, semi-colons, whitespace etc. Ngoài ra giảm thiểu sự cồng kềnh bằng rút ngắn function và tên variable, giảm thiểu đồ dài của if-else và các thuật toán khác.

Với sự giúp đỡ của các tool như UglifyJs, Google Closure compiler hoặc online tools như JS Compress, JS minifier, việc sử dụng minify sẽ trở nên vô cùng dễ dàng.

Async & Defer

async và defer là hai attributes chúng ta có thể thêm vào script tags để giúp chúng load chạy không đồng bộ đến các page hoặc hoãn lại cho đến khi page đã load hết.

Lưu ý rằng async hoặc defer không block DOM khỏi rendering, và giúp cho ứng dụng chạy nhanh hơn

<!-- load meh.js asynchronously to the page -->
<script source="meh.js" async></script>

<!-- load meh.js after the page has loaded -->
<script source="meh.js" defer></script>

Recycle/Reduce the Dom

Các bạn có thấy rằng Facebook, Twitter, Instagram, 9gag và nhiều trang website khác có tính năng scrolling vô hạn không. Tuy nhiên, scrolling vô hạn sẽ khiến cho việc thêm

vào content nặng cho DOM, thì ta sẽ phải cần query nhiều yếu tố nữa.  Như vậy nó sẽ khiến hiệu năng bị giảm và ảnh hưởng tới tốc độ xử lí cũng như load của trình duyệt web bởi quá ăn RAM (tốn nhiều memory)

9gag có cách giải quyết vấn đề trên khá là hay. Sau khi user đã đọc được một số lượng meme nhất định, 9gags sẽ đưa ra một nút để bạn dùng để dọn đi những meme bạn đã đọc. Nếu bạn nhấn vào thì có thể thấy các meme trước đó sẽ bị xóa để những meme mới hiện ra và nhờ đó tốc độ load xử lý được cải thiện.

Cách giải quyết của 9gag rất tốt, nhưng bạn cũng có thể làm cách khác là tái chế lại các yếu tố của DOM. Nói cách khác, sau khi các yếu tố liên quan tới hiển thị hoàn thành nhiệm vụ thì sẽ được tái chế lại như ví dụ dưới đây:

requestAnimationFrame

Nhiều người cho rằng JavaScript animation khá chậm. Sự thật là nó chỉ chậm khi được lập trình một cách sơ sài. Nhưng ta có thể cải thiện điều đó.

Với requestAnimationFrame, chúng ta chỉnh định trình duyệt web gọi một function để render một frame. So với setTimeout, tốc độ được cải thiện nhiều lần nhờ vào việc kích hoạt GPU để có thể render hình ảnh nhanh nhất có thể.

var start = null;
var element = document.getElementById('SomeElementYouWantToAnimate');
element.style.position = 'absolute';

// Takes in the timestamp of the current frame
function step(timestamp) {
    if (!start) start = timestamp;

    // calculate total time passed
    var progress = timestamp - start;

    // get the number of pixels the element should move every frame
    element.style.left = Math.min(progress / 10, 200) + 'px';

    // only animate if time passed is lesser than 2000ms or 2 seconds
    if (progress < 2000) {
        window.requestAnimationFrame(step);
    }
}

window.requestAnimationFrame(step);

Xem thêm các tin đăng tuyển dụng lập trình viên javascript trên TopDev

Nhìn thì có vẻ khá rắc rối chỉ để cho một animation đơn giản. Tuy nhiên nhờ vào các JavaScript libraries như Anime.js, Gsap mà công việc trên trở nên thật dễ dàng.

Dùng ở chế độ Offline

Một trong những tính năng của JavaScript service worker là cache file để dùng khi bạn offline. Hơn nữa, các file không chỉ cached để dùng lúc không có mạng mà còn có thể dùng nếu có mạng kết nối lại. Nhờ đó, ứng dụng có thể bỏ qua bước request JavaScript file mà lấy thẳng từ cache của nó vốn sẽ nhanh hơn nhiều lần so với lấy từ server.

Hãy dùng tới Promises

JavaScript promises sử dụng một API để miêu tả code và là một native function, chúng có khả năng tinh chỉnh và nên được dùng thường xuyên. Mặc khác, promises còn là asychronous (không đồng bộ), nên nó không bị block và sẽ cải thiện tốc độ xử lí cho ứng dụng.

Hãy dùng profiler cho code của bạn

Chrome developer tool cực kì mạnh mẽ với nhiều tool khác nhau. Ngoài console, DOM inspector, nó còn có cả profiler.

Còn được gọi là “Memory Panel”, profiler sẽ check và chạy nhiều bài test trên ứng dụng web của bạn để kiểm tra có bị memory leak (thất thoát bộ nhớ) không. Trong trường hợp có xảy ra, profiler sẽ phân tích và hiển thị trong một bản đồ thị, cho bạn biết ứng dụng có bị hiện tượng nghẽn cổ chai và memory leak hay không.

Lời kết

Tôi tin rằng nếu bạn làm theo những cách trên thì ứng dụng Javascript của bạn sẽ nhanh hơn hẳn. Và với sự phát triển của ngôn ngữ lập trình này, tin rằng vẫn có nhiều cách nữa mà bạn sẽ khám phá trong tương lai.

Nguồn: blog.topdev.vn via Scotch

Tuyển dụng IT lương cao, xem ngay trên TopDev

Top 25 công ty Mĩ nhiều người mơ ước được vào làm

Bạn có thường hay tự hỏi rằng mọi người muốn làm việc cho công ty nào nhất?

LinkedIn nắm trong tay câu trả lời cho câu hỏi trên dựa trên kết quả từ báo cáo từ cuộc khảo sát top các công ty 2017.

Nhờ vào thông tin thu thập được từ hơn 500 triệu thành viên, LinkedIn xếp hạng 50 công ty được người dân ở Mỹ mơ ước được vào làm. Bảng xếp hạng dựa trên những yếu tố như mức độ nổi tiếng, lương, chất lượng làm việc và các chính sách cho nhân viên. Bạn có thể xem thêm tại đây.

Các công ty góp mặt trong bảng xếp hạng đến từ nhiều lĩnh vực khác nhau, bao gồm các ông lớn công nghệ cho đến ngân hàng, media.

Sau đây là top 25 công ty được mọi người mong muốn vào làm nhất:

Capital One

Thành lập tại Tysons Corner, Virginia. Capital One là công ty cổ phần ngân hàng.

Số nhân viên toàn cầu: 47,300

Adobe

Là công ty phần mềm với chính nhánh chính đặt tại San Jose, California.

Số nhân viên toàn cầu: 16,500

Stryker

Được thành lập vào 1946, Stryker nằm ở lĩnh vực công nghệ y tế.

Số nhân viên toàn cầu: 33,000

BlackRock

BlackRock là công ty quản lý đầu tư toàn cầu, được thành lập vào 1988

Số nhân viên toàn cầu: 13000

JLL

JLL là một công ty về bất động sản với chi nhánh “mẹ” nằm tại Chicago, Illinois.

Số nhân viên toàn cầu: 77000

JPMorgan Chase & Co.

JPMorgan Chase & Co. là ngân hàng lớn thứ sáu trên toàn thế giới, xét về mặt tài sản

Tổng số nhân viên toàn cầu: 240000

Visa

Được thành lập vào 1958 với cái tên là BankAmericard, Visa là một công ty về dịch vụ tài chính.

Tổng số nhân viên toàn cầu: 14000

CBRE

Trụ sở chính tại LA, California, CBRE được biết đến từ các hoạt động bất động sản thương mại của công ty.

Tổng số nhân viên toàn cầu: 75000

Twitter

Mạng xã hội Twitter xuất hiện vào năm 2006

Tổng số nhân viên toàn cầu: 3500

Under Armour

Under Armour, chi nhánh tại Baltimore, Maryland, là một công ty chuyên sản xuất đồ thể thao.

Tổng số nhân viên toàn cầu: 14000

Workday

Được thành lập từ 2005, Workday là nhà cung cấp dịch vụ tài chính đám mây với trụ sở đặt tại Pleasanton, California.

Tổng số nhân viên toàn cầu: 6600

Dell Technologies

Nằm tại Round Rock, Texas, Dell chuyên phát triển, bán và cung cấp dịch vụ hỗ trợ cho máy tính cá nhân.

Tổng số nhân viên toàn cầu: 145000

McKinsey & Co.

Là một công ty có chi nhánh “mẹ” tại thành phồ NewYork, chuyên cung cấp dịch vụ tư vấn quản lí với các bản báo cáo, phân tích.

Tổng số nhân viên: 25000

Netflix

Thành lập vào 1997 tại Scotts Valley, California, Netflix là công ty về dịch vụ giải trí.

Tổng số nhân viên: 3200

Airbnb

Airbnb, được lập ra vào 2008 và có trụ sở tại San Francisco, chuyên cung cấp dịch vụ y tế online.

Tổng số nhân viên: 2000

Comcast NBCUniversal

Tập đoàn truyền thông Comcast NBCUniversal có chi nhánh chính tại 30 Rockefeller Plaza, New York City, New York.

Tổng số nhân viên: 160000

Walt Disney Company

Được thành lập vào 1923 tại Burbank, California, Walt Disney là tập đoàn truyền thông lớn thứ 2 thế giới.

Tổng số nhân viên: 195000

Time Warner

Time Warner là một tập đoàn về giải trí và truyền thông đại chúng, được sinh ra vào 1990 với trụ sở tại thành phố NewYork.

Tổng số nhân viên: 25000

Apple

Chi nhánh nằm ở Cupertino, California, Apple là công ty công nghệ có doanh thu cao nhất thế giới.

Tổng số nhân viên: 110000

Tesla

Tesla là một công ty nằm ở Palo Alto, California, chuyên về máy móc và pin mặt trời cũng như xe chạy bằng điện.

Tổng số nhân viên: 30000

Uber

Uber là công ty về dịch vụ vận chuyển với chi nhanh chính tại San Francisco, California.

Tổng số nhân viên: 12000

Salesforce

Salesforce tập trung về lĩnh vực công nghệ điện toán đám mây

Tổng số nhân viên: 25000

Facebook

Được thành lập vào năm 2004, Facebook là một công ty về mạng xã hội với trụ sở chính tại Menlo Park, California.

Tổng số nhân viên: 17000

Amazon

Sáng lập bởi Jeff Bezos vào 1994, Amazon là đại lý bán lẻ online với chi nhánh “mẹ” tại Seattle, Washington.

Tổng số nhân viên: 341400

Alphabet

Alphabet, Công ty đằng sau Google, là kẻ khổng lồ công nghệ trú ngụ ở Mountain View, California.

Tổng số nhân viên: 72000

Techtalk via Businessinsider

Lí do mà tôi đã trót yêu “như điếu đổ” hệ điều hành OpenBSD

Tôi luôn yêu thích các phần mềm open-source. Thật sự là rất khoái luôn. Bởi khả năng mở rộng, kiểm soát cũng như tùy chỉnh theo ý thích. Làm sao mà khiến ta có thể ghét được chứ?

Hơn nữa, tôi thật sự ngưỡng mộ việc hàng chục, trăm và đôi khi là hàng ngàn các developer cùng nhau hợp tác phát triển một project. Họ thật sự giúp thế giới tốt đẹp hơn từng chút một.

Và hôm nay tôi sẽ nói về một project nguồn mở yêu thích nhất của tôi: hệ điều hành OpenBSD (Đã được hơn 20 năm)

Sự tích mối tình vụng trộm của tôi và OpenBSD

Năm 1993, khi tôi vừa lên 6 tuổi,thì được ba mua cho 2 anh em chiếc máy tính đầu tiên là Laser 286/2X. lúc đó, nó khá hoành tráng với 2 processor, 45meg HDD với vài megabytes of RAM (4MB nếu tôi không lầm). Laser 286/2X chạy được MS-DOS, WordPerfect 5.1 và một số game giải trí.

Tuy nhiên, tôi lại chỉ tò mò về cách hệ điều hành hoạt động. Vì thế mà tôi nhanh chóng học và thuần thục MS-DOS, QBasic cũng như Windows cho dùng Workgroups 3.11, một phần mềm thầy dạy tiểu đã học tặng cho tôi.

Nhiều năm sau, khi vào trung học cơ sở, tôi gặp Giel, một đứa khá là mọt sách như tôi. Thế nên hai đứa nhanh chóng thành bạn thân. Giel cũng chính là người đã giới thiệu tôi với Red Hat, cùng KDE 1.0.

Thời điểm trên, tôi vẫn chưa hề biết gì về khái niệm “Open-source” cả, thế nên ngay lập tức bản thân đã khá tò mò về nó.  Do chuyện cũng lâu nên tôi không nhớ rõ chi tiết nhưng bản thân cũng đã thử qua nhiều phiên bản hệ điều hành khác nhau như SuSE, Mandrake, và cuối cùng là Slackware.

Sau một thời gian, khái niệm “Open source” bắt đầu ăn sâu vào trong người. Khi đó, tôi nhận ra mình thật may mắn bởi được phép sử dụng sản phẩm vốn là kết quả của sự đóng góp từ hàng ngàn developer trên khắp thế giới.

Từ Linux qua đến *BSD

Kể từ giây phút đó, tôi dành hầu như tất cả thời gian rảnh vào IRC channel và Usenet, thu thập kiến thức cũng như bàn luận, trao đổi ý tưởng.

Trong một lần tình cờ, tôi bắt gặp *BSD thông qua một bài viết cho rằng nó không chỉ đơn thuần như một phiên bản Linux mà còn là một hệ điều hành khác biệt với mục tiêu, ý tưởng riêng nhưng tốc độ phát triển còn chậm.

Vì tò mò, tôi ngay lập tức xài thử FreeBSD nhưng do cảm thấy nó không thoải mái nên lại trở về với Linux. Thế nhưng lúc đó OpenBSD xuất hiện. Dù vậy, tôi vẫn chưa thực sự sẵn sàng chuyển qua bởi đã quá gắn bó với Linux.

Thế nên tôi quyết định cài hai hệ điều hành OpenBSD/Linux. Và khoảng sau vài tuần, tôi càng ngày yêu OpenBSD hơn và quyết định bỏ luôn Linux.

Lợi ích của OpenBSD

Trước hết tôi xin nói rằng là bản thân khá cuồng OpenBSD. Đó là bởi vì những lợi thế vô cùng đặc biệt khi bạn xài nó:

Cực kì an toàn và bảo mật

OpenBSD có chiến tích khá ấn tượng khi nói về tính bảo mật. Phiên bản cài đặt gốc chỉ có 2 kẻ hỡ trong suốt hơn 20 năm phát triển. Khi so sánh với Window, Linux hoặc FreeBSD, vốn có hàng chục đến trăm bug và kẽ hở, thì OpenBSD càng trở nên nổi bật hơn.

Hơn thế nữa, OpenBSD lại đi tiên phong khi nói về việc sử dụng những kĩ thuật giảm thiểu. Ngoài ra, họ còn phát triển cả OpenSSHmột list dài đặc các chương trình, ý tưởng, project khác nữa.  

Nó được ghi lại một cách tỉ mỉ và gọn gàng

Mọi thứ trong OpenBSD đều được ghi lại kĩ lưỡng. Trang man-page là một trong những nơi tuyệt vời cho bạn tìm kiếm thông tin về cú pháp của một trương trình hoặc function của nó.

OpenBSD là một project với nguồn mở (Open Source)

Có thể đây là một điều khá kì lạ, bởi tôi đã nói về việc này khá nhiều ở trên. Nhưng tôi thật sự muốn mở rộng thêm về việc này.

Khi mà nhiều hệ điều hành có proprietary, closed source driver thì OpenBSD thì lại không.

Hơn thế, các closed source driver thì không thể bị kiểm tra, khiến cho việc bị tấn công dễ xảy ra. Ngoài ra, chúng còn có thể tồn tại các lỗi bug, có thể bị công kích và thậm chí là vi phạm qui tắc bản quyền phần mềm.

Nếu bạn muốn đào sâu hơn về vấn đề này thì hãy vào fw_update

Bởi sự gọn gàng và đơn giản

OpenBSD thật sự rất gọn gàn, đó là điều không cần bàn cãi. Bởi nó không bao gồm hàng tá các tiện ích không cần thiết như Linux.

Điều này càng rõ ràng hơn trong quá trình cài đặt. Installer sẽ hỏi bạn có cho phép cài đặt SSH cũng như bạn có muốn chạy graphical interface hay không. Nói cách khác, tự do và có lựa chọn chính là điểm sáng của OpenBSD. Bạn hoàn toàn có quyền cài đặt phần mềm và ứng dụng mình muốn (pkg_add gnome)

Ngoài ra còn nhiều lợi ích khác nữa mà bạn có thể xem qua tại đây.

Lời kết của tôi đối với OpenBSD

OpenBSD là hệ điều hành tôi dùng hàng ngày cho desktop, network và phần lớn các server của mình.

Có thể nó không hoàn hảo trong một số tình huống bởi không có được các phần mềm phức tạp vốn chỉ dành riêng cho Linux hoặc Windows.

Do vậy mà tôi vẫn dùng tới Linux cho một số hosting platform bởi vấn đề không tương thích. Có thể xem nó như là một điểm yếu của OpenBSD.

Tuy thế, tôi vẫn chọn OpenBSD và nếu các bạn mới tìm hiểu về máy tính cũng như các hệ điều hành thì OpenBSD sẽ là một lựa chọn tuyệt vời, giúp cho bạn biết được cách chúng hoạt động như thế nào.

Nếu giờ mà có quay ngược thời gian bắt đầu lại từ đầu thì tôi chắc chắn vẫn sẽ chọn OpenBSD ngay lập tức.

Nguồn: topdev.vn via Medium

7 tuyệt kỹ giúp lập trình viên đậu phỏng vấn

Làm thế nào để bạn có thể viết code thật hay khi làm bài test vào vị trí lập trình viên của các công lớn?

Theo các chuyên gia phỏng vấn tại Gainlo, phần lớn các ứng viên khi được yêu cầu viết code thử thì chất lượng khá là thấp, bao gồm bug, cách viết dở, phức tạp, không nhất quán,… Một điều đáng quan tâm hơn là nếu bạn có khả năng code gọn và “sạch” thì rất dễ được nhận vào làm bởi vì ứng dụng của bạn sẽ ít bị bug, lỗi mà lại dễ sửa.

Trong bài viết này, chúng tôi sẽ đưa ra những tip và trick thực tiễn nhằm giúp bạn cải thiện chất lượng code nhanh nhất có thể. Thậm chí, một số cách chỉ tốn của bạn 30 phút thôi nhưng chúng đều rất hữu ích và không đòi hỏi bạn phải có kiến thức thâm sâu mới làm được.

Chọn ngôn ngữ lập trình

Đa phần các công ty đều cho phép ứng viên được tự do chọn bất cứ ngôn ngữ nào mà họ thích và thường gặp nhất chính là C++Java. Mặc dù chúng không có sự cách biệt mấy bởi cả hai đều quá nổi tiếng, tuy nhiên từ dữ liệu thu thập được, C++ lại có những thế mạnh nổi trội hơn hẳn so với Java.

Đầu tiên, C++ có cú pháp ngắn gọn hơn. Các bạn nên biết rằng, thông thường, công ty sẽ chỉ cho khoảng 20 phút để giải một vấn đề code và nếu lược ra khoảng thời gian ta suy nghĩ, thì chỉ còn xấp xỉ 10 phút để code thôi. Như vậy, C++ sẽ cho phép bạn giải quyết vấn đề nhanh hơn và gọn hơn. Hãy thử so sánh list/vector và class, bạn sẽ thấy ngay Java rườm rà thế nào.

C++ pointer là một tool cực kì tuyệt vời cho việc làm test khi đi phỏng vấn.

Như nhiều người khác, tôi cực kì ghét pointer bởi dễ bị lỗi và nhìn xấu. Tuy nhiên, nó lại khá hữu ích trong trường hợp test coding trong phỏng vấn. Ví dụ, pointer sẽ ngay lập tức cho phép bạn xác định một phương pháp để có thể chạy nhiều giá trị cùng một lúc với pointer đóng vai trò như param.

Ngoài ra, Python cũng là một lựa chọn khá tốt mặc dù không phải ai cũng rành về nó. Tuy vậy, cú pháp rõ ràng đơn giản khiến Python trở thành một ngôn ngữ cực kì mạnh mẽ đối với các bài test về coding trong phỏng vấn. Thế nên nếu bạn giỏi Python thì hãy dùng nó ngay.

Screen Shot 2015-09-24 at 8.50.20 AM

Phong cách viết code chuẩn

Mặc dù cách viết code mỗi nơi mỗi khác, nhưng bạn vẫn phải chú ý tới bởi code xấu thể hiện sự thiếu chuyên nghiệp của bạn. Bạn có thể học theo phong cách của Google trong Java, C++ Python vốn rất nổi tiếng.

Hơn nữa, ta cũng cần chú ý đến việc đặt tên cho các variable. Mặc dù việc gọi chúng là X,Y hoặc Z thực sự không nên nhưng trong trường hợp này thì nó lại giúp bạn tiết kiệm rất nhiều thời gian. Đừng đặt những cái tên dài ngoằng bởi điều quan trọng nhất là phải khiến nó dễ đọc, dễ hiểu cũng như tiện gỡ bug cho bạn và cả người phỏng vấn.

Giữ cho code luôn sạch và hoàn chỉnh

Khi tôi nói hoàn tất tức là code của bạn phải có đầy đủ mọi yếu tố để có thể complie và chạy được. Nếu vấn đề đặt ra cho bạn là cách áp dụng một function, thì hãy bắt đầu với bước declaration thay vì cắm đầu viết trực tiếp. Còn nếu là xác định class thì đầu tiên sẽ phải là phân tích class.

Ngoài ra, bạn cũng cần phải khai báo ra tất cả variable. Thật ngạc nhiên thực tế lại ngược lại khi có khá nhiều ứng viên cứ sử dụng variable mà không cho biết nó ở đâu ra cả.

Về vấn đề code gọn và sạch, ý của tôi ở đây ám chỉ vẻ ngoài của nó. Khi bạn viết code trên bảng trắng, thì việc viết cho đẹp, cho sạch luôn được ủng hộ. Bởi có một số kí tự dễ bị nhầm lẫn như “q” với 9 và “z” với 2, vì thế hãy luôn viết thật rõ ràng.

Cũng nên bỏ việc dùng mũi tên để thêm code vào theo ý bạn, nhìn rất xấu. Bạn có thể cho thêm space giữa các dòng phòng khi muốn thêm thắt hoặc là phải viết cẩn thận và chậm.

Ngắn gọn

Hãy giữ cho code của bạn thật ngắn gọn hết mức. Có rất nhiều lợi ích cho việc đó. Đầu tiên, việc bug xuất hiện ít hơn bởi tỉ lệ bug/dòng luôn thấp. Mặc khác, người phỏng vấn sẽ rất ấn tượng khi bạn đưa ra được câu trả lời chính xác mà ngắn gọn. Hơn nữa, viết ngắn thì sẽ tiết kiệm được thời gian.

Tất nhiên để làm được việc này thì ta cần phải rèn luyện rất nhiều và lời khuyên của tôi là khi bạn viết code, hãy luôn lọc và cải thiện giải pháp của mình để khiến nó ngắn hơn cũng như nhận ra một số kiểu vấn đề mà bạn có thể dùng cách riêng của mình. Hẳn bạn đã chán việc phải viết những đoạn code dài ngoằn mà vô nghĩa.

Thay vào đó bạn có thể nhờ tới một số Hack sau:

  • Dùng C++ auto trong loop. Thay vì phải viết
for(int i = 0; i < array.size(); ++i)

Bạn có thể dùng auto như sau

for(const auto& element : array)
  • Cố gắng đặt “if” và “for” trong cùng một dòng
for(const auto& ele : array) if (ele.attr) res[++i] = ele.val;

Luôn phải xác nhận Input trước

Một điều rất đơn giản nhưng các ưng viên lại hay bỏ qua. Hãy luôn kiểm tra xem input có NULL, empty, positive, etc. Và đừng bao giờ tự nhủ rằng bạn được cho một valid param.

Hơn nữa, khi bạn muốn test phương pháp của mình, hãy dùng một số input “quái quái” tí để coi kết quả như thế nào. Hãy bảo đảm phương pháp của bạn đủ mạnh mẽ để xử lí hết tất cả mọi trường hợp được đặt ra.

Tránh mất thời gian vào việc define các function không quan trọng

Một điều thường gặp ở các ứng viên là họ hay đặt quá nhiều thời gian vào việc define các function một cách không cần thiết. Tuy nhiên, nó sẽ chỉ khiến mọi thứ càng trở nên rắc rối và tốn thời gian hơn.

Đa phần các câu hỏi sẽ không đòi hỏi ta phải define quá 2 function và chỉ những function phụ không cần thiết thường nằm trong 3 trường hợp sau:

  • Utility function hay swap function
  • Được dùng nhiều lần, thế thì bạn nên chỉ viết một lần thôi
  • Nó nằm ở một phần khác so với function chính

Vừa nói vừa viết

Rất nhiều ứng viên im lặng khi đang coding, đó là điều không nên mặc dù đúng là bình thường ta không nói chuyện khi code. Ý tưởng ở đây là tranh thủ thời gian viết code để trò truyện với người phỏng vấn vốn rất có lợi cho bạn.

Trước tiên, nó giúp cho họ hiểu rõ hơn về code của bạn. Khá nhiều người cho rằng code của họ dễ đọc, tuy nhiên sự thật đôi khi nó chỉ dễ đối với họ thôi. Vì thế khi bạn trao đổi với người phỏng vấn, họ sẽ hiểu rõ cũng như có thiện cảm với bạn.

Mặc khác, người phỏng vấn sẽ đưa ra hint và gợi ý giúp bạn. Nghe có vẻ khó tin đúng không nhưng thật sự là phần lớn người phỏng vấn luôn muốn bạn thành công. Vì thế mà thỉnh thoảng họ sẽ đưa ra tip khi bạn bị bí. Do vậy mà nếu bạn chịu khó giao tiếp thì họ sẽ hiểu được tiến độ cũng như khả năng của bạn. Tuy nhiên, một lập trình viên im lặng sẽ không thể nào có cơ hội cải thiện sửa chữa sau 20 phút cặm cụi làm.

Việc vừa giao tiếp vừa code còn giúp bạn biết được mình đang làm gì. Bởi đôi khi chúng ta vì bị tinh thần chưa vững nên khi bị mắc kẹt dễ gây mất bình tĩnh. Thế nên nói chuyện giao tiếp sẽ giúp bản thân chính bạn hiểu thêm về vấn đề cũng nhưng phương hướng của mình.

Lời kết

Hãy luôn nhớ rằng người phỏng vấn sẽ copy code của bạn và gửi lên cho sếp xem. Vì thế mà cách bạn viết code rất quan trọng, mang tính quyết định cho kết quả của buổi phỏng vấn.

Topdev via blog.gainlo.co

Tham khảo việc làm GIT lương cao tại TopDev

Sau khi build ứng dụng React Native, tôi nhận ra đây chính là tương lai chúng ta cần hướng đến!

react native app

Sau vài tuần làm quen với React Native, tôi đã thành công viết ra một app mobile cho mình. Và nó thật ra rất là đơn giản, chỉ phải mất vài ngày mà lại khá là vui.

App ứng dụng dành cho blog về đồ ăn yêu thích của tôi, Smitten Kitchen.

Ứng dụng cho phép người dùng tìm kiếm thông tin từ hơn 1,000 công thức, cũng như hiển thị các nguyên liệu và cách thức thực hiện món ăn.

User cũng có khả năng bookmark các công thức mà họ thích và chia sẻ chúng với bạn bè và người thân

Xin lưu ý rằng tôi chỉ sẽ tung ra ứng dụng này nếu được sự chấp thuận của blog, còn hiện giờ thì mã nguồn của nó sẽ vẫn được giữ kín.

React Native sẽ còn làm mưa gió một thời gian nữa

Một điều thường thấy ở các developer là họ rất ngại phải đầu tư thời gian học một ngôn ngữ lập trình mới nếu họ thấy rằng nó có khả năng cao trở nên lạc hậu trong tương lai.

Tuy vậy với React Native, mặc dù tôi chỉ mới tiếp xúc sơ thôi nhưng quả thật nó là một tool cực kì mạnh mẽ. Và tôi tin rằng React Native vẫn sẽ sống khỏe thêm một thời gian nữa.

Facebook, Instagram, và Airbnb đều dùng React Native để cho ra những version mobile app mới nhất của họ. Ngoài ra còn có một list dài bao gồm các app nổi tiếng cũng sử dụng React Native.

Jeff Meyerson, nhà sáng lập của Software Engineering Daily, cũng nói khá chi tiết về React Native platform. Ông tin rằng nó sẽ vẫn tiếp tục phát triển và được dùng rộng rãi bởi phần lớn các app thuộc mobile ecosystem.

Jeff còn cho rằng Facebook sẽ tung ra smartphone của riêng họ, với các app hỗ trợ được tạo bởi React Native.

React Native khác gì so với các cross-platform tool khác

Nếu như bạn chỉ mới biết đến React Native, nó là một open source project được tạo ra bởi Facebook. React Native cho phép developer tạo ra các cross-platform mobile app sử dụng JavaScript. Nó khá là giống so với React, một JavaScript library khá nổi tiếng của Facebook dành cho tạo ra web application.

Tôi vốn dĩ luôn khá là có ác cảm với những tool được quảng cáo là dành cho cross-platform mobile. Bởi kết quả thường xuyên nhận được luôn là nỗi thất vọng.

React Native không như các mobile app development framework khác như Ionic hoặc Cordova bởi nó compile code của bạn thành các dòng code native dành cho OS (Andord hoặc iOS).

Do đó mà bạn có thể tạo ra một app có độ phức tạp cao mà lại không thua kém gì so với các app tạo ra bởi các ngôn ngữ Swift/Objective-C hoặc Java.

Tuy vậy, ta vẫn phải hiểu và phân biết được sự khác nhau giữa các platform đó. Đồng thời trải nghiệm sử dụng của người dùng trên Android và iOS là hoàn toàn khác nhau nên bạn cần phải có khả năng tạo ra app chạy được trơn tru trên cả 2 platform.

Ngoài ra, nếu có tính năng bạn muốn thêm vào những tính năng mới những chưa có sự hỗ trợ từ React Native library, React Native giúp bạn tự viết ra Native Module phù hợp cho tính năng mới, và kết nối nó tới React Native codebase.  

Bắt đầu từ đâu

Theo tôi, Udemy là một khởi đầu tuyệt vời. Giúp bạn hiểu thêm về react và redux cũng như làm quen với setup.

Ngoài ra, Facebook cũng vừa mới công bố Create React Native App, giúp cho quá trình setup ban đầu càng dễ dàng hơn.

Còn nếu bạn đã quen với React, thì giờ cứ nhảy thẳng vào đây. Mặc dù bạn sẽ phải bỏ ra $10, nhưng khóa học này thật sự rất hữu ích, giúp bạn tạo ra 4 loại mobile app khác nhau cũng như cung cấp component có thể tái sử dụng cho các project trong tương lai.

Udemy còn có khóa học chuyên sâu Advanced React Native Concepts, dành cho những developer muốn nâng cao tay nghề mình thêm.

Styling trong React Native

Bạn sẽ mất một thời gian để làm quen với Styling của React Native. Bởi nó sử dụng CSS flexbox. Điều mà tôi vẫn chưa thể cảm thấy thoải mái, dù bản thân vốn xuất thân từ bên lập trình cho web.

Thật may là có khá nhiều nguồn hữu ích giúp cho việc học về flexbox trở nên dễ dàng hơn như:

Ngoài ra còn có cả trò chơi để bạn thực hành: Flexbox Froggy

Sau vài tuần học về React native, tôi giờ đã hiểu rõ hơn về flexbox.

Cách tốt nhất để hiểu rõ thêm về Styling là tạo ra style object cho từng component. , sau đó áp dụng nó với inline-style. Nên nhớ rằng bạn không thực sự làm về CSS, do đó việc đặt tên cho properties sẽ có khác đi một chút.

Một điểm khác biệt quan trọng nữa là bạn không thể sử dụng HTML tags trong Javascript, bởi vì bạn đang lập trinh cho một app chạy trên phone chứ không phải cho trình duyệt web. Thay vào đó, các component được tạo ra từ một set các component cung cấp bởi React Native library.

Bạn sẽ mất một thời gian để làm quen, nhưng tin tôi đi, đến khi bạn kịp nhận ra thì nó đã hình thành trong vô thức sử dụng <View></View>  tag thay vì <div></div> trong project web app tiếp theo của mình.

Để hiểu rõ hơn, bạn có thể xem code sau đây:

import React from 'react';
import { StyleSheet, Text, TouchableOpacity } from 'react-native';
const Button = (props) => {
  const { buttonStyle, textStyle } = styles;
  return (
    <TouchableOpacity style={buttonStyle} onPress={props.onPress}>
      <Text style={textStyle}>
        {props.children}
      </Text>
    </TouchableOpacity>
  );
};
const styles = StyleSheet.create({
  textStyle: {
    alignSelf: 'center',
    color: '#6B7794',
    fontSize: 16,
    fontWeight: '600',
    paddingTop: 10,
    paddingBottom: 10
  },
buttonStyle: {
    flex: 1,
    alignSelf: 'stretch',
    backgroundColor: '#fff',
    borderWidth: 1,
    borderRadius: 5,
    borderColor: '#6B7794',
    margin: 5,
    marginRight: 5
  }
});
export { Button };

Còn đây là GitHub gist

Chọn phiên bản library nào?

React Router được xem như lựa chọn chuẩn về library của cộng đồng React, tuy vẫn còn nhiều library cũng hỗ trợ cho ngôn ngữ này.

Riêng tôi thì React Native Router Flux library khá là tuyệt vời và tôi luôn dùng nó cho các project của mình. Tuy nhiên, library này lại không thích hợp cho các project lớn và phức tạp.

May thay, React Native đã có một cộng đồng khá lớn. Các phiên bản cập nhật luôn được tung ra hàng tháng nên tôi nghĩ những vấn đề trên sẽ không làm khó bạn.

Trải nghiệm cũng rất quan trọng

Quả thật tính năng chia sẻ code giữa Andriod và iOS app của React Native là một điểm mạnh và thu hút nhiều developer. Tuy nhiên nó chỉ là một phần làm nên sự nổi bật của ngôn ngữ lập trình.

Điều  tôi yêu thích nhất ở React Native là khả năng reload ngay lập tức. Vốn đã từng dùng Andriod Studio, và phải chờ từ 30 cho đến 60 giây cho mỗi lần reload như vậy

Nói cách khác, React Native thật sự khiến bạn hăng sai code và đó là quá đủ để cho bạn dùng thử ngôn ngữ lập trình tuyệt vời này.

Hãy luôn ham tìm tòi và khám phá

React Native là một minh chứng cho việc ta có thể áp dụng một ý tưởng vốn đã thành công (web) vào một lĩnh vực khác (mobile) mà vẫn có được kết quả tương tự.

Cũng như Haseeb Quereshi đã tuyên bố trong buổi diễn thuyết về convergence, là một kỹ sư phần mềm, ta luôn nên tìm cách hội tụ và tạo ra một nguyên tắc, ngôn ngữ, tool mà dùng được cho nhiều lĩnh vực và trường hợp khác nhau.

Hãy tập trung vào một giải pháp thật tối ưu.

“Hãy giữ cho cái tôi của bạn nhỏ thôi” – Paul Graham

Đôi khi chúng ta trở nên quá lý thuyết và giáo điều, khiến cho đánh mất đi cái nhìn sâu sắc về mọi thứ xung quanh.

Vì thế hãy luôn tìm hiểu.

Nếu bạn thử xài React Native thì tôi tin rằng bạn sẽ nhận ra sự tuyệt vời của ngôn ngữ này.

Nguồn: topdev.vn via Medium

 

Sếp ở Google không được phép tuyển dụng, sa thải hay thăng chức cho nhân viên, lý do sẽ khiến nhiều người bất ngờ

Lãnh đạo tại Google cho dù muốn cũng không thể nào thăng chức cho nhân viên dưới quyền, họ thậm chí còn chẳng thể tuyển dụng thêm người mới cho nhóm của mình. Tất cả đều phụ thuộc vào một thứ mang tên packet.

Làm một quản lý ở Google hơi khác một chút so với ở những nơi khác.

Theo Kim Scott – tác giả của cuốn sách ‘Radical Candor: Be a Kickass Boss Without Losing Your Humanity’, thì lý do là vì mọi quyết định ở công ty này được đưa ra dựa vào sự nhất trí của mọi người.

Scott đã từng lãnh đạo bộ phận Adsense và YouTube ở Google. Và trong một cuộc phỏng vấn ở Hội nghị Qualtrics Insight Summit gần đây, Scott đã cung cấp một chút thông tin về việc nắm giữ cương vị quản lý ở Google thì như thế nào.

“Về cơ bản, Google tước bỏ gần như mọi quyền lực và quyền kiểm soát mà một quản lý có được ở các công ty khác”, bà giải thích. “Nếu bạn là quản lý ở Google, bạn không được đơn phương lựa chọn người mình muốn tuyển dụng hoặc sa thải. Bạn không được chọn điểm số đánh giá cho từng người, yếu tố quyết định số tiền thưởng mà họ nhận được”.

Vậy những quyết định này được đưa ra như thế nào? Theo Scott, “một nhóm người sẽ phỏng vấn một ứng viên và viết một bản đánh giá nhỏ gọi là ‘packet’, đưa ra ý kiến của mình và cho biết có nên tuyển dụng người này hay không”. Nhóm người tiến hành phỏng vấn này sẽ gồm cả quản lý, nhân viên và đồng nghiệp tương lai của ứng viên. Bản thân Scott cũng được phỏng vấn bởi một số người sẽ làm việc chung với cô nếu được tuyển dụng.

Khi quán trình phỏng vấn kết thúc, các ‘packet’ sẽ được chuyển đến một ủy ban. “Giám đốc nhân sự không được quyết định tuyển dụng ứng viên”, Scott cho biết. “Họ có thể cố gắng để đưa một ứng viên vào đội của mình, nhưng người đó có quyền chọn làm cho một đội khác”.

Các quản lý ở Google cũng không thể ngăn cản bất kỳ ai luân chuyển sang một bộ phận khác trong nội bộ công ty. Trên thực tế, điều này cũng xảy ra với Scott. “Khi gia nhập Google. Tôi có 5 cấp dưới. Trong tuần đầu tiên, 3 người trong số đó đã quyết định nhận việc khác ở Google”.

Các quản lý thậm chí còn có ít quyền lực hơn trong việc thăng chức cho các nhân viên.

“Đặc biệt là trong lĩnh vực kỹ thuật, chuyện này rất thú vị”, Scott chia sẻ. “Một nhân viên sẽ giơ tay lên và nói, ‘Tôi đã sẵn sàng để được thăng chức’. Quản lý có thể đưa ra lời khuyên, nhưng ngay cả khi người quản lý nói ‘Tôi nghĩ bạn chưa sẵn sàng đâu’ thì người kia vẫn có thể nhận được các packet đánh giá. Việc được thăng chức sẽ khó hơn nếu không có sự giúp đỡ của người quản lý, nhưng bạn vẫn có thể thành công”.

Hoặc nếu người quản lý chấp thuận việc thăng chức, họ có thể giúp nhân viên chuẩn bị một packet hoặc thu thập lời tiến cử từ những người khác ủng hộ cho việc thăng chức. “Packet đó cũng được gửi tới một ủy ban”, Scott nói. “Người quản lý của nhân viên kia không được nằm trong ủy ban, và ủy ban này sẽ đưa ra quyết định cuối cùng”.

Theo Scott, việc này nghe có vẻ phức tạp nhưng lại rất rốt cho Google. Vì nhờ có quy trình sử dụng ‘packet’ như thế nên “có rất ít chuyện bất công trong việc thăng chức”.

Không những thế, quan hệ công việc trong toàn công ty cũng trở nên tốt hơn. “Để trở thành một quản lý hiệu quả, bạn cần phải có các mối quan hệ tốt”, bà nói. “Loại bỏ quyền lực đơn phương của các quản lý giúp cho các mối quan hệ tốt tồn tại được. Không gì tệ hơn cho một mối quan hệ bằng sự bất cân xứng về quyền lực”.

Có thể phương thức này sẽ không có tác dụng với mọi công ty và mọi đối tượng nhân viên. Nhưng có một bài học ở đây dành cho mọi nhân viên quản lý. Đó là: Càng nhiều quyết định được đồng thuận, thì các mối quan hệ càng trở nên tốt hơn, và các nhân viên càng trở nên gắn kết với nhau hơn.

Đừng bỏ lỡ các việc làm ngành cntt hấp dẫn tại Topdev

CSS trong JavaScript: Công cụ không thể thiếu cho component-based styling

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: Button và ButtonStyles. Đó 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 (
    <input
      type="button"
      className={css(styles.button)}
      value={props.text}
    />
  );
}

 

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 className . Lúc đó function css sẽ chuyển đổi styles object vào trong CSS. styles vốn được tạo ra nhờ vào function StyleSheet.create({ ... }) thuộc Aphrodite. Bạn có thể thấy kết quả từ StyleSheet.create({ ... }) 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ư border-radius sẽ trở thành borderRadius 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à h2, hãy dùng displayLarge để miêu tả vai trò của nó. tương tự, với độ đậm nhạt của font, thay vì dùng 600, thì hãy ghi là semibold để á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 <Tag className={css(styles[tagMapping[Tag]])}>{children}</Tag>;
}

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 styles 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, Heading component của ta sẽ trông như dưới đây

function Parent() {
  return (
    <Heading tag="h2">Hello World</Heading>
  );
}

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, Heading component cũng có thể áp dụng được vào Text 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 spacingFactor , 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 spacingFactor 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 marginBottom vào Button component

import { spacing } from '../styles/base/spacing';

...

const styles = StyleSheet.create({
  button: {
    marginBottom: spacing.space4, // adding margin using spacing constant
    ...
  },
});

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 marginBottom 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 Spacing component để quản lí những thay đổi trong spacing của các yếu tố trong database.

import React, { PropTypes } from 'react';
import { spacing } from '../../base/spacing';

function getSpacingSize(size) {
  return `space${size}`;
}

function Spacing(props) {
  return (
    <div style={{ marginBottom: spacing[getSpacingSize(props.size)] }}>
      {props.children}
    </div>
  );
}

export default Spacing;

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 marginBottom. Đó 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.

import React, { PropTypes } from 'react';
import { StyleSheet, css } from 'aphrodite/no-important';
import { spacing } from '../../styles/base/spacing';

function Card(props) {
  return (
    <div className={css(styles.card)}>
      {props.children}
    </div>
  );
}

export default Card;

export const styles = StyleSheet.create({
  card: {
    padding: spacing.space4}, // using spacing constants as padding
    
    background: 'rgba(255, 255, 255, 1.0)',
    boxShadow: '0 3px 17px 2px rgba(0, 0, 0, .05)',
    borderRadius: '3px',
  },
});

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

Tuyển dụng lập trình viên lương cao trên TopDev

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

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.

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

Đ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.

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

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

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.

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

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

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

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ác coder là ai và họ học code như thế nào?

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

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

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

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

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

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

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ác coder là ai và họ học code như thế nào?

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

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

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

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

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.

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

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

Đ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”

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

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%

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

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

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

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

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

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 là ai và họ học code như thế nào?

 

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

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

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

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

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

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

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

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).   

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

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

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

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

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

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

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

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

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

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

  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ỉ?

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

Bai-TCBC

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 https://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: https://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:

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