Thứ Ba, 27 tháng 2, 2018

Top10 thủ thuật dành cho machine learning newbie


Trong machine learning , có một thứ gọi là định luật ” No Free Lunch “. Nói một cách ngắn gọn, điều đó cho rằng không có một thuật toán nà tốt nhất trong mọi vấn đề và nó đặc biệt hiệp với supervised learning – việc học dưới sự giám sát ( ví dụ là predictive modeling – mô hình tiên đoán).

tỉ dụ, bạn không thể nói rằng các kết nối nơ-ron luôn tốt hơn cây quyết định – decision trees (hay ngược lại). Có rất nhiều yếu tố ảnh hưởng chẳng hạn như kích tấc và cấu trúc của bộ dữ liệu.

Do đó, bạn nên thử nhiều thuật toán khác nhau cho vấn đề của bạn, trong khi sử dụng một “ tập rà soát ” còn lại để đánh giá hiệu suất và chọn ra giải pháp tối ưu nhất.

hẳn nhiên, các thuật toán bạn thử phải ăn nhập với vấn đề của bạn, đó là việc bạn chọn đúng công việc cho machine learning. hao hao, nếu bạn cần dọn dẹp nhà cửa, bạn có thể dùng máy hút bụi, một cây chổi hoặc một cái giẻ lau, nhưng bạn sẽ không sử dụng một cái xẻng và đào.
The Big Principle

Tuy nhiên, có một nguyên tắc chung là cơ sở cho mọi thuật toán machine learning được giám sát cho mô hình tiên lượng.

Các thuật toán machine learning được mô tả như việc học một target function (f) để biến bản đồ đầu vào (X) thành biến xuất (Y): Y = f (X)

Đây là một nhiệm vụ học tập tổng quát mà chúng ta muốn đưa ra những tiên đoán trong ngày mai (Y) với các thí dụ mới về các biến đầu vào (X). Chúng ta không biết chức năng (f) trông như thế nào hoặc dạng của nó. Nếu chúng ta làm như vậy, chúng ta sẽ sử dụng nó trực tiếp và không cần phải học nó từ dữ liệu bằng cách dùng các thuật toán machine learning.

Phương thức phổ thông nhất của machine learning là học cách lập bản đồ Y = f (X) để đưa ra dự đoán của Y cho biến X mới. Điều này được gọi là mô hình tiên lượng hoặc phân tách tiên đoán và đích của chúng ta là làm cho các dự đoán xác thực nhất có thể được.

Đối với những người mới học về machine learning muốn hiểu được cơ bản của nó, đây sẽ là một chuyến khám phá nhanh về 10 thuật toán machine learning hàng đầu được các nhà khoa học dữ liệu sử dụng.
Linear Regression – Hồi quy tuyến tính

Hồi quy tuyến tính có nhẽ là một trong những thuật toán nổi danh nhất và được hiểu rõ nhất trong thống kê và machine learning.

Mô hình tiên lượng chính yếu quan hoài đến việc giảm thiểu sai sót của mô hình hoặc đưa ra các dự đoán chính xác nhất có thể, với một phí tổn giải trình. Chúng tôi sẽ mượn, dùng lại và lấy các thuật toán từ nhiều lĩnh vực khác nhau, bao gồm số liệu thống kê và sử dụng chúng cho những mục đích này.

biểu diễn hồi quy tuyến tính là một phương trình biểu hiện một đường thẳng biểu thị hợp nhất mối quan hệ giữa các biến đầu vào (x) và các biến đầu ra (y), bằng cách tìm các trọng số cụ thể cho các biến đầu vào được gọi là các hệ số (B).



ví dụ: y = B0 + B1 * x

Chúng ta sẽ dự đoán y với biến x cho trước và đích của thuật toán hồi quy tuyến tính là tìm các giá trị cho các hệ số B0 và B1.

Các kĩ thuật khác nhau có thể được sử dụng để tìm mô hình hồi quy tuyến tính từ dữ liệu, chả hạn như một giải pháp đại số tuyến tính cho Ordinary least square và việc tối ưu hóa Gradient descent.

Hồi quy tuyến tính đã được phát minh khoảng hơn 200 năm và đã được nghiên cứu rộng rãi. Một số lề luật tốt khi dùng kĩ thuật này là loại bỏ các biến hao hao nhau (correlated) và để loại bỏ bớt nguyên tố nhãng từ dữ liệu của bạn, nếu có thể. Đây là một kĩ thuật đơn giản và mau chóng, và là thuật toán tốt trước tiên để thử.

2. Logistic Regression – Hồi quy logistic

Hồi quy logistic là một thuật toán khác được mượn bởi machine learning từ lĩnh vực thống kê. Đây là phương thức tốt nhất cho các vấn đề phân loại nhị phân (vấn đề với hai lớp giá trị).

Hồi quy logistic giống như hồi quy tuyến tính với mục đích là để tìm ra các giá trị cho các hệ số mà trọng lượng mỗi biến đầu vào. Không giống như hồi quy tuyến tính, dự đoán đầu ra được chuyển đổi bằng cách sử dụng một hàm không tuyến tính được gọi là hàm logistic.

Hàm logistic trông giống như một S lớn và sẽ biến đổi bất kỳ giá trị nào thành 0-1. Điều này rất hữu ích vì chưng chúng ta có thể ứng dụng một lề luật cho đầu ra của hàm logistic để tăng giá trị cho 0 và 1 (ví dụ IF ít hơn 0.5 sau đó đầu ra 1) và dự đoán một lớp giá trị.



Vì cách mô hình được học, các dự đoán thực hiện bởi hồi quy logistic cũng có thể được dùng như là xác suất của một ví dụ dữ liệu một mực thuộc lớp 0 hoặc lớp 1. Điều này có thể bổ ích cho các vấn đề khi bạn cần đưa ra nhiều lý do cho một dự đoán.

Giống như hồi quy tuyến tính, hồi quy logistic hoạt động tốt hơn khi bạn loại bỏ các tính chất không liên quan đến biến đầu ra cũng như các thuộc tính na ná nhau (correlated). Đó là một mô hình có thể học hỏi nhanh và có hiệu quả với các vấn đề phân loại nhị phân.

3. Linear Discriminant Analysis – phân tách phân loại tuyến tính

Hồi quy Logistic là một thuật toán phân loại truyền thống giới hạn vào các vấn đề phân loại hai lớp. Nếu bạn có nhiều hơn hai lớp thì thuật toán phân tách phân loại tuyến tính nên được ưu tiên.

Sự bộc lộ của LDA khá đơn giản. Nó bao gồm các thuộc tính thống kê của dữ liệu của bạn, được tính cho mỗi lớp. Đối với một biến đầu vào duy nhất, nó bao gồm:
Giá trị trung bình cho mỗi lớp.
Phương sai được tính trên quờ các lớp.




Dự đoán được thực hành bằng cách tính giá trị phân biệt cho mỗi lớp và dự đoán cho lớp đó có giá trị lớn nhất. Kĩ thuật giả thiết rằng dữ liệu có một phân bố Gaussian (bell curve), do đó tốt hơn là bạn nên loại bỏ các giá trị ngoại vi khỏi dữ liệu của bạn trước. Đây là một phương pháp đơn giản và mạnh mẽ để phân loại các vấn đề mô hình dự báo.

4. Classification and regression trees – Cây phân loại và hồi quy

Decision trees là một loại thuật toán quan trọng cho mô hình tiên đoán machine learning.

Sự biểu diễn của mô hình decision tree là một cây nhị phân. Đây là cây nhị phân của bạn từ các thuật toán và cấu trúc dữ liệu, không có gì quá ưa thích. Mỗi node đại diện cho một biến đầu vào độc nhất vô nhị (x) và một điểm phân chia trên biến đó (giả tỉ biến đó là số).



Các node lá của cây chứa một biến đầu ra (y) được dùng để dự đoán. Các tiên lượng được thực hiện bằng cách đi trên các nhánh của cây cho đến khi đến một node lá và đưa ra lớp giá trị tại node lá đó.

Cây có thể học rất nhanh và có thể dùng để dự đoán rất nhanh. Chúng thường chuẩn xác cho nhiều loại vấn đề và dữ liệu của bạn không cần bất kỳ sự chuẩn bị đặc biệt nào.

5. Naive Bayes

Naive Bayes là một thuật toán đơn giản nhưng mạnh mẽ về mô hình tiên đoán.

Mô hình bao gồm hai loại xác suất có thể được tính trực tiếp từ dữ liệu của bạn:

1) Xác suất của mỗi lớp;

2) Xác suất có điều kiện cho mỗi lớp với mỗi giá trị x.

Sau khi tính, mô hình xác suất có thể được sử dụng để đưa ra dự đoán cho dữ liệu mới bằng Định lý Bayes. Khi dữ liệu của bạn có giá trị thực, giả thử một phân phối Gaussian (bell curve) khá phổ biến nên bạn có thể dễ dàng ước tính được các xác suất này.






Naive Bayes được gọi là naive vì nó giả định rằng mỗi biến đầu vào là độc lập. Đây là một giả định mạnh mẽ và không thực tại đối với dữ liệu thực, tuy nhiên, kĩ thuật này rất hiệu quả trên một phạm vi rộng lớn với các vấn đề phức tạp.
K – Nearest Neighbors – KNN

Thuật toán KNN rất đơn giản và rất hiệu quả. Mô hình đại diện cho KNN là tất tật dữ liệu tập huấn. Đơn giản phải không?

Dự đoán được thực hành cho một điểm dữ liệu mới bằng cách tìm thông qua sờ soạng tập đào tạo cho hầu hết các ví dụ K giống nhau (láng giềng) và tóm tắt biến đầu ra cho các thí dụ K. Đối với các vấn đề hồi quy, đây có thể là biến đầu ra làng nhàng, đối với các vấn đề phân loại, đây có thể là mode (hoặc phổ quát nhất) của lớp.

Bí quyết là làm thế nào để xác định sự giống nhau giữa các trường hợp dữ liệu. Kĩ thuật đơn giản nhất nếu các thuộc tính của bạn có cùng kích cỡ (thí dụ vớ đều là inch) là sử dụng khoảng cách Euclide, một con số bạn có thể tâm tính trực tiếp dựa trên sự khác biệt giữa mỗi biến đầu vào.




KNN có thể yêu cầu rất nhiều bộ nhớ hoặc không gian để lưu trữ tuốt luốt dữ liệu, nhưng chỉ thực hiện tính tình (hoặc học) khi một dự báo là cấp thiết, chỉ vừa đúng lúc. Bạn cũng có thể cập nhật và tổ chức các bài tập đào tạo theo thời kì để giữ các dự đoán chuẩn xác.

Ý tưởng về khoảng cách hoặc độ gần có thể bị phá vỡ với các quy mô rất cao (rất nhiều biến đầu vào) có thể ảnh hưởng thụ động đến hiệu suất của thuật toán đối với vấn đề của bạn. Đây được gọi là lời nguyền của quy mô. Nó cho thấy bạn chỉ sử dụng những biến đầu vào có hệ trọng nhất đến dự đoán biến đầu ra.

7. Học Vector Quantization

Nhược điểm của K- Nearest Neighbors là bạn cần phải giữ nguyên bộ dữ liệu đào tạo của mình. Thuật toán Quantization về Vector (hay LVQ) là một thuật toán mạng tâm thần nhân tạo cho phép bạn chọn có bao nhiêu trường hợp đào tạo để treo lên và tìm hiểu chính xác những trường hợp này sẽ như thế nào.




Sự trình diễn cho LVQ là một giao hội các codebook vector. Chúng được lựa chọn tình cờ từ đầu và thích ứng để tóm tắt tốt nhất tập dữ liệu đào tạo qua một số lần lặp của thuật toán. Sau khi học được, các vector mã có thể được sử dụng để tạo ra các dự đoán giống như K- Nearest Neighbors. Các láng giềng hao hao nhất ( ăn nhập với codebook vector nhất ) được tìm thấy bằng cách xem khoảng cách giữa mỗi vector và tỉ dụ dữ liệu mới. Lớp giá trị hoặc (giá trị thực trong trường hợp hồi quy) cho đơn vị kết hợp tốt nhất sau đó sẽ được trả về như dự đoán. Kết quả tốt nhất đạt được khi bạn đổi thay dữ liệu của mình để có cùng khuôn khổ, chẳng hạn như giữa 0 và 1.

Nếu bạn phát hiện ra rằng KNN mang lại kết quả tốt trên tập dữ liệu của bạn, hãy thử dùng LVQ để giảm yêu cầu về bộ nhớ để lưu trữ tất thảy tập dữ liệu đào tạo.

8. Support Vector machines

Support vector machines có nhẽ là một trong những thuật toán machine learning phổ biến nhất và được nói về nhiều nhất.

Một hyperplane là một đường phân chia không gian biến đầu vào. Trong SVM, một hyperplance được chọn để phân tách tốt nhất các điểm trong không gian các biến đầu vào theo lớp của chúng, hoặc là lớp 0 hoặc lớp 1. Trong hai chiều, bạn có thể mường tưởng nó như một đường thẳng và giả tỉ rằng quờ quạng các biến đầu vào của chúng ta có thể được tách hoàn toàn bằng dòng này. Thuật toán SVM tìm ra các hệ số dẫn đến sự phân tích tốt nhất của các lớp theo hyperplance.


Khoảng cách giữa hyperplane và điểm dữ liệu gần nhất được gọi là biên. Hyperplane tốt nhất hoặc tối ưu có thể tách riêng hai lớp là dòng có biên lớn nhất. Chỉ những điểm này có hệ trọng đến việc xác định hyperplane và trong việc xây dựng các điểm phân loại. Những điểm này được gọi là các vector hỗ trợ. Chúng tương trợ hoặc xác định hyperplane. Trong thực tế, một thuật toán tối ưu được dùng để tìm các giá trị cho các hệ số tối đa hóa biên.


SVM có thể là một trong những phương pháp phân loại hàng đầu mạnh mẽ nhất và đáng thử trên tập dữ liệu của bạn.

9. Bagging and Random Forest

Random Forest là một trong những thuật toán machine learning phổ quát nhất và mạnh nhất. Nó là một loại thuật toán machine learning được gọi là Bootstrap Aggregation hoặc Bagging.

Bootstrap là một phương pháp thống kê mạnh mẽ để ước lượng số lượng từ một mẫu dữ liệu. chẳng hạn như một giá trị nhàng nhàng. Bạn lấy rất nhiều mẫu dữ liệu của bạn, tính giá trị nhàng nhàng, sau đó nhàng nhàng toàn bộ các giá trị làng nhàng của bạn để bạn ước tính tốt hơn giá trị nhàng nhàng thật sự.

Trong bagging, cách tiếp cận na ná được dùng, nhưng thay vì để ước lượng tuốt mô hình thống kê, thường là decision trees. Nhiều mẫu dữ liệu đào tạo của bạn được lấy sau đó các mô hình được xây dựng cho mỗi mẫu dữ liệu. Khi bạn cần dự đoán dữ liệu mới, mỗi mô hình sẽ dự đoán và các dự đoán được tính nhàng nhàng để ước tính tốt hơn giá trị đầu ra thật sự.




Random forest là một sự tinh chỉnh trên phương pháp tiếp cận này, nơi các decision trees được tạo ra để thay vì chọn các điểm phân chia tối ưu, việc phân chia tối ưu được thực hiện bằng cách đưa ra sự tình cờ.

Các mô hình được tạo cho mỗi mẫu dữ liệu dị biệt nhiều so với chúng đáng ra phải như thế, tuy nhiên vẫn chính xác theo những cách độc đáo và dị biệt. kết hợp dự đoán của chúng dẫn đến một ước tính tốt hơn về giá trị đầu ra căn bản.

Nếu bạn nhận được kết quả tốt với một thuật toán có độ biến thiên cao (như decision trees), bạn thường có thể nhận được kết quả tốt hơn bằng cách bagging thuật toán đó.

10. Boosting và AdaBoost

Boosting là một kĩ thuật đồng bộ nhằm thế tạo ra một phương pháp phân loại mạnh từ một số phương pháp phân loại yếu. Điều này được thực hiện bằng cách xây dựng mô hình từ dữ liệu đào tạo, sau đó tạo ra một mô hình thứ hai ráng sửa lỗi từ mô hình trước tiên. Các mô hình được thêm vào cho đến khi tập đào tạo được dự đoán hoàn hảo hoặc thêm một số mô hình tối đa.

AdaBoost là thuật toán boosting thành công đầu tiên được phát triển để phân loại nhị phân. Đây là điểm khởi đầu tốt nhất để hiểu về boosting. Các phương pháp boosting đương đại xây dựng trên AdaBoost, đáng chú ý nhất là các máy boosting gradient ngẫu nhiên.



AdaBoost được dùng với các decision trees ngắn. Sau khi cây trước hết được tạo ra, hiệu suất của cây trên mỗi trường hợp huấn luyện được dùng để đo độ để ý của cây kế tiếp được tạo nên để ý đến từng trường hợp đào tạo. Dữ liệu đào tạo khó dự đoán sẽ có trọng lượng hơn, trong khi những trường hợp dễ dự đoán có ít trọng lượng hơn. Các mô hình được tạo theo thứ tự tuần tự, mỗi lần cập nhật các trọng số trên các trường hợp đào tạo ảnh hưởng đến việc học được thực hiện bởi cây kế tiếp trong chuỗi. Sau khi cả thảy các cây được xây dựng, dự đoán được thực hành cho dữ liệu mới, và hiệu suất của mỗi cây được đo lường bằng cách nó đã được về dữ liệu đào tạo.

bởi vì rất nhiều sự để ý được đưa ra để sửa sai trái theo thuật toán, điều quan trọng là bạn phải có dữ liệu sạch với các giá trị biên.

Last Takeaway

Một câu hỏi điển hình được hỏi bởi những người mới bắt đầu, khi phải đối mặt với rất nhiều thuật toán machine learning, là “Tôi nên dùng thuật toán nào?” Câu giải đáp cho câu hỏi thay đổi tùy thuộc vào nhiều nguyên tố, bao gồm:

1) kích tấc, chất lượng và thuộc tính của dữ liệu;

2) thời kì tính;

3) Tính thúc bách của nhiệm vụ; v

4) Bạn muốn làm gì với dữ liệu.

Ngay cả một nhà khoa học dữ liệu giàu kinh nghiệm cũng không thể biết được thuật toán nào sẽ thực hiện tốt nhất trước khi thử các thuật toán khác nhau. dù rằng có nhiều thuật toán machine learning khác, đây là những thuật toán phổ quát nhất. Nếu bạn là một newbie trong mảng machine learning, đây sẽ là một điểm khởi đầu tốt để tìm hiểu.

Chủ Nhật, 25 tháng 2, 2018

Thời gian người dùng là một vấn đề thực sự nghiêm trọng đối với mạng xã hội lớn nhất thế giới Facebook

Những số liệu trong thời gian gần đây đã cho thấy một sự sụt giảm đáng kể về thời kì sử dụng của người Mỹ trên Facebook, trong khi họ lại đầu tư nhiều thời kì hơn vào Google.

Có một sự thực chẳng thể bơ, những số liệu đã chỉ ra rõ ràng là mảng kinh dinh cốt lõi của Facebook đang ngày một gặp vấn đề nghiêm trọng hơn. Biểu đồ dưới đây sẽ miêu tả tất tật.


Đây là biểu đồ minh hoạ tỷ lệ thời kì người dùng Mỹ dành cho các trang web khác nhau khi họ online. Nói một cách đơn giản hơn, nó cho thấy người dùng đang dành bao lăm thời gian giải trí trên những trang như YouTube, Snapchat, Facebook và những trang khác.

 


Đường kẻ màu cam và mày xanh nước biển lần lượt đại hiện cho Google và Facebook

Tháng 8/2016, có thể thấy mọi người dành hầu hết thời gian trên Facebook và các trang web thuộc công ty này (như WhatsApp và Instagram) cũng như trên các trang thuộc sở hữu của Google như YouTube và Google Plus. Hai "người đồ sộ internet" này gần như đã làm nên một cuộc đua song mã khi vấn sự chú ý của người dùng. Thế nhưng không được bao lâu thì khoảng cách giữa hai đường thẳng này đã ngày một rộng hơn trong cả năm 2017.

Biểu đồ này xuất hiện trong một bài đánh giá tiêu cực đối với cổ phiếu Facebook của Brian Wieser, nhà phân tách tại hãng nghiên cứu Pivotal Research, người đã phân tách các số liệu của Nielsen về thời gian sử dụng của người dùng khi trực tuyến. Wieser duy trì mức đánh giá “Nên bán” của mình với Facebook, với mức giá mục tiêu là 152 USD (hiện đang có mức giá 177,91 USD).

Ngoài ra còn một số điểm đáng chú ý khác trong bản đánh giá của Wieser:

- Tháng 11/2017, Google chiếm đến 28,6% thời gian người dùng trên phương tiện truyền thông kỹ thuật số - tăng 5% so với cùng kỳ năm ngoái.

- Facebook lại đang “đi ngược chiều”, khi giảm 4% so với cùng kỳ năm ngoái về thời kì dùng của người dùng dành cho ứng dụng mấu chốt của họ.

Vấn đề này tuồng như chỉ đang ảnh hưởng trực tiếp tới vận dụng mấu chốt của Facebook. Trong khi đó, Instagram vẫn đang chứng kiến đà tăng trưởng về thời kì dùng và số lượng người dùng. WhatsApp và Messenger cũng trong khuynh hướng tăng trưởng.

“Tuy nhiên, với khối lượng hoạt động chỉ bằng 1/10 so với vận dụng flagship (Facebook) đang có, đà tăng trưởng của Instagram hình như tác động tương đối ít đến thay đổi trong cả thảy câu chuyện Facebook.” Wieser cho biết.

“Tính chung cả Facebook, Messenger, Instagram và WhatsApp, mức tăng trưởng của Facebook khá khiêm tốn – chỉ hơn 4% so với cùng kỳ năm ngoái – và hậu quả là thời lượng người dùng của họ trong nhóm ngành tiêu dùng kỹ thuật số đang tiếp chuyện giảm, hiện chỉ ở mức 16,7% so với 18,2% trong một năm trước đây.

 


Instagram và WhatsApp không cản được đà sụt giảm

Có thể nói ngắn gọn: Facebook đã thực hành những bước đi đúng đắn khi mua lại các đối thủ đang nổi lên như Instagram và WhatsApp, nhưng chừng độ phổ quát của chúng không đủ để cản ngăn đà suy giảm của mảng kinh doanh chính.

Đối với Google, YouTube đang trở nên thứ "khí giới" chính. thời gian dùng dành cho YouTube tăng gần 30% sau mỗi tháng, và không giống như Facebook, không có điều gì cho thấy Google đang chứng kiến mức độ sử dụng sụt giảm ở bất kỳ đâu trong mảng kinh dinh của mình.

mặc dầu vậy, Facebook vẫn đang bỏ xa các đối thủ cạnh tranh còn lại của mình, nhưng việc sụt giảm về thời gian dùng trên cũng hạp với một cảnh báo do chính công ty từng đưa ra về việc người dùng đang dành ít thời kì hơn trên nền tảng của họ.

Trong bản mỏng thu nhập quý IV đưa ra vào tháng trước, Facebook tiết lộ mức sụt giảm 5% về số giờ người dùng dành cho trang web của họ. Facebook đã cầm kiểm soát bẩm này, khi cho biết họ đang tinh chỉnh trang News Feed để ưu tiên hơn các cập nhật từ bạn bè và các thành viên trong gia đình, và cảnh báo rằng việc này sẽ dẫn đến sự sụt giảm trong thời lượng dùng.

Các nhà phân tích đã chỉ ra rằng, điều này đã đang xảy ra từ trước khi trang News Feed thực hành thay đổi.

Wieser cũng cảnh báo rằng, không có mối liên hệ trực tiếp giữa thời gian dùng với hiệu suất quảng cáo của Facebook, vì mảng này còn chịu nhiều ảnh hưởng từ các nhân tố khác như chất lượng, mức độ hiệu quả của các quảng cáo sản phẩm đó. Tuy nhiên nếu các nhà lăng xê nhận thức được rằng Facebook đang trở nên ít phổ biến hơn, mọi chuyện sẽ khác. Đó có thể không phải là tin tốt cho tăng trưởng trong dài hạn.

Thứ Sáu, 23 tháng 2, 2018

Phân loại lập trình viên: 16 chức danh bạn nên biết

Ngành phát triển phần mềm luôn thay đổi liên tiếp. Các lĩnh vực mới về chuyên môn, công nghệ, phương pháp mọc lên và tồn tại như nấm sau mưa. đồng thời đó, các thuật ngữ để mô tả và phân biệt các chuyên gia chuyên ngành trở nên một phần chẳng thể tách rời với ngành cũng như với quá trình lăng xê việc làm, xây dựng hình ảnh của công ty.

Trước khi có sự tồn tại của Internet, nhiều chuyên ngành này vốn gần như không tồn tại. Có thể nói chính internet đã cách mạng hoá con đường sự nghiệp của các kỹ sư phần mềm.

Trong bài này, tôi xác định 16 chức danh phổ thông nhất của các lập trình viên, kỹ sư phần mềm với biểu lộ ngắn gọn và danh sách các công nghệ họ dùng cũng như là kỹ năng mà họ phải có. Lưu ý rằng các định nghĩa của các thuật ngữ này phản ảnh sự hiểu biết chuyên môn của tôi, nhưng nó có thể khác nhau tùy thuộc vào công ty, khu vực hoặc ngành.

1 – Front-end Developer

Đây là chức danh của những developer về lập trình giao diện người dùng, bao gồm thẩm mỹ và bố cục của nó. Code của họ chạy trên một trình duyệt web, trên máy tính của người dùng.

Đây là công việc cần hiểu biết nhiều về thẩm mỹ, thường không hề liên can gì tới phần cứng. Nó đòi hỏi sự hiểu biết về các nguyên tắc thiết kế và tương tác của người – máy nhiều hơn lý thuyết về khoa học máy tính. Phần lớn cuộc sống của front end developer được dành để giải quyết các vấn đề về khả năng tương hợp qua trình duyệt và tinh chỉnh chi tiết về mô tả trực quan của giao diện người dùng.

Các kỹ năng phát triển Front-end bao gồm thiết kế giao diện người dùng (UI) và trải nghiệm người dùng (UX), CSS, JavaScript, HTML.

2 – Backend Developer

Đây là nhà phát triển chuyên về thiết kế, khai triển, logic lõi chức năng, hiệu năng và khả năng mở rộng của một phần mềm hoặc hệ thống đang chạy trên các server từ người dùng cuối.

Các hệ thống back-end có thể phát triển rất phức tạp, nhưng sự phức tạp của chúng thường chẳng thể hiện ra ngoài. tỉ dụ: hãy coi xét phương tiện chừng của Google. Phần front-end giao diện là giao diện đơn giản với tiêu đề, hộp văn bản và hai hoặc ba nút. Phần back-end là một hệ thống rất phức tạp, có thể thu thập thông tin web, lập chỉ mục nó, và tìm thấy những gì bạn đang khoảng với hàng loạt các cơ chế phức tạp.

Một back-end developer thường làm việc với các ngôn ngữ lập trình như Java, Php, Ruby, Perl, Python, Scala, Go, C ++ … Các back-end developer thường cần dùng thêm một số phương tiện như cơ sở dữ liệu (database), hệ thống lưu trữ (data storage ), hệ thống log, caching, hệ thống email, v.v.

3 – Full-stack Developer

Đây là một nhà phát triển mà làm cả front lẫn back-end. Anh ta có các kỹ năng cấp thiết để tạo một ứng dụng web đầy đủ chức năng.

4 – Web Developer

Các nhà phát triển web là những kỹ sư phần mềm chuyên tạo các trang web. Họ là các front-end developer, back-end developer và fullstack developer.

Phát triển Web đã trở thành một cách rất phổ quát để bước vào thế giới kỹ thuật phần mềm vào cuối những năm 90 và đầu những năm 2000. Nó không quá khó, chỉ đòi hỏi kiến ​​thức về HTML và CSS tối thiểu. Với chỉ một đôi tháng kinh nghiệm, một nhà phát triển web nghiệp dư đã có thể bắt đầu viết code cho nhiều hệ thống khác nhau. Đây là một lựa chọn đặc biệt quyến rũ đối với những người không có nguyên tắc cơ bản về CS và muốn tham dự vào thế giới lập trình.

5 – Desktop Developer

Đây là nhà phát triển làm việc về các ứng dụng phần mềm chạy trên các hệ điều hành máy tính để bàn (như Mac OS, Windows và Linux).

Trở lại những năm 80, đây là một trong những loại kỹ sư phổ quát nhất, với các platform như Turbo Pascal, Turbo C, Visual Basic, Quick C, Visual Studio và Delphi.

Các nhà phát triển máy tính để bàn thường dùng Bộ công cụ GUI như Cacao, XAML, WinForms, Gtk, v.v.

6 – Mobile Developer

Đây là nhà phát triển viết code cho ứng dụng chạy trực tiếp trên các thiết bị di động như điện thoại sáng dạ và máy tính bảng. Sự bùng nổ của thị trường điện thoại sáng ý đánh giấu cho việc ngày còn có nhiều nhà phát triển di động hơn. Trước đó, phát triển điện thoại di động được coi là một tụ hợp con của embedded development.

Các mobile developer hiểu được sự phức tạp của hệ điều hành di động như iOS và Android, môi trường phát triển và các framework được dùng để viết phần mềm trên các hệ điều hành đó. Điều đó bao gồm Java, Swift và Objective-C.

7 – Graphics Developer

Đây là một nhánh developer chuyên về viết phần mềm để dựng hình, chiếu sáng, che bóng, đánh bóng, tiêu huỷ và quản lý cảnh. Những nhà phát triển này thường chịu trách nhiệm về việc tích hợp công nghệ vào ngành sinh sản game và video.

Phát triển đồ họa được dùng là một hình thức low-level development (low-level không phải chỉ về đẳng cấp lập trình mà nói về độ khó), đòi hỏi sự đào tạo về toán và khoa học máy tính nâng cao. Tuy nhiên ngày nay nó trở thành dễ tiếp cận hơn với việc có nhiều framework thương mại hóa và mã nguồn mở. Ví dụ, rất ít người ngày nay cần để có thể viết một shader từ con số không, không cần sáng tạo lại chiếc bánh xe.

Nhiều framework đã include DirectX, OpenGL, Unity 3D, WebGL. Đối với các nhà phát triển đồ họa cao cấp, low-level development luôn sử dụng C, C ++ và Assembly.

8 – Game Developer

Đây là thuật ngữ chung để xác định một nhà phát triển chuyên làm game. Họ thường có kiến ​​thức, kỹ năng cụ thể trong việc thiết kế và triển khai các trải nghiệm chơi game và tương tác trong nó.

Những framework được các nhà phát triển trò chơi dùng bao gồm DirectX, OpenGL, Unity 3D, WebGL và các tiếng nói như C, C ++ và Java. Adobe Flash đã từng là nền móng làm game tiêu chuẩn cho các trò chơi trên web. Vì Flash đang bị quên lãng, nên JavaScript và HTML5 trở nên tiêu chuẩn mới. Trên thiết bị di động, Swift và Java hiện là công nghệ được chọn lọc cho các trò chơi iOS và Android.

9 – Data Scientist

Chức danh này dùng để chỉ những ai viết chương trình phần mềm để phân tích dữ liệu. Họ thường đảm đang phân tích thống kê, machine learning, data visualization, và mô hình tiên lượng.

Các ngôn ngữ được các data scientist dùng bao gồm SQL, R và Python.

10 – Big Data Developer

Big data developer viết các chương trình phần mềm để lưu trữ và truy xuất số lượng lớn dữ liệu trong các hệ thống như kho dữ liệu, hệ thống ETL (Extract Transform Load), relational databases, các hệ thống quản lý hồ sơ dữ liệu …

Một big data developer thường thân thuộc với các framework, hệ thống để lưu trữ và xử lý phân phối số lượng lớn dữ liệu như MapReduce, Hadoop và Spark. ngôn ngữ được dùng bao gồm SQL, Java, Python và R.

11 – DevOps Developer

Đây là một kiểu developer về các công nghệ cấp thiết cho sự phát triển của các hệ thống để xây dựng, triển khai, tích hợp và quản lý phần mềm và hệ thống phân phối.

Các công nghệ được sử dụng bởi DevOps Engineers bao gồm Kubernetes, Docker, Apache Mesos, HashiCorp stack (Terraform, Vagrant, Packer, Vault, Consul, Nomad), Jenkins, v.v.

12 – CRM Developer

Kiểu nhà phát triển này tập kết về lĩnh vực hệ thống thu thập dữ liệu người dùng và người tiêu dùng. Họ có nhiệm vụ nâng cao sự ưng của khách hàng và bán hàng bằng cách cải tiến công cụ được dùng bởi các đại diện hỗ trợ khách hàng, quản lý tài khoản và đại diện bán hàng.

Các công nghệ được các nhà phát triển sử dụng bao gồm SAP, Salesforce, Sharepoint, và ERP (Enterprise Resource Planning).

13 – Kỹ sư phát triển phần mềm cho test (SDET)

Kiểu nhà phát triển này có trách nhiệm viết phần mềm để công nhận chất lượng của hệ thống phần mềm. Họ tạo ra các bài soát, phương tiện và hệ thống tự động để đảm bảo rằng các sản phẩm và quy trình chạy như trông đợi.

Các công nghệ được SDET dùng bao gồm Python, Ruby và Selenium.

14 – Nhà phát triển lập trình nhúng – Embedded Developer

Những nhà phát triển này chuyên làm việc với phần cứng. thí dụ, vi điều khiển, hệ thống thời kì thực, giao diện điện tử,set-top box, thiết bị tiêu dùng, thiết bị iOT, trình điều khiển phần cứng và truyền dữ liệu nối tiếp nằm trong thể loại này.

Các nhà phát triển nhúng thường làm việc với các tiếng nói như C, C ++, Assembly, Java hoặc công nghệ độc quyền, các framework và toolkits.

15 – WordPress Developer

Tôi thêm các nhà phát triển WordPress trong danh sách này vì họ là một nhóm các nhà phát triển web đặc biệt. Họ tạo và tùy chỉnh các themes, plugin cho WordPress và quản lý các trang web WordPress.

Kiểu nhà phát triển này sử dụng hệ thống WordPress, PHP, JavaScript và HTML.

16 – Security Developer

Kiểu developer này chuyên về việc tạo ra các hệ thống, phương pháp và thủ tục để rà tính bảo mật của một hệ thống phần mềm và sửa các lỗi bảo mật. Kiểu nhà phát triển này thường hoạt động như một hacker có đạo đức gọi là ” mũ trắng” và vậy xâm nhập vào các hệ thống nhằm để phát hiện các lỗ hổng.

Các security developer thường viết các phương tiện bằng các ngôn ngữ script như Python hoặc Ruby và hiểu chi tiết các cách thức được sử dụng để tấn công các hệ thống phần mềm. Các security developer cấp cao thường phải đọc và hiểu thêm về mã nguồn của hệ điều hành được viết bằng C và C ++. Họ cũng có thể bóc tách ngược các thư viện và các hệ thống phần mềm thương nghiệp để tìm và khai hoang lỗ hổng.


Kết luận

Có rất nhiều hướng đi mà các nhà phát triển phần mềm có thể tham dự và phát triển trong sự nghiệp của họ. Bất kể bạn bắt đầu với đại học hay chỉ đơn giản là tự học, hoặc có thể xông pha nghiên cứu làm web với project cá nhận hay tạo ra một trò chơi hàng triệu dollar khi tinh nghịch với chiếc Iphone, mọi thứ đều có thể.

Một khi bạn chọn một con đường, bạn vẫn có thể đổi thay và cập nhật bản thân. Ngay cả khi bạn đã gắn bó với một con đường cho vớ sự nghiệp của mình, bạn sẽ không bao giờ hết thứ để học. Công nghệ phát triển nhanh tới mức việc bạn bị tụt hậu lại phía sau còn dễ hơn là trở thành chán nản bởi chúng.

Thứ Năm, 22 tháng 2, 2018

Hằng số trong PHP

học lập trình php ở hà nội

Một hằng (constant) là một tên hoặc một định danh cho một giá trị đơn. Giá trị của hằng không thể đổi thay trong quá trình thực thi script. Theo mặc định, một hằng là phân biệt kiểu chữ. Theo qui ước, các định danh hằng luôn luôn là chữ hoa. Tên hằng bắt đầu với một chữ cái hoặc dấu gạch dưới ( _ ), được theo sau bởi bất kì số lượng chữ cái, số hoặc dấu gạch dưới nào. Nếu bạn đã định nghĩa một hằng số, nó có thể không bao giờ được đổi thay hoặc định nghĩa lại.
 
Để định nghĩa một hằng số trong PHP, bạn phải dùng hàm define() và để lấy giá trị của một hằng, bạn phải chỉ ra tên của nó. Không giống như biến, bạn không cần thêm $ vào hằng. Bạn cũng có thể dùng hàm constant() để đọc một giá trị của hằng nếu bạn muốn lấy tên của hằng một cách linh hoạt.
Hàm constant() trong PHP

Như tên hàm đã đề cập, hàm này sẽ trả về giá trị của hằng số.

Điều này là rất bổ ích khi bạn muốn lấy giá trị của một hằng, nhưng bạn không biết tên của nó, ví du: nó được lưu giữ trong một biến hoặc được trả về bởi một hàm.
thí dụ hàm constant() trong PHP

Chỉ có dữ liệu vô hướng (Boolean, integer, float và string) có thể được giữ trong các hằng số.
Khác nhau giữa hằng số và biến trong PHP là:

Để định nghĩa biến cần viết kí tự $ vào trước, trái lại hằng thì không cần.

Hằng chẳng thể được định nghĩa bằng phép gán đơn giản, chúng chỉ có thể được định nghĩa bằng cách sử dụng hàm define().

Hằng có thể được định nghĩa và truy cập bất cứ đâu mà không quan hoài đến lệ luật phạm vi biến.

Một hằng khi đã được định nghĩa, nó chẳng thể định nghĩa lại hoặc hủy định nghĩa.

Tên hằng hợp lệ và không hợp thức trong PHP
// Ví dụ các tên hằng hợp lệ
define("ONE",     "tỉ dụ tên hằng hợp thức 1");
define("TWO2",    "thí dụ tên hằng hợp lệ 2");
define("THREE_3", "thí dụ tên hằng hợp lệ 3")

// tỉ dụ các tên hằng không hợp thức
define("2TWO",    "thí dụ tên hằng không hợp thức 1");
define("__THREE__", "Ví dụ tên hằng không hợp lệ 2"); 

Hằng số Magic trong PHP

PHP cung cấp một số lượng lớn các hằng số được định nghĩa trước để bất kỳ script nào cũng có thể dùng nó.

Có 5 hằng số magic, thay đổi tùy thuộc vào nơi chúng được dùng. tỉ dụ, giá trị của __LINE__ phụ thuộc vào dòng mà nó được sử dụng trong script của bạn. Các hằng đặc biệt này là phân biệt kiểu chữ.

Bảng dưới liệt kê một số hằng magic trong PHP:
Tên biểu đạt
__LINE__ Dòng hiện tại của file
__FILE__ Đường dẫn đầy đủ và tên đầy đủ của file. Nếu dùng bên trong một include thì tên của file được include sẽ được trả về. Từ PHP 4.0.2, __FILE__ xoành xoạch chưa một đường dẫn tuyệt đối, trong khi ở phiên bản cũ hơn chúng chứa đường dẫn tương đối trong một số trường hợp
__FUNCTION__ Tên của hàm. (Được thêm trong PHP 4.3.0) Như PHP 5, hằng số này trả về tên của hàm như nó đã khai báo trước đó (phân biệt kiểu chữ). Trong PHP 4, giá trị của nó luôn là chữ in thường
__CLASS__ Tên của lớp. (Được thêm trong PHP 4.3.0) Như PHP 5, hằng số này trả về tên của lớp như nó đã khai báo trước đó (phân biệt kiểu chữ). Trong PHP 4 giá trị của nó luôn là chữ in thường
__METHOD__ Tên phương thức lớp. (Được thêm trong PHP 5.0.0) Tên phương thức này được trả về như đã khai báo trước đó (phân biệt kiểu chữ).

Thứ Tư, 21 tháng 2, 2018

Không có bằng cấp 3 lẫn đại học, tôi đã trở thành kỹ sư của Facebook như thế nào?

Sau đây là câu chuyện của Evan Priestley, một lập trình viên thậm chí không có cả bằng tốt nghiệp phổ thông lẫn đại học, đã đảm nhiệm vị trí kĩ sư phần mềm tại Facebook từ 2007 đến 2011. Evan từng gây tranh cãi khi công khai nhận xét rằng Facebook “là chương trình có nhiều bug nhất trên thế giới”. Anh cũng nổi danh trên Quora (Top Writer 2012) với những đóng góp xuất sắc cho phần nội dung liên quan đến Phabricator – một ứng dụng mã nguồn mở được viết bằng PHP, giúp quản lý dự án phần mềm dễ dàng hơn.
Và câu chuyện bắt đầu

Bằng cách huyền diệu nào mà tôi đã kiếm được việc ở Facebook, dù không bằng cấp?

Nói luôn cho nó vuông: thì miệt mài làm việc suốt nhiều năm, chứ sao!

Tôi thực sự rất, rất thích lập trình. Trong 4 năm trở lại đây, tôi không làm gì khác ngoài công việc ấy. Trước đó, tôi làm việc toàn thời gian 2.5 năm, nhiệm vụ: lập trình phần mềm. Trước đó nữa, gần 6 năm, tôi cũng lập trình liên tục – cho dù không phải để kiếm cơm mà chỉ vì sở thích. Tôi bỏ học đại học, thậm chí bỏ ngang cấp 3 – và dành toàn bộ thời gian cho lập trình. Mới gần đây, tôi nghỉ việc ở Facebook, và bạn thử đoán xem? Đúng vậy, tôi vẫn đang lập trình.

Còn để kể lể dông dài, có lẽ nên bắt đầu từ…

1. Lí do tại sao tôi bỏ học ở trường.

Từ nhỏ, tôi đã cực kì hứng thú với máy tính. Năm 8 hay 9 tuổi, tôi học một chút BASIC và đã dùng nó để để viết những chương trình như thế này trên chiếc máy tính Apple IIe ở trường.

10 PRINT "HACKING "
20 PRINT RANDOM()
30 GOTO 10

Cú pháp của chương trình chắc không còn hợp lệ, song nó cũng đã kịp hiện đầy màn hình những con số ngẫu nhiên khiến một thằng nhóc 9 tuổi ngu ngơ phải sửng sốt vì thích thú.

Tôi cũng mê chơi game từ rất sớm, đã bỏ ra không biết bao nhiêu thời gian để cày Escape Velocity. Sau đó, tôi thậm chí còn cùng với một số người chơi khác thiết kế thêm màn chơi cho game này bằng cách chỉnh sửa resources với ResEdit. Chúng tôi đã làm được một màn chơi lớn có tên là “Final Battle” cho game. Năm đó tôi 12 tuổi. Ừ thì việc này không hẳn là lập trình, song nó vẫn liên quan nhiều đến kĩ thuật và giúp cho tôi làm quen với một số khái niệm cơ bản.

Thấy tôi muốn tự viết game quá, nên cũng năm đó, ba mẹ tặng tôi nhân dịp sinh nhật một CD giới thiệu về lập trình (Metrowerks CodeWarrior IDE), kèm theo một đống sách PDF về các ngôn ngữ lập trình và thư viện khác nhau. Tôi nghiêm túc chìm đắm trong đó suốt một năm ròng. Nhờ vậy, tôi đã học C (ở mức độ căn bản) trong vòng 2 tuần, rồi tiếp tục học về C/C++ và viết chương trình, tiếp đến là OpenGL. Lúc đó là OS9 và tôi nghĩ IIsi là máy tính cá nhân của tôi tại thời điểm này.

Metrowerks CodeWarrior IDE, chương trình được Evan sử dụng trong những ngày đầu học lập trình

Thế rồi nhiều chuyện liên tiếp xảy ra: chuyển nhà, ba mẹ ly hôn, trường học thì buồn tẻ. Tôi chán nản, và tiếc nuối cho bản thân mình, rất nhiều.

Suốt 5 năm, tôi hầu như không thể tập trung làm việc gì. Dĩ nhiên tôi vẫn phát triển kĩ năng theo hướng trở thành lập trình viên, song mọi chuyện tiến triển vô cùng chậm chạp. Tôi chọn học PHP, và dùng nó để làm một trang gọi là Runica – cho phép tìm kiếm runewords trong game Diablo II. Trang web cũng có một vài thứ hay ho, ví dụ như đạt được 1 triệu lượt truy cập, và mở mắt cho tôi về scale của web. Dầu vậy, cuối cùng tôi vẫn quyết định bỏ học phổ thông.

Vào cuối tháng 9 năm tôi 19 tuổi, một người bạn của tôi kết thúc đợt thực tập. Công ty nhờ anh ấy giới thiệu giúp người thay thế. Anh ấy giới thiệu tôi. Thế là, tháng 9 năm đó, tôi được nhận vào làm ở Portland Webworks.

Cùng thời gian này, tôi đăng kí học ở trường đại học Southern Maine, chuyên ngành Khoa học máy tính (Computer Science – CS), với kì vọng trải nghiệm ở đại học sẽ khá hơn so với thời cấp 3. Tôi chọn 2 hay 3 lớp CS gì đấy. Song, rất tiếc, tôi vẫn cảm thấy những gì mình thu nhận được từ trường lớp là không bõ công (bởi vì, đến lúc đó tôi đã tự học lập trình được 6 năm). Tôi bèn chuyển qua học Hóa Sinh và đăng kí liền tù tì một đống môn học cùng lúc.

Nhưng rồi công việc ở công ty ngày càng bận, tôi ngày càng ít có thời gian đến lớp. Tôi đành chuyển qua học Toán, với kì vọng sẽ gom đủ tín chỉ để được tốt nghiệp. Sau rốt, tôi vẫn không có đủ quyết tâm hoàn thành các môn đọc/viết/nhân văn. Bởi vậy, khi nghỉ làm ở Portland Webworks (sau 2.5 năm), tôi cũng dừng học đại học luôn.

Nguyên nhân, có lẽ là vì tôi mau chán với những điều được giảng dạy, việc phải đến lớp, phải làm các thể loại bài tập, vân vân và mây mây – trong khi lại không thấy rõ được lợi ích của chúng. Tôi không tự phụ là mình thông minh hơn người gì đâu nhé. Nhưng hồi phổ thông, tôi học ở một trường công lập nhỏ ở Maine, và năm lớp 11, chúng tôi đã phải bỏ ra tới 2 tuần để học về hệ thống đo lường! Có thể, đó không phải là lỗi của nhà trường. Chỉ đơn giản, đó là cách mà trường học hoạt động, trong khi thế giới bên ngoài lại được vận hành theo một cách hoàn toàn khác.

Cũng như vậy, trường đại học đối với cá nhân tôi là một trải nghiệm tốt, song có rất nhiều điều đang được phát triển ở xã hội ngoài kia cuốn hút tôi hơn. Thôi thì, chí ít tôi đã rời khỏi trường học với khoản nợ ít hơn 7000usd.
2. Tôi kiếm được việc ở Facebook như thế nào.

Như đã nói ở trên, tôi bắt đầu làm việc cho Portland Webworks năm 19 tuổi. Đó cũng là “công việc thực sự” đầu tiên mà tôi có được.

Công ty nhỏ, nên tôi được quyền tự do làm theo ý muốn. Suốt thời gian 2.5 năm làm việc ở Portland Webworks, công việc chính của tôi là bảo trì toàn bộ code do mình tự viết ra. Nhờ tham gia vào toàn bộ vòng đời của một phần chương trình, tôi cũng học được bài học quan trọng: cần phải cẩn trọng với mọi quyết định khi thiết kế hệ thống – nếu không muốn lãnh chịu nhiều hậu quả đớn đau về sau.

Đến khoảng đầu năm 2007, Portland Webworks bắt đầu lớn mạnh, việc học đại học của tôi cũng vừa dừng lại. Một lần, đang lướt Reddit thì tôi vô tình trông thấy bài toán tuyển dụng của Facebook, bèn gửi lời giải. Ít lâu sau, tôi được nhận và bắt đầu làm việc ở Facebook từ tháng 4/2007.

Tôi đã cày cuốc cực kì chăm chỉ ở Facebook, thậm chí còn cày dữ hơn cả thời làm cho Portland Webworks. Không theo học đại học nữa, thời gian của tôi cũng không còn bị phân mảnh. Có những thời điểm, tôi làm 40 tiếng/tuần, chưa kể cày OT cho đến “kịch trần” tổng số giờ được phép theo luật.

Điều tôi gặt hái được nhiều nhất từ 4 năm làm việc cho Facebook, có lẽ là rèn luyện khả năng đánh giá tốt hơn. Hồi mới đi làm, tôi đã đưa ra rất nhiều quyết định sai lầm khi thiết kế hệ thống. Nhưng khi được thuê vào Facebook, tôi đã tích lũy đủ kinh nghiệm để cân bằng giữa tính đơn giản và sự phức tạp, hoặc chỉ ra được vấn đề mà các hệ thống khác gặp phải. Khả năng này rất khó để rèn luyện, và cũng rất khó để có thể hướng dẫn lại cho người khác – song lại cực kì đáng giá. Cách tốt nhất để có được nó, theo tôi, là phải bảo trì hệ thống do chính mình phát triển trong một khoảng thời gian đủ dài với những yêu cầu liên tục thay đổi.

Cũng chính vì vậy, tôi không tán thành cho lắm khẩu hiệu “Move Fast and Break Things” của Facebook. Dường như Facebook (và dường như hầu hết các doanh nghiệp trong ngành công nghệ phần mềm hiện nay) đều tin (ở một mức độ nào đó) vào sự đánh đổi chất lượng cho tốc độ. Cho nên, mọi người sẵn sàng chọn tốc độ, và không mấy ai cảm thấy khó chịu về chuyện không viết code một cách đúng đắn – vì đó là sự đánh đổi dĩ nhiên.
 Mark Zuckerberg tại hội nghị F8 của Facebook

Tôi thì không nghĩ vậy. Khẩu hiệu đó, diễn giải trắng phớ ra, chẳng phải nghĩa là: “Nếu xây dựng một hệ thống thật tệ hại, chúng ta sẽ có thể triển khai nó thật nhanh. Còn nếu cố xây dựng một hệ thống đủ tốt, chúng ta sẽ không bao giờ có thể triển khai nó?”

Cá nhân tôi cho rằng:
Bạn phải hành động nhanh hơn để xây dựng phần mềm có chất lượng. Nếu không, bạn sẽ không thể phản ứng kịp khi mọi thứ, nhất là sự hiểu biết của bạn, thay đổi – và khi phần mềm của bạn không phải là giải pháp tốt cho vấn đề.
Nhưng, bạn cũng phải xây dựng phần mềm có chất lượng để hành động nhanh hơn. Nếu không, hạ tầng hệ thống của bạn sẽ luôn có vấn đề, và rốt cuộc, bạn sẽ tốn rất nhiều thời gian để xử lý. Mà, một khi hệ thống đổ vỡ, ý chí của bạn sẽ lung lay theo.
3. Lời khuyên của tôi dành cho các bạn trẻ muốn học lập trình.

Trước tiên, tôi muốn được chia sẻ một chút về việc nên chọn học ngôn ngữ lập trình nào. Thú thực, ngôn ngữ mạnh nhất của tôi là PHP – thứ ngôn ngữ bị đánh giá là xấu xí, và bị nhiều lập trình viên rẻ rúng. Song, cũng nhờ PHP mà tôi kiếm được việc làm ở Portland Webworks, và sau đó là ở Facebook.

Trong 4 năm làm việc cho Facebook, tôi hay tự miêu tả mình là “kĩ sư phần mềm ít ghét PHP nhất”, và cũng hay được mọi người gọi là “nhà bác học PHP ngu ngốc”. Dù không thực sự là fan của PHP, kiến thức của tôi về nó thực sự sâu sắc. Và nó cũng là động lực để tôi học những thứ khác.

Bởi vậy, tôi nghĩ sự lựa chọn ngôn ngữ không quá quan trọng như mọi người nghĩ. Mà chính ra, tôi thấy những ai hay chê bai PHP, hoặc khóc lóc rên rỉ suốt ngày về tầm quan trọng của việc lựa chọn ngôn ngữ – thì lại thường chả làm được gì ra hồn với chính thứ ngôn ngữ mà họ ca tụng.

Còn sau đây là một số lời khuyên của tôi cho các bạn trẻ:
Nghỉ học ở trường ngay lập tức. (Hihi, đùa thôi. Trường học nhìn chung cũng tốt, nhưng bạn nên uống thêm vitamin trong thời gian còn ở đây nhé.)
Hãy chắc chắn là bạn thật sự thích lập trình.
Bỏ ra thật nhiều thời gian để rèn luyện. Không có con đường tắt nào cả, và hầu hết mọi bài học đáng giá đều được tích lũy thông qua kinh nghiệm và sai lầm.
Kĩ năng quan trọng nhất: đánh giá thiết kế một hệ thống. Nhờ vậy, bạn sẽ lựa chọn được các giải pháp càng đơn giản càng tốt – song lại không quá đơn giản. Kĩ năng này cũng không có cách rèn luyện nào khác ngoài kinh nghiệm thực tế.
Học rộng sẽ tốt hơn là học sâu. Kĩ năng theo chiều rộng sẽ hỗ trợ lẫn nhau, và giúp bạn khai phá những điều mới. Kĩ năng chuyên sâu chỉ hỗ trợ bản thân chúng. Bạn sẽ phát triển nhanh hơn khi có được hiểu biết về toàn bộ hệ thống, thay vì chỉ hiểu rõ một phần nhất định.
Để học bất kì hệ thống phức tạp nào (kể cả trong lập trình hay mọi thứ khác), bạn hãy hình dung mô hình hoạt động của hệ thống đó ở mức độ bao quát nhất, sau đó chỉnh sửa dần. Khi đủ phức tạp, mô hình của bạn sẽ cho phép dự đoán các hoạt động của hệ thống, và cuối cùng, sẽ giúp đánh giá của bạn trở nên hợp lý.
Chất lượng vs. tốc độ chỉ là sự đánh đổi cục bộ. Nhìn một cách toàn diện, việc hi sinh cái này sẽ dẫn đến làm hỏng luôn cái kia.
Nên luôn luôn tìm hiểu nguyên nhân và cách thức mà mọi sự việc xảy ra.

Thứ Năm, 8 tháng 2, 2018

Activity trong Android


ảnh minh họa - Khóa họcAndroidNếu bạn đã từng làm việc với tiếng nói lập trình C, C++ hoặc Java thì bạn phải thấy rằng chương trình của bạn bắt đầu từ hàm main(). rưa rứa, hệ điều hành Android khởi tạo chương trình của nó bên trong một Activity bắt đầu với một lời gọi trên phương thức callback là onCreate(). Có một dãy các phương thức callback mà phát động một Activity và một dãy phương thức callback khác sẽ hủy một Activity như sau trong sơ đồ vòng đời của Activity. (image courtesy : android.com )   Lớp Activity định nghĩa các callback như events, … Bạn không cần triển khai tất tật phương thức này. Tuy nhiên, điều quan yếu là bạn hiểu từng phương thức và triển khai chúng để sao cho vận dụng của bạn vận hành theo cách người dùng mong đợi. 

Callbackthể hiện

onCreate()Đây là phương thức callback đầu tiên và được gọi khi Activity được tạo trước hết

onStart()Phương thức callback này được gọi khi Activity trở nên nhìn thấy tới người dùng

onResume()Được gọi khi người dùng bắt đầu tương tác với áp dụng

onPause()Activity tạm dừng không nhận input từ người dùng và không thể thực thi bất cứ code nào và được gọi khi activity hiện tại đang được dừng và activity trước đó đang được phục hồi

onStop()Callback này được gọi trươc skhi activity bị hủy bởi hệ thống

onDestroy()Callback này được gọi trươc skhi activity bị hủy bởi hệ thống

onRestart()Được gọi khi activity tái khởi động sau khi dừng nó



tỉ dụ

Ví dụ này đưa bạn qua các bước đơn giản để minh họa vòng đời của Activity trong áp dụng Android. Bạn theo các bước sau để sửa đổi áp dụng Android mà chúng ta đã tạo trong chương thí dụ Hello World


Bướcbiểu lộ

1Bạn sẽ sử dụng Eclipse IDE để tạo một vận dụng Android và đặt tên nó làHelloWorld dưới một package là com.example.helloworld như đã giải thích trong chương Ví dụ Hello World

2Sửa đổi MainActivity.java như dưới đây. Phần còn lại không thay đổi

3Chạy vận dụng để chạy Android Emulator và kiểm tra kết quả các thay đổi đã thực hành trong áp dụng này

  Dưới đây là nội dung của main activity đã sửa đổi src/com.example.helloworld/MainActivity.java. File này bao gồm các phương thức nền tảng. Phương thức Log.d() đã được dùng để tạo thông báo log:

 package com.example.helloworld; import android.os.Bundle; import android.app.Activity; import android.util.Log; public class MainActivity extends Activity  String msg = "Android : "; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState)  super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(msg, "The onCreate() event");  /** Called when the activity is about to become visible. */ @Override protected void onStart()  super.onStart(); Log.d(msg, "The onStart() event");  /** Called when the activity has become visible. */ @Override protected void onResume()  super.onResume(); Log.d(msg, "The onResume() event");  /** Called when another activity is taking focus. */ @Override protected void onPause()  super.onPause(); Log.d(msg, "The onPause() event");  /** Called when the activity is no longer visible. */ @Override protected void onStop()  super.onStop(); Log.d(msg, "The onStop() event");  /** Called just before the activity is destroyed. */ @Override public void onDestroy()  super.onDestroy(); Log.d(msg, "The onDestroy() event");  

Một lớp Activity tải tất cả thành phần UI bởi sử dụng XML file có sẵn trong thư mục res/layout của project. Lệnh sau tải các thành phần UI từ res/layout/activity_main.xml file:

 setContentView(R.layout.activity_main);

Một áp dụng có thể có một hoặc nhiều Activity mà không có bất kỳ giới hạn nào. Mỗi Activity bạn định nghĩa cho áp dụng của bạn phải được khai báo trongAndroidManifest.xml file và main activity cho vận dụng phải được khai báo trong manifest với một mà bao MAIN action và LAUNCHER category, như sau:

          

 


Nếu hoặc MAIN hoặc LAUNCHER không được khai báo, thì biểu tượng áp dụng sẽ không xuất hiện trong danh sách vận dụng của màn hình Home.

Giờ bạn thử chạy vận dụng Hello World! đã được sửa đổi. giả như bạn đã tạo AVDtrong khi cài đặt. Để chạy áp dụng từ Eclipse, mở activity file của project và nhấn biểu tượng Run
từ thanh công cụ. Eclipse sẽ đặt ứng dụng trên AVD và bắt đầu nó và nếu mọi thứ là ổn, nó sẽ hiển thị cửa sổ Emulator và bạn sẽ thấy thông báo log sau trong cửa sổ LogCat trong Eclipse IDE.

 

 

 07-19 15:00:43.405: D/Android :(866): The onCreate() event 07-19 15:00:43.405: D/Android :(866): The onStart() event 07-19 15:00:43.415: D/Android :(866): The onResume() event


 



Bạn thử nhấn nút Red 
 trên Android Emulator và nó sẽ tạo thông báo event sau trong cửa sổ LogCat trong Eclipse IDE.

 

 

 07-19 15:01:10.995: D/Android :(866): The onPause() event 07-19 15:01:12.705: D/Android :(866): The onStop() event 


Bạn thử nhấn nút Menu 
 trên Android Emulator và nó sẽ tạo thông báo event sau trong cửa sổ LogCat trong Eclipse IDE:

 

 

 07-19 15:01:13.995: D/Android :(866): The onStart() event 07-19 15:01:14.705: D/Android :(866): The onResume() event 


Tiếp theo, bạn thử nhấn nút Back  trên Android Emulator và nó sẽ tạo thông báo event sau trong cửa sổ LogCat trong Eclipse IDE và đến đây là chấm dứt vòng đời của Activity cho một ứng dụng Android.

 

 

 07-19 15:33:15.687: D/Android :(992): The onPause() event 07-19 15:33:15.525: D/Android :(992): The onStop() event 07-19 15:33:15.525: D/Android :(992): The onDestroy() event 

 

Thứ Ba, 6 tháng 2, 2018

CÁCH THIẾT LẬP PATH TRONG JAVA

Thiết lập path trong Java là rất cần thiết nếu bạn cần dùng các tool can dự đến javac hoặc java (dùng terminal chả hạn)

 

 

 

Vào MyComputer properties -> advanced tab -> environment variables -> tạo tab mới user variable -> viết giá trị path trong tên biến -> dẫn đến thư mục bin của cài đăt java -> ok -> ok -> ok

 

Dưới đây là các thẩm tra classpath của ngôn ngữ Java. Bạn nhớ phải phát động lại máy sau khi thiết lập classpath nhé.
 

THIẾT LẬP CLASSPATH TRONG HỆ ĐIỀU HÀNH LINUX

Bạn có thể thiết lập classpath bằng cách sau đây:

export PATH=$PATH:/home/jdk1.6.01/bin/

Bạn có thể tham khảo thêm các thiết lập classpath tại địa chỉ https://java.com/en/download/help/path.xml

Bài 01: Hướng dẫn cài đặt vertrigo server

Bài 01: chỉ dẫn cài đặt vertrigo server

Như ta biết thì PHP là một tiếng nói chạy trên Server nên ta cần một Server ảo để biên dịch những dòng lệnh đó. hiện giờ có rất nhiều phần mềm server như XAMPP, WAMP, VERTRIGO, nhưng trong quá trình sử dụng tôi nhận thấy Vertrigo là dễ xài nhất nên trong bài này tôi sẽ Hướng dẫn các bạn cài đặt Vertrigo Server có hình ảnh minh họa.
1. Các bước cài đặt Vertrigo Server
Bước 1: Download Vertrigo Server 2.27 tại đây.

Bước 2: Bạn chạy file setup Vertrigo_227.exe vừa download

Bước 3: Giao diện sẽ như sau, bạn click Next
 

Bước 4: Click Agree để đồng ý với những điều khoản
 

Bước 5: Click Next
 

Bước 6: Chọn đường dẫn cài đặt. Click Next.
 

Bước 7: Click Install. Tiến trình cài đặt vertrigo server sẽ chạy mất một khoảng thời kì.
 

Bước 8: Sau khi cài đặt xong bạn click vào Run Vertrigo Server và click Finish. Hãy nhớ rằng trước khi nhấn Finish bạn phải tắt skype đi nhé, vì nó chiếm cổng 80 (cổng mặc định để chạy Server). Sau này mỗi lần chạy Vertrigo bạn phải tắt Skype hoặc bạn đổi cổng cho Skype qua một cổng khác.
 

Bước 9: Sau khi hoàn thành bạn mở một trình duyệt bấy kì rồi gõ vào localhost. Nếu giao diện hiện ra như sau là bạn đã cài đặt thành công.
 
2. Thư mục chứa source của ứng dụng

Nơi chứa source chạy ứng dụng nằm trong thư mục www mà bạn đã Install (đường dẫn bạn chọn ở bước 6). Bạn vào đó và xóa hết tuốt tuột các files, folders để tiện làm việc sau này hơn. Sau khi xóa bạn ra trình duyệt gõ lại đường dẫn localhost thì trình duyệt thông tin không tìm thấy, lý do là bạn đã xóa hết các file trong thư mục www rồi.

Thư mục www này rất quan trọng sau này tôi nói tạo file mới thì bạn nhớ là tạo trong này nhé.
 
3. Lời kết

chấm dứt bài này là bạn có thể tự cài đặt vertrigo server cho riêng mình được rồi đấy. Nếu bạn không muốn xài vertrigo server thì có thể chọn một số phần mềm khác như Wamp hay Xampp.

Thứ Bảy, 3 tháng 2, 2018

Developer của Việt Nam đang đứng vị trị nào trên bản đồ năng lực lập trình


Theo nghiên cứu mới nhất của HackerRank, Việt Nam xếp thứ 23 thế giới về năng lực developer, còn theo kết quả mới nhất trên đấu trường CodeFights thì developer Việt Nam cũng đang chiếm giữ nhiều vị trí dẫn đầu. Có thể khẳng định một điều kiên cố rằng, năng lực của developer Việt Nam không hề kém cạnh bạn bè quốc tế. 

Với sự phát triển vũ bão của công nghệ đã mở ra một thị trường khôn xiết tiềm năng cho các developer phát triển. Trong đó, Việt Nam luôn được đánh giá là một trong những “mỏ vàng” về nhân công IT trẻ, chất lượng. Do đó, càng ngày càng có nhiều công ty về công nghệ đã “chọn mặt gửi vàng” tại thị trường Việt Nam, và IT Consultis – công ty chuyên cung cấp giải pháp kỹ thuật số đa nhà nước, cũng đã lựa chọn như vậy. 

Cùng TopDev chuyện trò cùng Mr Thomas Guillemaud – Co-founder & COO của IT Consultis phân tách những ưu – nhược điểm của developer Việt Nam hiện. 


1. Anh có thể giới thiệu đôi nét về bản thân cũng như về IT Consultis được không? 

Tôi là Thomas Guillemaud – Co-founder & COO của IT Consultis, là một digital agency được thành lập vào năm 2011 bởi 3 thành viên là Yoan Rigart-Lenisa, Aurelien Rigart và tôi . Chỉ trong 6 năm, IT Consultis đã phát triển chóng vánh với đội ngũ hơn 60 chuyên gia trong lĩnh vực digital, đến từ nhiều nhà nước trên thế giới. giờ, công ty có 3 văn phòng ở TP. Hồ Chí Minh – Việt Nam, Thượng Hải – Trung Quốc và Singapore. Chúng tôi đã xây dựng văn phòng tại Việt Nam từ 18 tháng trước và đã có mặt tại Singapore từ tháng 11 năm 2017. 

IT Consultis chuyên nghiên cứu và cung cấp các dịch vụ như triển khai giải pháp digital, tham mưu chiến lược cho dự án, phát triển toàn diện website, ứng dụng mobile, thương mại điện tử và trải nghiệm điểm bán hàng. Khách hàng của công ty đều là các tổ chức và thương hiệu đa nhà nước như: GAP, Zara, Porsche, Decathlon, Budweiser, Leica, v.v 

Công ty cũng đặt kì vọng sẽ trở thành Digital agency độc lập hàng đầu cho các thương hiệu quốc tế tại Châu Á vào năm 2020.

2. Anh có thể giới thiệu một sản phẩm trổi mà công ty hiện đang làm? 

Như các bạn đã biết là IT Consultis vốn có văn phòng chính tại Trung Quốc, một trong những sản phẩm trội mà IT Consultis từng tham dự là WeChat, một áp dụng tứ tung nức danh tại thị trường Trung Quốc và trên thế giới, với nhiều tính năng trổi cũng như tích hợp các mini web bên trong nó. 

WeChat là một siêu vận dụng bởi nó có rất nhiều hệ thống kết hợp với nhau từ gọi taxi cho đến cả việc mua hàng online. Nói cách khác, người dùng có thể làm rất nhiều thứ chỉ với một áp dụng. Cụ thể nhiệm vụ của chúng tôi chính là thực hiện các sản phẩm bên trong siêu ứng dụng Wechat này song song đảm bảo sản phẩm trở nên bắt mắt người dùng. (cười) 




3. vì sao IT Consultis lại chọn Việt Nam là điểm đến thứ 2 ? 

Đầu năm 2016, công ty kiêng một thị trường đa dạng và năng động, đặc biệt là nơi có nguồn cần lao chất lượng để mở rộng quy mô kinh dinh, đa nhà nước, vươn ra Châu Á. Và Việt Nam trở nên một chọn lọc tuyệt vời bởi con người, văn hóa cũng như những chính sách kinh doanh ở đây.

4. Theo anh ưu điểm của thị trường developer Việt Nam là gì? 

Việt Nam và Trung Quốc khá gần nhau do đó mà khung giờ làm việc cũng không có quá nhiều dị biệt giữa hai văn phòng. Chính vì thế, dù làm việc ở văn phòng nào thì vẫn có thể hoạt động như một team thật sự và việc quản ngại cũng trở nên hiệu quả hơn. Hơn nữa tôi cũng cực kỳ yêu mến giang sơn và con người Việt Nam. 

Bên cạnh đó, ở Trung Quốc vấn đề chủ yếu là từ hệ thống giáo dục. Bởi nhà trường hội tụ vào Java, .Net trong khi IT Consultis thì chọn làm việc với những công nghệ open source như React. Do đó để thuê những developer chuyên về các ngôn ngữ “hiếm” trong thị trường Trung Quốc sẽ tốn uổng rất cao. Và như vậy IT Consultis không còn lựa chọn khác ngoài nâng giá dịch vụ, và điều đó hoàn toàn không có lợi cho khách hàng.

5. Công ty của anh có gặp khó khăn gì trong việc tuyển dụng tại Việt Nam? 

Tôi nghĩ vấn đề từng một ứng viên thích hợp luôn rất khó tại mọi thị trường chứ không riêng gì ở Việt Nam. Khi so sánh với thị trường Trung Quốc thì tuyển dụng tại Việt Nam dễ dàng hơn, do ở Việt Nam, các bạn đã có kinh nghiệm làm việc outsource với các dự án của nước ngoài nên các ứng viên thường thích nghi tốt hơn so với thị trường Trung Quốc. 

Chúng tôi có mở văn phòng tại Singapore hội tụ vào từng khách hàng và mở mang thị trường trong khi văn phòng Việt Nam thì tập hợp vào việc phát triển sản phẩm và lôi cuốn nguồn nhân công giỏi tại đây. Tôi tin rằng Việt Nam sẽ phát triển rất nhanh nhờ vào các chính sách hội nhập rất hăng hái. 
 
Vấn đề khó khăn nhất nằm ở việc giao dịch đòi hỏi các ứng viên phải có khả năng nói tiếng Anh bởi IT Consultis là công ty đa văn hóa với hơn 14 quốc tịch khác nhau, nên việc lớp được một ứng viên vừa có kĩ năng song song lại thành thục ngoại ngữ cũng cần thời kì.
 
 
IT Consultis hiện có 60 viên chức với 14 quốc tich khác nhau,với 3 văn phòng tại Việt Nam, Trung Quốc và Singapore, đồng thời có đại diện làm việc tại New Zealand và Pháp. 

Dù vậy, IT Consultis ngày nay rất chấp thuận khi chiêu mộ được nhiều tuấn kiệt mấu chốt thích hợp với yêu cầu và văn hoá làm việc của công ty.

6. Anh có lời khuyên nào cho developer tại Việt Nam không? 

Tôi nghĩ rằng lời khuyên tốt nhất mà tôi có thể dành cho các bạn là hãy luôn tò mò, bạn cần liên tục cập nhật tri thức, xu hướng thị trường. Bạn nên trang nghiêm và mê say công việc của bạn. Và đó là cách bạn có thể vừa có niềm vui mà có thể phát triển sự nghiệp của mình. do nếu bạn vẫn còn thiếu định hướng bạn sẽ không thể tồn tại và theo kịp sự phát triển của ngành. Bạn phải xoành xoạch học hỏi và áp dụng nhanh hơn những người khác.
  
7. Vậy anh đánh giá cao những kỹ năng nào ở một developer? 


Công ty luôn rất chú trọng vào giá trị sản phẩm và con người thế nên nhân tố hàng đầu là tinh thần bổn phận. Mặt khác, IT Consultis rất quan tâm tới chất lượng sản phẩm bởi sự đòi hỏi đất từ phía khách hàng. Mỗi developer cần phải hiểu rõ vì sao họ cần phải thực hiện những đề nghị công việc với tiêu chuẩn cao như vậy. Ngoài ra khả năng đưa ra quyết định cũng rất quan yếu. Việc mắc sai lầm không phải điều trầm trọng bởi các bạn sẽ học và cải thiện từ những trải nghiệm này. 

Các bạn cũng phải luôn có mặt và hỗ trợ cho team theo tinh thần làm việc nhóm. 

Công ty luôn hướng tới cái mới, liên tục phát triển và đổi thay, do đó khi đứng trước các công nghệ tiên tiến, IT Consultis luôn sẵn sàng và hoàn toàn có thể áp dụng tức thời. 

thẳng thắn cũng là một phẩm chất hết sức quan yếu, bởi các bạn làm việc trong một nhóm nên việc các thành viên tin và trọng lẫn nhau là cần thiết. 

Cuối cùng là các developer cần phải hoà nhập với văn hồng quân ty bởi sự đóng góp nhỏ bé của mỗi thành viên sẽ tạo nên những đổi thay khôn cùng mạnh mẽ và quan trọng

8. Câu hỏi rốt cuộc, theo anh vì sao các bạn developer nên chọn IT Consultis là nơi làm việc lý tưởng ? 
 

IT Consultis vẫn đang tầm những bạn developer nhân kiệt, duyệt y các sự kiện và hội thảo trong ngành IT nhằm có thể lôi cuốn nhiều ứng viên đa dạng hơn cũng như tạo thương hiệu và mang hình ảnh công ty – một trong những nơi làm việc hàng đầu đến gần với ứng viên hơn. ngoại giả, công ty cũng duy trì và cải tiến nhiều chính sách phúc lợi đặc biệt nhằm giữ chân tài năng cũng như tạo động lực cho các bạn phát triển và cống hiến cho công ty như: các phúc lợi được bảo đảm, văn hóa làm việc cởi mở, năng động, dịp được làm việc trong môi trường đa nhà nước, du lịch thường niên, và tham dự các khóa đào tạo kỹ năng nội bộ … Không chỉ là nơi làm việc, IT Consulits quan tâm đến mỗi cá nhân chủ nghĩa và thành viên trong tổ chức, sự phát triển của bạn là sự phát triển của công ty, và bạn sẽ nhận được tương hợp với những cụ và đóng góp của mình. IT Consultis chính là gia đình thứ hai của bạn. 

Cảm ơn anh về những san sớt thích thú của mình 

Developer của Việt Nam đang đứng vị trị nào trên bản đồ năng lực lập trình


Theo nghiên cứu mới nhất của HackerRank, Việt Nam xếp thứ 23 thế giới về năng lực developer, còn theo kết quả mới nhất trên đấu trường CodeFights thì developer Việt Nam cũng đang chiếm giữ nhiều vị trí dẫn đầu. Có thể khẳng định một điều kiên cố rằng, năng lực của developer Việt Nam không hề thua kém bạn bè quốc tế. 

Với sự phát triển vũ bão của công nghệ đã mở ra một thị trường khôn xiết tiềm năng cho các developer phát triển. Trong đó, Việt Nam luôn được đánh giá là một trong những “mỏ vàng” về nhân công IT trẻ, chất lượng. Do đó, ngày một có nhiều công ty về công nghệ đã “chọn mặt gửi vàng” tại thị trường Việt Nam, và IT Consultis – công ty chuyên cung cấp giải pháp kỹ thuật số đa nhà nước, cũng đã chọn lựa như vậy. 

Cùng TopDev nói chuyện cùng Mr Thomas Guillemaud – Co-founder & COO của IT Consultis phân tách những ưu – nhược điểm của developer Việt Nam hiện thời. 


1. Anh có thể giới thiệu đôi nét về bản thân cũng như về IT Consultis được không? 

Tôi là Thomas Guillemaud – Co-founder & COO của IT Consultis, là một digital agency được thành lập vào năm 2011 bởi 3 thành viên là Yoan Rigart-Lenisa, Aurelien Rigart và tôi . Chỉ trong 6 năm, IT Consultis đã phát triển nhanh chóng với đội ngũ hơn 60 chuyên gia trong lĩnh vực digital, đến từ nhiều quốc gia trên thế giới. hiện nay, công ty có 3 văn phòng ở TP. Hồ Chí Minh – Việt Nam, Thượng Hải – Trung Quốc và Singapore. Chúng tôi đã xây dựng văn phòng tại Việt Nam từ 18 tháng trước và đã có mặt tại Singapore từ tháng 11 năm 2017. 

IT Consultis chuyên nghiên cứu và cung cấp các dịch vụ như khai triển giải pháp digital, tư vấn chiến lược cho dự án, phát triển toàn diện website, ứng dụng mobile, thương mại điện tử và trải nghiệm điểm bán hàng. Khách hàng của công ty đều là các tổ chức và thương hiệu đa nhà nước như: GAP, Zara, Porsche, Decathlon, Budweiser, Leica, v.v 

Công ty cũng đặt kì vọng sẽ trở nên Digital agency độc lập hàng đầu cho các thương hiệu quốc tế tại Châu Á vào năm 2020.

2. Anh có thể giới thiệu một sản phẩm nổi trội mà công ty hiện đang làm? 

Như các bạn đã biết là IT Consultis vốn có văn phòng chính tại Trung Quốc, một trong những sản phẩm nổi trội mà IT Consultis từng tham dự là WeChat, một ứng dụng bừa bãi nức danh tại thị trường Trung Quốc và trên thế giới, với nhiều tính năng nổi bật cũng như tích hợp các mini web bên trong nó. 

WeChat là một siêu ứng dụng bởi nó có rất nhiều hệ thống kết hợp với nhau từ gọi taxi cho đến cả việc mua hàng online. Nói cách khác, người dùng có thể làm rất nhiều thứ chỉ với một áp dụng. Cụ thể nhiệm vụ của chúng tôi chính là thực hiện các sản phẩm bên trong siêu ứng dụng Wechat này đồng thời đảm bảo sản phẩm trở nên bắt mắt người dùng. (cười) 




3. Tại sao IT Consultis lại chọn Việt Nam là điểm đến thứ 2 ? 

Đầu năm 2016, công ty khoảng một thị trường đa dạng và năng động, đặc biệt là nơi có nguồn cần lao chất lượng để mở mang quy mô kinh dinh, đa quốc gia, vươn ra Châu Á. Và Việt Nam trở nên một tuyển lựa tuyệt bởi con người, văn hóa cũng như những chính sách kinh doanh ở đây.

4. Theo anh ưu điểm của thị trường developer Việt Nam là gì? 

Việt Nam và Trung Quốc khá gần nhau do đó mà khung giờ làm việc cũng không có quá nhiều dị biệt giữa hai văn phòng. Chính bởi thế, dù làm việc ở văn phòng nào thì vẫn có thể hoạt động như một team thật sự và việc quản lí cũng trở thành hiệu quả hơn. Hơn nữa tôi cũng cực kỳ yêu mến giang san và con người Việt Nam. 

Bên cạnh đó, ở Trung Quốc vấn đề đẵn là từ hệ thống giáo dục. Bởi nhà trường tụ hội vào Java, .Net trong khi IT Consultis thì chọn làm việc với những công nghệ open source như React. Do đó để thuê những developer chuyên về các ngôn ngữ “hiếm” trong thị trường Trung Quốc sẽ tốn uổng rất cao. Và như vậy IT Consultis không còn chọn lựa khác ngoài nâng giá dịch vụ, và điều đó hoàn toàn không có lợi cho khách hàng.

5. Công ty của anh có gặp khó khăn gì trong việc tuyển dụng tại Việt Nam? 

Tôi nghĩ vấn đề độ một ứng viên ăn nhập luôn rất khó tại mọi thị trường chứ không riêng gì ở Việt Nam. Khi so sánh với thị trường Trung Quốc thì tuyển dụng tại Việt Nam dễ dàng hơn, do ở Việt Nam, các bạn đã có kinh nghiệm làm việc outsource với các dự án của nước ngoài nên các ứng viên thường thích nghi tốt hơn so với thị trường Trung Quốc. 

Chúng tôi có mở văn phòng tại Singapore tụ hợp vào cữ khách hàng và mở mang thị trường trong khi văn phòng Việt Nam thì tụ hội vào việc phát triển sản phẩm và thu hút nguồn nhân lực giỏi tại đây. Tôi tin rằng Việt Nam sẽ phát triển rất nhanh nhờ vào các chính sách hội nhập rất hăng hái. 
 
Vấn đề khó khăn nhất nằm ở việc giao tế đòi hỏi các ứng viên phải có khả năng nói tiếng Anh bởi IT Consultis là công ty đa văn hóa với hơn 14 quốc tịch khác nhau, nên việc tìm được một ứng viên vừa có kĩ năng đồng thời lại thuần thục ngoại ngữ cũng cần thời kì.
 
 
IT Consultis hiện có 60 viên chức với 14 quốc tich khác nhau,với 3 văn phòng tại Việt Nam, Trung Quốc và Singapore, đồng thời có đại diện làm việc tại New Zealand và Pháp. 

Dù vậy, IT Consultis hiện tại rất chấp thuận khi chiêu tập được nhiều thiên tài then chốt phù hợp với yêu cầu và văn hoá làm việc của công ty.

6. Anh có lời khuyên nào cho developer tại Việt Nam không? 

Tôi nghĩ rằng lời khuyên tốt nhất mà tôi có thể dành cho các bạn là hãy luôn tò mò, bạn cần liên tiếp cập nhật tri thức, xu hướng thị trường. Bạn nên nghiêm trang và mê say công việc của bạn. Và đó là cách bạn có thể vừa có niềm vui mà có thể phát triển sự nghiệp của mình. vì chưng nếu bạn vẫn còn thiếu định hướng bạn sẽ không thể tồn tại và theo kịp sự phát triển của ngành. Bạn phải luôn luôn học hỏi và ứng dụng nhanh hơn những người khác.
  
7. Vậy anh đánh giá cao những kỹ năng nào ở một developer? 


Công ty luôn rất chú trọng vào giá trị sản phẩm và con người thế nên nguyên tố hàng đầu là tinh thần bổn phận. Mặt khác, IT Consultis rất quan hoài tới chất lượng sản phẩm bởi sự đòi hỏi ghét từ phía khách hàng. Mỗi developer cần phải hiểu rõ tại sao họ cần phải thực hiện những đề nghị công việc với tiêu chuẩn cao như vậy. Ngoài ra khả năng đưa ra quyết định cũng rất quan trọng. Việc mắc sai trái không phải điều trầm trọng bởi các bạn sẽ học và cải thiện từ những trải nghiệm này. 

Các bạn cũng phải luôn có mặt và hỗ trợ cho team theo ý thức làm việc nhóm. 

Công ty luôn hướng tới cái mới, liên tiếp phát triển và thay đổi, do đó khi đứng trước các công nghệ tiên tiến, IT Consultis luôn sẵn sàng và hoàn toàn có thể áp dụng tức thời. 

cương trực cũng là một phẩm chất vô cùng quan trọng, bởi các bạn làm việc trong một nhóm nên việc các thành viên tin cẩn và trọng lẫn nhau là cấp thiết. 

chung cuộc là các developer cần phải hoà nhập với văn hồng quân ty bởi sự đóng góp nhỏ bé của mỗi thành viên sẽ tạo nên những thay đổi khôn xiết mạnh mẽ và quan trọng

8. Câu hỏi chung cuộc, theo anh vì sao các bạn developer nên chọn IT Consultis là nơi làm việc lý tưởng ? 
 

IT Consultis vẫn đang khoảng những bạn developer tuấn kiệt, duyệt y các sự kiện và hội thảo trong ngành IT nhằm có thể cuộn nhiều ứng viên đa dạng hơn cũng như tạo thương hiệu và mang hình ảnh công ty – một trong những nơi làm việc hàng đầu đến gần với ứng viên hơn. Ngoài ra, công ty cũng duy trì và cải tiến nhiều chính sách phúc lợi đặc biệt nhằm giữ chân nhân tài cũng như tạo động lực cho các bạn phát triển và cống hiến cho công ty như: các phúc lợi được đảm bảo, văn hóa làm việc cởi mở, năng động, nhịp được làm việc trong môi trường đa nhà nước, du lịch thường niên, và tham dự các khóa đào tạo kỹ năng nội bộ … Không chỉ là nơi làm việc, IT Consulits quan hoài đến mỗi cá nhân và thành viên trong tổ chức, sự phát triển của bạn là sự phát triển của công ty, và bạn sẽ nhận được cân xứng với những cầm cố và đóng góp của mình. IT Consultis chính là gia đình thứ hai của bạn. 

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