Home Blog Page 223

Trước khi trở thành master về design, phải giỏi về cơ bản đã!

Tuần trước, một đọc giả đã hỏi tôi rằng: Làm thế nào để em có thể trở thành một visual designer giỏi?

Khi đang suy nghĩ về câu trả lời, tôi chợt nhớ về khoảng thời gian mình học tiếng phổ thông Trung Quốc. Đối với việc bạn phải học một ngôn ngữ hoàn toàn mới thì đầu tiên là ta phải có được căn bản đã. Danh từ, động từ và tính từ để có thể hiện những ý nghĩ của mình.

Ngôn ngữ là phương tiện truyền tải thông tin giữa con người. Visual design chính là ngôn ngữ hình ảnh. Để trở thành một visual designer thì cũng không khác gì việc phải học một ngôn ngữ mới cả.

Visual design đẹp không phải do chúng được sinh ra mà là tạo ra. Chìa khóa thành công của một visual designer là sự khắc khe. Bởi bạn chỉ có giỏi nếu bạn bỏ ra nỗ lực gấp đôi.

Tìm việc làm designer nhanh trong tháng tại Topdev

Sau đây là những điều cơ bản có thể giúp bạn phát triển trên con đường làm visual design:

#1 Hãy sử dụng phông chữ cơ bản

Dựa vào kiểu chữ được dùng mà ta có thể biết rất nhiều về designer. Đó là bởi phông chữ đóng vai trò nền tảng trong visual design.

Thậm chí bạn có thể tạo ra một tác phẩm design chỉ nhờ vào chữ. Không những thế, việc sự dụng chữ còn mở ra vô số cách cho các designer tạo ra những sản phẩm với hình ảnh đầy ấn tượng. Chính vì thể, để nâng cao khả năng sử dụng typography thì ta phải bắt đầu với những kiểu chữ cơ bản.

Trước hết bắt đầu từ việc phân biệt và hiểu được ý nghĩa của các phông chữ khác nhau. Ta phải biết về những thuật ngữ như tracking, kerning và leading. Bài viết “Hình minh họa tuyệt đẹp về các thuật ngữ chữ viết bạn nên biết” là một bài viết khá hay cho bạn.

Sau đó để có cái nhìn toàn diện về việc sử dụng typography trong website, bạn hãy đọc “Nghệ thuật phông chữ dùng cho web

Để biết được cách kết hợp các kiểu chữ với nhau thì bạn nên xem 2 nguồn khá hay là FontWolf FontPair. Việc dùng nhiều loại chữ khác trong sẽ khiến design của bạn có ảnh hưởng mạnh mẽ hơn lên người dùng.

#2 Sử dụng khoảng trống để tạo ra sự cân bằng

Các bạn có thể truy cập trang Behance hoặc Dribbble để tìm cảm hứng cho việc sử dụng khoảng trống trong design. Nhưng điều quan trong là cứ đi theo cảm tính của mình để tạo ra một tác phẩm hoàn mĩ trong mắt bạn.

Khi học typography, bạn cũng nhận ra tầm quan trọng của khoảng cách của các chữ. Bằng cách điều chỉnh kerning và leading cho các phông chữ khác nhau là một phương pháp tốt để quen dần với việc sử dụng khoảng trống trong design. Vì thế mà tôi khuyến khích bạn chơi trò KernType, một mini game mà bạn sẽ so sánh cách sử dụng kerning cho phông chữ của mình với các chuyên gia designer.

Một cách khác giúp mắt bạn quen dần với việc sử dụng khoảng trống bằng cách quan sát các sản phẩm design. Hãy vẽ một trục X và Y và chia các yếu tố trong tác phẩm đó thành những hình hộp đơn giản và phân tích xem chúng cân bằng như thế nào cũng như thử thay đổi vị trí của chúng xem. Nhớ chú ý những ảnh hưởng tiêu cực từ việc thay đổi khoảng trống lên sự cân bằng và hoài hòa của tác phẩm.

#3 Sử dụng nhiều kích cỡ khác nhau để tạo ảnh hưởng visual khác nhau.

Khi nhắc đến hệ thống cấp bật visual thì kích cỡ luôn đứng đầu. Nhờ vào việc sử dụng kích cỡ khác nhau, ta có thể tạo ra mối quan hệ cho visual của các yếu tố trong tác phẩm.

Kích thước cũng là nguyên nhân grid trở nên vô cùng hữu dụng. Bởi grid giúp ta chỉnh sửa kích thước một cách chính xác và đúng theo tỉ lệ.

Khi bạn đã thành thục với việc sử dụng kích thước thì hãy áp dụng nó một cách nhất quán cho toàn bộ phần còn lại của tác phẩm.

Cách tốt nhất để tiến bộ là nhờ vào feed back. Hãy làm thử một bản Sketch design rồi đưa cho người quen của bạn xem và hỏi ý kiến của họ. Nhớ kêu khoanh tròn những thứ mà stand-out trong mắt họ. Sau đó thì hãy kiểm tra xem kết quả có như bạn mong muốn không?

Khi thực hành bằng cách này, phải luôn tự hỏi bản thân mình:

  • Mục tiêu của landing-page muốn là gì? Làm sao để đạt được mục tiêu đó?
  • Mối quan hệ giữa những yếu tố bạn muốn sử dụng trong design của mình? Yếu tố nào nên được tập trung?
  • Layout của bạn có thành công trong việc dẫn dắt hướng nhỉn của user theo đúng như bạn mong muốn không?

#4 Sử dụng màu sắc để truyền tải thông điệp

Màu sắc có vai trò rất đa dạng. Nó chứa dựng thông tin, khêu gợi cảm xúc và đem tới sự thống nhất cho thiết kế.

  • Trước khi chọn màu sắc, hãy xác định được vì sao bạn lại design một tác phẩm. Màu sắc chỉ thật sự đẹp khi nó phù hợp với mục đích của sản phẩm.
  • Xác định người xem. Chúng ta nhìn nhận màu sắc một cách hoàn toàn khác nhau. Vì thế mà tùy vào độ tuổi, môi trường, văn hóa, sở thích, kinh nghiệm mà màu sắc sẽ có ảnh hưởng khác nhau lên từng người.
  • Hãy chọn bảng màu sắc đơn giản với background là màu trung tính. Sau đó hãy chọn màu chính và phụ và thử nghiệm chúng cho đến khi bạn hài lòng với kết quả cuối cùng.

Sau khi đã nhuần nhuyễn với việc sử dụng màu sắc cơ bản thì đã đến lúc bạn thật sự bước ra khỏi “comfort zone” của mình và cứ thỏa thích “nghịch” với màu sắc.

Sau đây là một cách giúp bạn cải thiện trong việc cảm nhận màu sắc.

Dành thời gian chỉnh sủa bảng màu cho những thứ xung quanh bạn như hình ảnh, video, clip. Hoặc dùng các tác phẩm design có sẵn và thử thay đổi cách phối màu của chúng. Hãy quan sát những thay đổi trong màu sắc và ảnh hưởng của chúng lên tác phẩm.

Nguồn: topdev.vn via Medium

Những thói quen xấu kìm hãm sự tiến bộ của lập trình viên

Gần đây, tôi được phân công hỗ trợ những người lập trình chưa giỏi, dưới hình thức một kèm một (pair programming). Trong khi làm công việc đó, tôi nhận thấy có một vài thói quen xấu khiến họ khó tiến bộ và thói quen tốt nữa mà tôi sẽ liệt kê ra như dưới đây.

Sức mạnh của thói quen

Hàng ngày, tôi vẫn tự hỏi mình năng lực lập trình là do thứ gì quyết định? Có người học lập trình rất nhanh nhưng có người lại học rất chậm. Thông thường, người ta hay gọi cái đó là “cảm giác tốt, cảm giác chưa tốt” và cho qua.

Nhưng tôi thấy rõ ràng có những yếu tố quyết định đến việc học nhanh hay chậm.

Vài năm trước vào một lần nọ, tôi có xem màn hình của đồng nghiệp ngồi bên cạnh và thỉnh thoảng đi quanh phòng làm việc xem màn hình của những người khác nữa. Có một điều làm tôi thực sự ngạc nhiên. Người hay “nộp bài” chậm thì màn hình lại thường có xu hướng hiển thị stack trace (dùng cho đầu ra của web application).

Đồng nghiệp ngồi cạnh tôi thường lập trình theo quy trình dưới đây. Tôi không thống kê chi tiết, nhưng đại loại là vậy.

  • Viết code
  • Lưu code
  • Switch màn hình sang browser
  • Reload
  • Màn hình lỗi hiện ra
  • Switch sang màn hình code luôn

Như thế này thì tôi nghĩ năng suất làm việc sẽ rất tồi. Phải nói thêm là cậu ta đang viết một phần thuộc model (và tất nhiên phần đó có ở bên controller nữa). Ngay lập tức, tôi chỉ cho cậu ấy cách check syntax và cách chạy thử từng module. Dựa vào đó, tôi chỉ thêm cho cậu ấy cách viết những test code nhỏ cho phần logic nữa. Nhưng hình như cậu ấy vốn đã biết cả rồi. Tuy nhiên, vì nghĩ là phiền phức nên cậu ấy đã bỏ qua. Tôi hỏi tại sao lại phiền thì cậu ấy có hơi lúng túng, giải thích khá nhiều nhưng đại ý là “Đằng nào cũng phải hiển thị, nên xem nó hiển thị thế nào là nhanh nhất”. Đây là vấn đề về thói quen. Ngày đó công ty tôi chưa có quy trình CI (continous integration) nên hầu như không ai có thói quen viết test cho code cả.

Về sau, quy trình CI được áp dụng, việc viết test cho code trở thành bắt buộc. Tuy nhiên khi đó thì sau khi hiển thị ngon hết rồi cậu ta mới viết, với một thái độ không lấy gì làm vui vẻ cho lắm. Quy trình phía trên của cậu ấy, do chạy code sau khi đã ghép nên màn hình sẽ hiện một đống lỗi rất phức tạp làm cho công việc kéo dài ra. Cậu ta dường như không quan tâm đến chuyện đó mà có khi cũng chẳng đọc lỗi nữa. Cậu ấy không quen test từng phần một, mà sau khi ghép code sẽ khó test hơn rất nhiều. Quy trình vốn sinh ra để tăng năng suất, bây giờ do thói quen của người làm việc, thành ra lại làm giảm năng suất.

Thói quen xấu

Gần đây, tôi có pair programming với vài kĩ sư trẻ. Một ngày tôi làm với họ vài tiếng, chiếm phần lớn thời gian ở công ty của tôi. Tôi sẽ giới thiệu vài thói quen xấu của họ mà trong khi làm việc tôi đã phát hiện và nhắc nhở.

Ít đọc code

Tùy từng project mà thời gian đọc code khác nhau, nhưng nhìn chung thời gian đọc code luôn chiếm tỉ lệ lớn. Cách phân bố thời gian thường thấy là 80% đọc, 20% viết. Đọc code là bắt buộc để có thể hiểu được những phần liên quan, và hiểu framework. Đối với những kĩ sư mà công việc hay bị trục trặc, không tiến triển, tôi thấy tỉ lệ thời gian họ dành cho việc đọc code là rất thấp. Một ví dụ là có một cậu định sử dụng chức năng có trong framework thì bị lỗi. Tôi nói với cậu ấy là ở framework đang hiển thị lỗi sai đầu vào. Tuy nhiên cậu ấy sau đó không hề xem chỗ tôi bảo trên framework. Vậy thì cậu ấy làm gì?

Nhìn chăm chú vào code của mình, ngẩn ngơ tìm chỗ sai. Nghiền ngẫm một đoạn code trên mạng để xem có nên copy paste không. Nghĩa là cứ khi nào code không chạy thì cậu ấy đều ngồi xem code mình viết có gì sai.

Cách sửa

Tôi chỉ cho cậu ấy cách tìm đoạn bị sai tương ứng trên framework. Đồng thời, tôi bảo cậu ấy đọc xem đoạn ấy xử lí cụ thể như thế nào và kết luận tại sao code không chạy.

Vấn đề tâm lí

Tôi hỏi tại sao cậu ấy không đọc code của framework thì cậu ấy trả lời rằng “Nhìn phức tạp lắm, với lại em muốn làm xong sớm”. Tôi cũng công nhận là nội dung bên trong framework phức tạp thật, và đúng là rất khó để nắm được tổng thể. Tuy nhiên bằng cách nghiên cứu nó, kiến thức về ngôn ngữ và khả năng đọc hiểu thư viện sẽ tăng lên, trình độ bản thân sẽ tăng lên. Tôi đã cho cậu ấy trải nghiệm việc phá bỏ rào cản tâm lí đó, ngồi nghiên cứu code sẽ khiến vấn đề được giải quyết nhanh như thế nào.

Vì những lẽ ở trên, tôi nghĩ là người hướng dẫn cũng không nên nói những câu đại loại như “Phần này không hiểu cũng được”, “Đừng đọc nhiều làm gì, cứ cho chạy đi đã” – điều đó cũng rất quan trọng. Tôi luôn nghĩ : giới hạn trưởng thành của bạn cao đến mức nào, phụ thuộc vào việc bạn hiểu code sâu đến mức nào.

Không test riêng những đoạn xử lí phức tạp

Vệc chia nhỏ các hàm rất quan trọng. Tại sao lại phải chia? “Vì như thế thì sẽ nhàn hơn”. Tuy nhiên đối với người chưa thuần thục thì lại cảm thấy như thế là “khổ hơn”.

Ví dụ:

Ruby
function process(list){

    for(var i=0,l=list.length;i<l;i++){
        ...
        // viết cái gì cần xử lí
    }

    ...
    // xử lí thêm gì nữa thì viết vào đây`

}

Hàm có cấu trúc như thế này nghĩa là muốn thực hiện xử lí riêng từng phần một. Người chưa thuần thục thường có xu hướng cứ thế viết những gì muốn xử lí vào những chỗ comment ở trên.

Nhưng đúng ra nó phải là như thế này :

function process(list){
    var next = []:
    for(var i=0,l=list.length;i<l;i++){
        ...
        var elem = doSomethingForElement(list[i]);

        if ( elem ) {
            next.push(elem):
        }
    }

    ...

    if( next.length == 0 ){
        return doSomethingWhenNoResponse(args);
    }

    ...

}

function doSomethingForElement(){
    #viết những gì cần xử lí
}

function doSomethingWhenNoResponse(){
    #viết những gì cần xử lí
}

Những phần muốn xử lí viết tách ra ngoài, độc lập (gọi là sprout method). Làm như thế sẽ tránh cho hàm gốc bị phức tạp hóa, và giúp ta test được từng xử lý một.

Cách sửa

Tôi cho họ làm quen với quy trình là trước khi động tay vào hàm gốc thì hãy tách những gì mình cần xử lí ra thành những hàm rời, sau đó viết và test những cái rời trước. Sau đó họ đã thấy kết quả là việc giải quyết lỗi phát sinh trở nên nhanh như thế nào. Đồng thời, tôi giúp họ ý thức đầu ra đầu vào là gì, phần mình làm ảnh hưởng các phần khác như thế nào.

Vấn đề tâm lí

Nguyên nhân của chuyện cảm thấy việc chia nhiều hàm là khổ chính là từ suy nghĩ “muốn xong sớm” mà ra. Họ nghĩ “Sau này có lỗi thì chỉ cần xem lỗi ở đâu rồi sửa là xong” nên họ thấy chia nhiều hàm rất là “phức tạp hóa vấn đề”, chỉ là chuyện “nếu thừa thời gian thì làm”. Tuy nhiên, nếu gộp hết tất cả thành 1 hàm rồi chạy, thì việc hiểu code sẽ rất khó và cái vòng luẩn quẩn “chạy và lỗi” sẽ kéo dài, lỗi lại còn rất nặng. Như thế mới chính là đang làm mất thời gian. Cũng như trong Hình học để giải bài toán ta hay phải kẻ đường phụ. Việc học cách kẻ đường đó như thế nào là một điều rất quan trọng.

Không kiểm tra quy trình làm việc của bản thân

Như phần đầu tôi đã nói, thói quen chính là sức mạnh. Chúng ta cần phải có một quy trình làm việc nhanh nhất có thể, hướng đến mục tiêu là tự động hóa.

Từ hôm pair programming, tôi mới nhận ra một cậu hay ngồi nhìn code chằm chằm sau khi viết. Tôi hỏi là đang làm gì thế thì cậu ấy bảo “Em đang kiểm tra”. Cậu ấy đúng là đang kiểm tra từng dòng code một, xem mình có viết sai gì không. Tôi bảo cậu ấy trước tiên hãy check syntax đi thì cậu ấy hỏi “Check syntax nghĩa là sao ạ?”. Sau khi tôi chỉ cậu ấy cách làm thì cậu ấy sau đó cứ liên tục hỏi tôi “Câu này đúng chưa anh?”, “Thế này được chưa?”. Tôi trả lời là trước hết cứ tự mình kiểm tra đi đã, cậu ấy không hiểu ý tôi là gì.

Tôi đã nhận ra rằng ngoài quy trình check xem code của mình sau khi build và cho chạy thật đã ngon chưa, họ không có thêm một quy trình nào khi làm việc cả. Unit test vốn là thứ được sinh ra để xem từng phần có hoạt động chính xác không. Nếu trong khi làm không chuẩn bị trước, không phải là người có thói quen vừa làm vừa test (test first), thì sau này làm unit test sẽ rất mệt.

Cách sửa

Phần code dùng để check syntax hãy để riêng ra editor và dùng thường xuyên. Nếu cần thiết, cứ khi save code là tự động cho chạy luôn để test. Vì cậu ấy dùng editor là vim nên cần cài plugin như quickrun hay syntastic.

Các class và các hàm cũng vậy, ở đâu cũng được, nhưng cần phải tạo môi trường để kiểm tra từng cái một. Nếu kiểm tra thấy ngon rồi, thì hãy lưu lại vào một file test. Đó là quy trình mà tôi muốn cậu ấy thực hiện. Trước khi hỏi “Thế này được chưa” thì hãy làm tất cả những việc trên đã. Khi đã quen rồi, nên tạo một môi trường CI dựa trên cách dùng debug hoặc fswatch. Mỗi khi save code thì cho chạy luôn cái CI đó để test là tốt nhất.

Vấn đề tâm lí

Vấn đề về môi trường như bên trên có vẻ như liên quan đến kiến thức chứ không liên quan đến tâm lí. Tuy nhiên sau khi phân tích, tôi thấy nó liên quan đến nhận thức về 2 khái niệm thường gặp khi lập trình là “code chuẩn” và “code lỗi mà không biết vì sao”.

Một thực tế là, không phải chỉ có duy nhất một “code chuẩn”.

Tuy nhiên, người hay copy paste thường có xu hướng nghĩ rằng : copy paste mà cũng không chạy được thì chắc là do mình thao tác sai chỗ nào đó, copy paste bị thiếu chỗ nào đó và thường có thói quen ngồi tìm kiếm những cái đó. Vì lí do đó, code của họ sau khi viết xong chẳng khác nào mật mã ngoài hành tinh, và họ sẽ phải tìm lỗi sai trong đống mật mã đó. Phần mà họ tự viết ra cũng dựa trên những đoạn copy paste, mà sau này rồi cũng sẽ trở thành thứ mà họ không thể tự lí giải nổi. Tâm lí của họ là luôn nghĩ việc đọc hiểu và kiểm tra từng dòng một, kém năng suất hơn việc copy paste cả một đoạn rất nhiều.

Không đọc error message, không đọc log

Error message của ngôn ngữ lập trình, hay error message của thư viện đều có nhiệm vụ là chỉ ra chỗ sai bằng văn bản con người có thể hiểu được, viết bởi con người. Tuy nhiên, những lập trình viên tiến bộ chậm thường không đọc những cái đó. Họ chỉ ý thức được là có lỗi xảy ra. Nếu là code trên IDE thì có thể kích chuột để jump ngay đến câu lệnh lỗi. Nhưng nếu làm trên vim hoặc Web browser thì việc đọc hiểu log message, và jump đến câu lệnh lỗi là nhiệm vụ của người lập trình. Không đọc, cũng không jump đến câu lệnh lỗi nên màn hình error thường bị switch đi trong tích tắc. Trong khi pair programming với vài người, họ switch màn hình nhanh đến nỗi tôi còn tưởng họ đang thử độ phản ứng của mắt với vật thể chuyển động.

Kết quả là họ ngồi nhìn chằm chằm vào code họ vừa viết, tìm xem có lỗi chính tả, lỗi font nào không bằng cách ngó đi ngó lại method name. Vấn đề là error message vừa nãy đâu có nói là method name có lỗi, hoặc không tồn tại. Một khi không đọc error message thì phạm vi có thể phát sinh lỗi là vô hạn. Tuy nhiên, họ chỉ luôn nghĩ được là mình “viết sai một cái gì đó”.

Cách sửa

Tất nhiên là đọc error message và tìm hiểu ý nghĩa của từng message một. Thêm vào đó, tôi giúp họ lí giải mối liên hệ giữa error message và môi trường. Đồng thời, hướng dẫn họ tạo ra những đoạn code nhỏ để tái hiện các lỗi đó (snippet) có thể dùng cho sau này và dự trù các case tương tự có thể xảy ra.

Vấn đề tâm lí

Có thanh niên nói “Em sợ tiếng Anh lắm, nhìn cứ như mật mã”. Có điều, ngữ pháp của các error message chỉ dừng ở mức học sinh cấp Hai, mà tôi biết là cậu ta thừa sức hiểu. Cũng phải công nhận một thực tế là muốn hiểu những lỗi liên quan đến ngôn ngữ lập trình và framework thì phải hiểu cấu trúc và từ ngữ chuyên ngành của chúng. Điều này khó. Nhưng như vậy không có nghĩa là ngôn ngữ hoặc framework đó “không thân thiện” mà vì bản thân error message không phải sinh ra chỉ để hiển thị những lỗi liên quan đến code người lập trình viết.

Vì vậy ta cần theo sát cả framework, cả ngôn ngữ lập trình, và cả code. Có như vậy ta mới có thể móc nối error message và vấn đề cần giải quyết với nhau. Để có thể tự mình làm như vậy, hàng ngày cần tự tạo thói quen tìm hiểu những thứ đó cho mình. Nếu không cho dù đến bao giờ chăng nữa, error message cũng vẫn mãi chỉ là những “mật mã” mà thôi.

Không biết cách đào sâu vấn đề

Có lỗi xảy ra, nghĩa là chúng ta có thể tìm ra manh mối để giải quyết vấn đề bằng cách xem xét phần code bị báo lỗi. Ở đó có lỗi, nghĩa là ít nhất thì code đã chạy được cho đến đó. Hơn thế nữa, nguyên nhân lỗi phát sinh rất có thể là do ảnh hưởng của những gì mà chúng ta đã nhập vào. Chẳng hạn, bằng cách dùng printf để debug, chúng ta có thể biết nhập cái gì vào module, biến đổi nó ra sao thì sẽ sinh ra lỗi. Thông qua việc đó, chúng ta sẽ hiểu khái quát vấn đề, sau đó tuần tự thử các bước chạy của chương trình là có thể chỉ ra được cụ thể phần nào bị lỗi.

Tuy nhiên, người không biết cách đào sâu vấn đề thường cho chương trình chạy với tâm lí là sẽ chạy ngon và check code với tâm lí “đáng ra nó phải chạy ngon”. Họ thường không quan tâm đến thứ tự các bước chạy của chương trình, cách làm việc của họ chẳng khác nào lần mò trong đám mây. Trong một vài trường hợp, họ sẽ mãi “ngẩn ngơ” vì không hiểu sai từ đâu. Họ không có trong tay một chiến thuật để tìm ra chỗ sai nên sẽ nhanh chóng rơi vào trạng thái người ta vẫn gọi là “quay cuồng”.

Cách sửa

Sau khi xảy ra lỗi, trước khi họ làm một động tác gì tôi đều yêu cầu họ trả lời câu hỏi này trước “Bây giờ chúng ta cần làm gì?”. Cụ thể, tôi muốn họ nêu ra phương pháp tìm ra chỗ sai. Tôi giúp họ xây dựng phương pháp đó bằng cách hỏi những câu như “Code chạy ngon đến đoạn nào?”. Sau khi tìm ra một manh mối gì đó, tôi lại hỏi “Thông tin này có ý nghĩa gì?”, “Có cần thay đổi phương pháp không?”. Tôi muốn họ ý thức được là mình cần đào sâu có mục tiêu đàng hoàng, chứ không phải là lần mò trong đám mây.

Vấn đề tâm lí

Đối với một chương trình, việc xảy ra lỗi là một minh chứng cho việc “đã gần hoàn thiện”. Tại sao? Vì nó thường chỉ cho ta sáng tỏ một điều mà trước đây ta không quan tâm, chỉ cho ta biết giả thiết mà ta đã tạo ra là sai, và chỉ cho ta hành động tiếp theo mà ta phải làm là sửa nó. Ta đã có định hướng. Tuy nhiên, đối với những progammer không giỏi đào sâu vấn đề thì thường có xu hướng bị “ngây người” vì họ luôn nghĩ rằng “Đáng ra phải chạy ngon rồi chứ nhỉ?”. Và sau đó họ lại nghĩ “Toi rồi, sai hết rồi”. Có thể nói rằng họ không bao giờ test những cái mà chắc sẽ thất bại, trong khi giá trị cao nhất của việc test là sau khi thất bại, nó sẽ cho ta một thông tin hữu ích nào đó.

Tôi bảo họ chạy thử thì họ thường nói “Lỗi là cái chắc” và không làm. Còn khi miễn cưỡng làm rồi chương trình không chạy thì họ bảo “Đấy, thấy chưa?”. Thực tế là lỗi ở môi trường chạy thật thì không được phép, nhưng ở môi trường test thì sẽ chẳng có ai phàn nàn gì cả, thậm chí còn có ích. Tôi nghĩ họ cần được tự mình trải nghiệm và lí giải những điều đó.

Thói quen tốt

Dựa vào những thói quen xấu đã nói ở trên, chúng ta có thể biết được đâu là thói quen tốt.

  • Đầu tư thời gian để đọc code và hiểu code.
  • Luôn có xu hướng dùng kiến thức để đơn giản hóa vấn đề trước mắt
  • Không sợ lỗi, luôn dùng test code để tìm kiếm thông tin, manh mối
  • Luôn hành động với mục đích rõ ràng để từng bước một giải quyết vấn đề

Ngoài ra, còn vài thói quen mà tôi nghĩ là tốt như :

  • Cải tiến công cụ và tự động các hóa quy trình
  • Boy scout policy
  • Học vài ngôn ngữ
  • Học kiến thức một cách tổng thể

Cải tiến công cụ và tự động hóa các quy trình

Thói quen tốt thường được hỗ trợ bởi công cụ tốt. Chẳng hạn mỗi khi học ngôn ngữ mới, tôi đều tìm kiếm code formatter của ngôn ngữ đó. Ngoài ra, tôi có coding style của mình – không muốn ấn quá nhiều phím, nên tôi chọn IDE có chức năng tự động nhập space cho tôi.

Boy scout policy

Có một tổ chức gọi là boy scout có phương châm là : nhặt hết rác trên các đoạn đường mình đi qua. Cũng như vậy, người lập trình cần có phương châm sửa hết lỗi của những code liên quan đến phần mình làm. Dĩ nhiên không đọc cẩn thận thì sẽ không sửa được, nhưng dù không sửa thì đọc code thôi cũng là có ích rồi. Làm như vậy thì tự nhiên sẽ ngày càng hiểu sâu về code hơn, và code tổng thể sẽ đẹp hơn.

Học vài ngôn ngữ

Nhiều khi vấn đề ở ngôn ngữ này ta có thể lí giải được trong khi học ngôn ngữ khác. Và nhiều khi, một khái niệm nghe có vẻ lạ, thực ra chỉ là đem từ ngôn ngữ khác vào. Thế nên, việc học nhiều ngôn ngữ sẽ giúp ta lập trình mau thuần thục hơn.

Học kiến thức một cách tổng thể

Kiến thức về background, về lịch sử ngôn ngữ, và vài ba bài tập ta đọc ở đâu đó sẽ khiến cho chất lượng code của ta tăng lên. Nếu mỗi ngày ta không gặm nhấm một ít kiến thức, không có cách hiểu về cú pháp, về sample của riêng ta thì kiến thức sẽ không còn là kiến thức mà chỉ dừng ở mức mẹo vặt vì ta không biết ứng dụng chúng sang những trường hợp khác. Cứ thế, ta sẽ chỉ mãi mãi chạy theo những mẹo vặt để giải quyết vấn đề mà thôi.

Lời kết

Năng lực tạo ra bởi tập hợp các thói quen nên việc cải thiện các thói quen sẽ khiến cho năng lực của chúng ta tăng lên. Đó là suy nghĩ của tôi. Tiếp theo là do những rào cản tâm lí nên bản thân việc cải thiện các thói quen cũng thường không mấy dễ dàng. Cải thiện xong rồi, cũng không phải ngay lập tức đạt đến trình độ siêu nhân ngay được.

Nhưng đừng bao giờ nghĩ rằng mình vô dụng. Điều ảnh hưởng nhất đến kết quả cuối cùng của bạn là việc bạn có nghĩ được rằng : con đường học những điều mới là con đường hạnh phúc, hay không.

Nguồn: Techtalk via fsd14

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

Ưu đãi SHOCK cho 200 bạn đầu tiên mua vé Vietnam Mobile Day

Vietnam Mobile Day đã chính thức khởi động với dự tính lên tới 100 topic cực hot trong mọi lĩnh vực của Mobile như Mobile Marketing, ASO, SEO, Analytic Social Media. Crossplatform, Native, Hybrid, Webapp, UX/UI Design, Product Development, QA & Testing, Mobile Game và tối ưu ứng dụng trên các hệ điều hành Android và iOS. Ngoài ra còn có các nhóm chủ đề cực kỳ đặc trưng thuộc phân khúc Architechture, Infrastructure, và Security.

Với đơn vị tổ chức chính là TOPDEV cùng sự hỗ trợ nội dung của Hiệp hội Thương mại điện tử Việt Nam (VECOM), Vietnam Mobile Day năm nay tiếp tục có sự góp mặt của các tên tuổi lớn như Google, Facebook, Microsoft… và ước tính sẽ có 10.000 lượt khách tham dự, hơn 200 doanh nghiệp lớn nhỏ hoạt động trong ngành công nghệ thông tin, hơn 100 đơn vị truyền thông trên khắp cả nước tham gia. Có thể nói, đây chính là cơ hội có một không hai khi bạn vừa có thể học tập, chia sẻ kinh nghiệm lại có không gian giao lưu và networking với anh em trong nghề.

Đại tiệc thịnh soạn cho những ai quan tâm đến lĩnh vực công nghệ nói chung và mobile nói riêng!

Đặc biệt hơn, từ ngày 01/04 đến ngày 15/04/2017, khi đặt mua vé với mã code FIRSTFLIGHT, bạn sẽ được giảm tới 100.000 VND, chỉ còn 150.000 VND/vé (giá gốc 250.000VNĐ)

Kết quả hình ảnh cho đăng ký ngayCơ hội tiếp cận những xu hướng mới nhất, những diễn giả nổi tiếng nhất trong lĩnh vực mobile đang chờ đón các bạn tại sự kiện Vietnam Mobile Day 2017. Tham dự sự kiện cực khủng chỉ với giá vé tí hon, nhanh tay trở thành 1 trong 200 người đầu tiên sở hữu chiếc vé Early Bird đặc biệt này.

Thời gian & địa điểm:
– 20/05/2017 tại Hồ Chí Minh
– 27/05/2017 tại Hà Nội
– 03/06/2017 tại Đà Nẵng

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

Fanpage chính thức: https://www.facebook.com/events/1368837373173750/Hotline:

  • Các hạng mục hợp tác

Ms. Ngọc Đỗ
Điện thoại: 08 6273 3497 | 0944 685 243
Email: ngoc.do@applancer.net

  • Tổng quát về sự kiện

Ms. Thảo Nguyên
Điện thoại: 08 6681 3236 | 08 6273 3497 | 0963 651 587
Email: nguyen.nguyen@applancer.net

Lời khuyên quí giá của tỉ phú công nghệ

Khi đó chúng tôi đang ngồi quanh lửa trại và ngắm bầu trời đầy sao trong cái lạnh của California.

Nhóm chúng tôi bắt đầu trò chuyện với một thành viên của group. Tôi không biết anh ta là ai nhưng ngay từ lần gặp đầu tiên tôi liền nghĩ ngay “Người này khá là thú vị”.

Anh ta luôn là tâm điểm của cuộc nói chuyện bất kể là về giáo dục, design hay là innovation. Chỉ mãi đến sau này thì tôi mới biết anh ta là một nhà sáng tạo về công nghệ và là một tỉ phú.

Điều mà tôi không bao giờ nghĩ đến bởi anh ta quá khiêm tốn, tốt bụng và hài hước nữa.

Với sự hiểu biết về lịch sử cũng như tầm nhìn xa, anh cho rằng công nghệ luôn đóng vai trò quan trọng trong xã hội. Và cuộc nói chuyện giữa chúng tôi cứ như là buổi TEDtalk vậy.

Câu chuyện và những lời khuyên của anh ta trong đêm cắm trại ấy thật sự gây ấn tượng mạnh đối với tôi. Và giờ đây tôi muốn chia sẻ những lời khuyên quí giá ấy với các bạn.

Giá trị #1: Hãy chào đón sự thay đổi

Anh ấy nói với tôi rằng có quá nhiều người lo sợ về sự nghiệp của mình. Đặc biệt là những người trẻ, khi họ kiếm được tiền và có dư dả thì lại sợ sự thay đổi của ngành, công ty, vai trò cũng như con đường sự nghiệp và thăng tiến của họ.

Vì sự sợ hãi thất bại mà họ lại tự che mắt mình khỏi những cơ hội thật sự.

Khi nghe đến đây tôi liền nhớ tới những người đồng nghiệp khi tôi còn làm ở Google, họ vốn có những ý tưởng kinh doanh vô cùng thú vị nhưng không bao giờ dám thực hiện chúng.

Thế nhưng với anh ta thì khác “Hãy chấp nhận sự thay đổi một cách vui vẻ bởi công nghệ của chúng ta sẽ thành lạc hậu trong tương lai thôi!” – Đó là lời khuyên đầu tiên cho tôi từ anh ấy.

“Hãy chính là sự thay đổi mà bạn muốn nó xảy ra cho thế giới” – Mahatma Gandhi

Giá trị #2: Tạo ra thị trường mới chứ không chỉ là sản phẩm mới

Đa phần mọi người chỉ tập trung vào việc tạo ra một sản phẩm mới thay vì một thị trường mới đầy tiềm năng.

Hãy tự nghĩ xem một thị trường mới hoàn toàn trong tương lai sẽ như thế nào và tự hỏi tại sao nó không diễn ra ở hiện tại. Sử dụng công nghệ hiện tại để tạo ra trending cho sự ra đời của thị trường đó.

Trong quá trình làm việc, anh ta rút ra được rằng “Những công ty và ý tưởng đắt giá nhất luôn tạo ra thị trường mới”

“Hiện tại là của họ nhưng tương lai là của tôi” – Nikola Tesla

Học là mãi mãi

Khi nói về giáo dục, anh ta cho rằng bất kể là việc gì, bạn vẫn luôn có thể làm tốt hơn nữa.

Anh khuyến khích tôi đọc sách, du lịch, học ngoại ngữ, chấp nhận thất bại và tiếp tục rèn luyện kĩ năng – “Cứ tự thử thách bản thân mình, học hỏi nhiều kĩ năng khác nhau mà anh có hứng thú”

“Học một ngôn ngữ lập trình và trở thành một chuyên gia về nó” – anh nói thêm – “ hãy học để làm chủ kĩ năng đó”

“Sự tăng trưởng trí tuệ nên bắt đầu ngay từ khi ta sinh ra và chỉ dừng lại khi ta chết” –  Albert Einstein

Giá trị #4: Hãy tập trung cho những kĩ năng mà trong tương lai sẽ được trọng dụng

Theo anh ta, để thành công thì con người cần hai thứ : tiền và thời gian. Khi đó ta mới có thể đầu tư vào các kĩ năng và công nghệ quan trọng mà tương lai sẽ cần đến. Hãy nuôi dưỡng nhân lực, ý tưởng và những ngành công nghiệp có giá trị tăng lên theo thập kỉ.

Anh ấy cho rằng “ Phải suy nghĩ về tương lai và các ý tưởng lớn, thiết thực, có ảnh hưởng đến nhân loại”

“Không ai nhận ra việc đã hoàn thành, chỉ có việc cần phải làm. Và quá trình đó không bao giờ dễ cả” – Marie Curie

Sau khi trở về, tôi ngay lập tức nghĩ về những gì mình có thể làm để lãnh đạo công ty của mình, Pennybox, được tốt hơn.

Mặc dù cách nhìn của anh ta thường là chỉ đúng từ những gì anh đã trải qua nhưng tôi vẫn nghĩ là mình có thể dựa vào đó mà áp dụng cho team cũng như user của mình.

Hãy thử tưởng tượng xem một thế giới mà bất cứ ai cũng muốn thay đổi, luôn tìm kiếm và tạo ra một thị trường mới, luôn học hỏi và đầu tư vào tương lai xa. Đó chính là thế giới mà tôi luôn ao ước.

Tôi hi vọng những lời khuyên từ buổi cắm trại giữa đêm sao này sẽ chuyền lửa và kinh nghiệm quí giá cho các bạn đọc trong việc bắt đầu một start up.

Nguồn: blog.topdev.vn via Medium

Học ReactJS trong 15 phút

Trong bài React dành cho AngularJS developer tôi đã có một số so sánh cũng như hướng dẫn sơ lược về ReactJS dành cho những bạn đã có background về AngularJS. Vậy còn với những bạn chỉ có căn bản về Javascript? Hôm nay tôi sẽ giới thiệu với các bạn những kiến thức cơ bản về ReactJS mà các bạn đã có căn bản về Javascript có thể hiểu được và làm quen dần với ReactJS.

Tôi sẽ chia loạt bài này làm ba phần, như vậy có nghĩa là các bạn sẽ phải đọc hết mỗi bài viết và hiểu nó trong vòng 5 phút, cố gắng nhé. Hehehe.

Hy vọng sau khi đọc xong ba bài viết, mất khoảng 15 phút, chỉ tính thời gian đọc không tính thời gian load page nhé), bạn đã có thể bắt đầu code application với ReactJS một cách thoải mái.

ReactJS là gì?

React.JS là một thư viện Javascript dùng để xây dựng giao diện người dùng. Với cá nhân tôi cũng như nhận xét chung của cộng đồng về ReactJS thì nó nhanh, dễ học và vui.

Tiếp theo chúng ta sẽ bắt đầu đến với những khái niệm.

Component

React được xây dựng xung quanh các component, chứ không dùng template như các framework khác. Bạn có thể tạo ra một component bằng các gọi phương thức createClass của đối tượng React, điểm bắt đầu khi tiếp cận với thư viện này.

Ví dụ.

var Button = React.createClass({
    render: function(){
        return (
            <input type="submit" />
        );
    }
});

Phương thức createClass nhận vào một tham số, là đối tượng mô tả đặc tính của component. Đối tượng này bao gồm tất cả các phương thức để hình thành nên component. Phương thức quan trọng nhất là render, phương thức này được trigger khi component đã sẵn sàng để được render lên trên page.

Trong hàm đó, bạn ẽ trả về một mô tả cho việc bạn muốn React render cái gì lên trên page. Như trong ví dụ ở trên, đơn giản tôi muốn render một button.

Chú ý: Hàm render chính là mô tả cụ thể của UI tại bất cứ thời điểm nào. Vì thế nếu dữ liệu thay đổi, React sẽ take care việc update UI với dữ liệu tương ứng. Các bạn có thể hiểu đơn giản là, khi dữ liệu thay đổi, React sẽ tự động gọi hàm render để update lại UI.

JSX — Javascript Syntax Extension

Đây đơn giản là một syntax extension của Javascript. Với nó bạn có thể viết Javascript với những tag giống như XML (XML-like). Về bản chất, các tag thực sự là những lời gọi hàm, sẽ được chuyển đổi trong React code và end up dưới dạng HTML và Javascript trong cây DOM.

Nhưng với những gì bạn biết ở hiện tại, chỉ cần hiểu đơn giản nó giống như là HTML/XML với một số khả năng khác.

Multiple components

Nếu bạn muốn lồng nhiều component vào nhau, bạn sẽ làm điều này trong lệnh return của phương thức render.

Ví dụ.

var Form = React.createClass({
    render: function(){
        return (
            <div>
                <input type="submit" onClick={this.props.onUserClick} />
                <h3>You have pressed the button {this.props.counter} times!</h3>
            </div>
        );
    }
});

var App = React.createClass({
    getInitialState: function(){
        return {
            counter: 0
        }
    },
    onUserClick: function(){
        var newCount = this.state.counter += 1;
        this.setState({
            counter: newCount
        });
    },
    render: function(){
        return (
            <div>
                <h1> Welcome to the counter app!</h1>
                <Form counter={this.state.counter} onUserClick={this.onUserClick} />
            </div>
        );
    }
});

React.render(<App />,  document.getElementById("app"));

Phía trên, tôi đang lồng Form component vào trong App component. Đây là một dạng quan hệ cha con (parent-child) mà bạn có thể dễ dàng nhận thấy trong HTML.

Phương thức React.render() như các bạn thấy ở trên nhằm mục đích kickstart việc render, và render thừ root component, trong trường hợp trên là App vào trong DOM với container cụ thể là element có id là app

Hết 5 phút, mời các bạn nghỉ ngơi và chờ 5 phút tiếp theo về Prop và State.

Props & State là gì?

Có hai kiểu của data trong React đó là props và state. Sự khác biệt giữa hai kiểu thì hơi khó khăn để hiểu ngay từ ban đầu, ít nhất là về mặt khái niêm. Nhưng một khi bạn bắt đầu code, bạn sẽ nhanh chóng tách biệt được hai loại.

Điểm mấu chốt của sự khác nhau là state thì private và chỉ có thể được thay đổi bên trong bản thân component. Props thì mang tính external, và không bị kiểm soát bởi bản thân component. Nó được truyền từ component cao hơn theo phân cấp, hay có thể hiểu đơn giản là truyền từ component cha xuống component con, cái mà điều khiển dữ liệu trước khi truyền xuống.

Vì thế trong khi một component không thể thay đổi props của nó một cách trức tiếp (điều này có thể làm một cách gián tiếp nhưng hãy để nó vào những phần sau), thì nó có thể tự thay đổi state của bản thân.

Props

Chúng ta sẽ bắt đầu xem xét kỹ hơn về props, cũng như hiểu về data flow một chiều trong React, điều này vô cùng quan trọng.

Nào cùng cài đặt app của chúng ta đã làm trong bài trước với một ít dữ liệu, sử dụng props nhé. Đầu tiên chúng ta cần lấy dữ liệu từ một nơi nào đó. Đó có thể là Ajax call để lấy một số dữ liệu từ API, tuy nhiên chúng ta sẽ hard code nó như một variable.

var text = "Click the button";

Cách để đưa props vào một component nhìn rất giống cách mà chúng ta khai báo attribute cho một HTML element.

<App text={text} />

Lý do chúng ta sử dụng cặp ngoặc nhọn là vì chúng ta cần nói cho JSX biết rằng đó là một Javascript expression.

Một khi App component được cài đặt như thế này, nó có thể truy xuất vào biến text mà ta đã khai báo ở trên thông qua lời gọi this.props.text. Tuy nhiên, nó không thể trực tiếp thay đổi dữ liệu. Từ góc nhìn của component, props của nó là bất biến (immutable). Nó chỉ là thông tin được cài đặt cho component.

Đây là ví dụ.

var text = "Click the button";

var Form = React.createClass({
    render: function(){
        return (
            <div>
                <h3>{this.props.text}</h3>
                <input type="submit" />
            </div>
        );
    }
});
var App = React.createClass({
    render: function(){
        return (
            <div>
                <h1> Welcome to my app!</h1>
                <Form text={this.props.text}/>
            </div>
        );
    }
});
React.render(<App text={text}/>,  document.getElementById("app"));

Như các bạn thấy, props được truyền vào trong App component trong phương thức React.render(). Sau đó App component có thể truy xuất biến text thông qua lời gọi this.props.text. Nó cũng có thể truyền dữ liệu xuống component con của nó như chúng ta thấy cách mà Form component được App component cài đặt props trong ví dụ.

Khi dữ liệu đến được Form component, chúng ta thấy đây là điểm kết thúc, dữ liệu sẽ được render ra thẻ h3 như trên.

Đây là cách mà dữ liệu được luân chuyển trong React thông qua props.

State

Một cách khác để storing dữ liệu trong React là state. Không giống như props, bất biến dưỡi góc nhìn của component thì state có thể thay đổi (mutable).

Vì thế nếu bạn muốn dữ liệu trong ứng dụng thay đổi, ví dụ như dựa trên tương tác người dùng, thì dữ liệu phải được lưu trữ trong component state.

State là private và được quản lý bởi chỉ duy nhất một component, nó không thể truyền xuống cho component con. Nếu bạn muốn truyền xuống cho component con thì bạn phải truyền nó như là một props.

Cài đặt state

Để cài đặt state, đơn giản chúng ta cài đặt hàm getInitialState() vào component, và trả về bất cứ gì bạn muốn cài đặt trong state của component đó.

Thay đổi state

Để thay đổi state, đơn giản ta gọi hàm this.setState(), và truyền vào state mới như là một tham số.

Ví dụ.

var App = React.createClass({
    getInitialState: function(){
        return {
            active: true
        }
    },
    handleClick: function(){
        this.setState({
            active: !this.state.active
        });
    },
    render: function(){
        var buttonSwitch = this.state.active ? "On" : "Off";
        return (
            <div>
                <p>Click the button!</p>
                <input type="submit" onClick={this.handleClick} />
                <p>{buttonSwitch}</p>
            </div>
        );
    }
});

React.render(<App />,  document.getElementById("app"));

Đoạn code trên cũng cho bạn làm quen với hệ thống event trong React, rất đơn giản. Chúng ta hook một event listener vào trong button, ở trên là onClick. Khi nó được trigger, chúng ta gọi hàm handleClick, cái mà đã được cài đặt trước đó, và luôn sẵn sàng được gọi thông qua từ khóa this.

Trong hàm handleClick, chúng ta gọi this.setState(), cái mà sẽ thay đổi trạng thái của component.

Chú ý: React event được wrap để chạy trên tất cả các browser, có nghĩa là React giúp bạn đảm bảo event của bạn chạy được trên tất cả các trình duyện.

Chúng ta nên giữ state ở đâu?

Bạn nên cố gắng giữ số lượng các stateful component ít nhất có thể, và thậm chí giữ tối thiểu lượng dữ liệu trong state. Nếu component cấp dưới cần truy xuất dữ liệu từ state, thì hãy truyền nó thông qua props.

Lưu ý: Stateful component thì luôn luôn là higher level, trong khi Stateless component thường là lower level trong hệ thống phân cấp.

Để hình dung việc state được giữ ở đâu, bạn hãy hỏi bản thân một vài câu hỏi, những câu hỏi này được lấy từ React docs:

  • Xác định mỗi component mà render thông tin gì đó dựa trên state.
  • Tìm một component mà nó chủ sở hữu chung của các component khác (một component nằm bên trên tất cả các component khác trong hệ thống phân cấp thì cần có state)
  • Hoặc là những component là chủ sở hữu chung hoặc là những component nằm trên hệ thống phân cấp sẽ nên giữ state.
  • Nếu bạn không thể tìm ra component nào phù hợp, hãy tạo một component mới đơn giản giữ nhiệm vụ lưu trữ state và đặt nó đâu đó nằm bên trên các component là chủ sở hữu chung trong hệ thống phân cấp.

Inverse data flow

Chúng ta đã nói rất nhiều về việc làm thế nào luồng dữ liệu chỉ có một chiều trong React, từ cha đến con. Điều này thật ra không hoàn toàn đúng, vẫn có cách để thêm một dòng dữ liệu theo hướng ngược lại (Inverse data flow).

Bạn sẽ cần điều này khi mà một component nằm sâu bên trong cây phân cấp cần phải thay đổi trạng thái của cha nó.

Dưới đây là một ví dụ về việc làm thế nào để khi click vào button trong Form component mà nó sẽ trigger việc thay đổi trạng thái (state change) trong App component, cái nằm bên trên nó, cũng như việc có thể truy xuất vào phương thức onUserClick.

var Form = React.createClass({
    render: function(){
        return (
            <div>
                <input type="submit" onClick={this.props.onUserClick} />
                <h3>You have pressed the button {this.props.counter} times!</h3>
            </div>
        );
    }
});

var App = React.createClass({
    getInitialState: function(){
        return {
            counter: 0
        }
    },
    onUserClick: function(){
        var newCount = this.state.counter += 1;
        this.setState({
            counter: newCount
        });
    },
    render: function(){
        return (
            <div>
                <h1> Welcome to the counter app!</h1>
                <Form counter={this.state.counter} onUserClick={this.onUserClick} />
            </div>
        );
    }
});

React.render(<App />,  document.getElementById("app"));

Như bạn có thể thấy, chúng ta chỉ đơn giản truyền xuống phương thức onUserClick như là một props, đã có thể kích hoạt việc tương tác ngược từ Form component lên App component, và trigger một trong số những method của nó.

refs và findDOMNode

Thỉnh thoảng, bạn có thể sẽ muốn tiếp cận cây DOM, và làm một số thay đổi, nhưng không cần thiết phải sử dụng state hay là props. Trong những tình huống như thế này, bạn sẽ cần lấy các node như mong muốn.

Thật may mắn, React cung cấp cho bạn một cách thủ công để có thể lấy DOM node. Đơn giản bạn gọi phương thức React.findDOMCode(component), và truyền vào component mà bạn mong muốn.

Để lấy được tham chiếu của component đã chọn bạn có thể sử dụng thuộc tính refs. Đơn giản thêm một ref vào trong phần tử như thế này.

<input ref="textField" ... />

Từ đó bạn có thể tham chiếu thành phần input khai báo như trên thông qua this.refs.textField.

Ví dụ.

var Form = React.createClass({
  focusOnField: function(){
      React.findDOMNode(this.refs.textField).focus();
  },
  render: function(){
      return (
          <div>
              <input 
                  type="text"
                  ref="textField" />
              <input 
                  type="submit"
                  value="Focus on the input!" 
                  onClick={this.focusOnField} />
          </div>
      );
  }
});
var App = React.createClass({
  render: function(){
      return (
          <div>
              <h1> Welcome to the focus app!</h1>
              <Form />
          </div>
      );
  }
});
React.render(<App />,  document.getElementById("app"));

Kết quả của đoạn code trên là thành phần input sẽ được focus khi bạn click button.

Thuộc tính key

Khi bạn tạo các component một cách dynamically, mỗi thành phần đều cần thuộc tính key, và thuộc tính này là duy nhất (unique). Trong suốt quá trình rendering, các component sẽ bị xáo trộn, chúng cũng có thể bị destroy hay recreate tùy vào sự khác nhau của mỗi giải thuật, việc gán cho nó một key để định danh và đảm bảo rằng các component đều ở đúng vị trí của nó, tối ưu hóa việc rendering.

Như thế này.

var App = React.createClass({
    getInitialState: function(){
        return {
            todos: ["eat","code","sleep"] 
        }
    },
    render: function(){
        var todos = this.state.todos.map(function(todo,index){
            return <li key={index}>{todo}</li>
        });             
        return (
            <div>
                <h1> Welcome to the ToDo list!</h1>
                <ul>
                    {todos}     
                </ul>
            </div>
        );
    }
});

Tóm lại

Thật ra nói về React thì có khá nhiều thứ đề học, tuy nhiên nếu hiểu được hết các khai niệm tôi đã đưa ra thì bạn đã biết đủ để có thể viết được một ứng dụng từ React. Bạn cũng nên tìm hiểu Redux là gì vì nó rất là qua trọng.

Việc làm Reactjs giờ lương toàn nghìn đô không. Anh em vào tham khảo thêm.

TopDev via Kipalog

Code thế nào mới gọi là chuẩn

Dùng Tabs hay spaces?  Để “{“ ngay tại chỗ hay là nên xuống dòng, nên xài 80 chracter width hay 12o?

Các coder luôn cãi nhau về những vấn đề như thế này. Thậm chí vụ tabs vs spaces còn hot tới mức được HBO đưa vào show truyền hình của họ.

Trong bài viết này tôi sẽ đưa ra câu trả lời chính xác nhất cho những vấn đề trên.

Lúc còn trẻ, tôi vẫn hay tham gia bình luận gây war. Tôi cũng xem qua nhiều bài viết về việc tại sao phải làm theo cách này mới đúng trong khi những cách còn lại bị cho là sai hoàn toàn. Và tất nhiên khi xem comment mà nếu có ai nói không đúng theo ý mình là tôi ngay lập tức lao vào gây war.

Phải cho đến khi tôi trải nghiệm việc đời và có sự trưởng thành thật sự thì lúc đó tôi mới tìm được câu trả lời cho những vấn đề như vậy.

Những vấn đề đó chẳng đáng quan tâm

Tính nhất quán mới quan trọng. Phải dễ đọc dễ hiểu. Tranh cãi về cách nào tốt nhất chỉ làm mất thời gian và chả được kết quả gì.

Hơn 20 năm qua, tôi đã trải qua biết bao nhiều trending khác nhau. Điều đó có nghĩa là tôi được tiếp xúc với vô số style code của các ngôn ngữ lập trình. Và điều đáng ngạc nhiên là có dùng style nào thì vẫn chẳng ảnh hưởng đến số bug mà cũng chẳng giúp tôi code nhanh lên tí nào.

Đừng có hiểu nhầm là tôi chê việc code “đẹp”, code gọn. Việc viết code có trật tự, hệ thống và dễ theo dõi luôn là điều đáng mơ ước của các coder. Thế nhưng lí do chọn style để code chỉ vì do nhìn nó đẹp mới là vấn đề bởi nó phụ thuộc vào quan điểm cá nhân.

Một phần khác nữa là việc code luôn cực kì khó nhằn và tốn thời gian. Vì thế đối với những người mới nhập môn với lập trình thì họ luôn cảm thấy “choáng” và cảm thấy tự ti về khả năng code của mình. Do vậy mà họ bỏ nhiều thời gian cho việc tranh cãi những cái vô bổ, chỉ được hình thức mà không có chất lượng.

Và như vậy thay vì tìm kiếm giải pháp, việc tranh cãi lại được sinh ra để ta có thể tránh né những vấn đề khó khăn và to lớn hơn vốn rất cần được xử lý.

Theo “Luật của những thứ không tưởng” của Parkinson, người tranh cãi đôi khi lại không phải là người gặp phải vấn đề đó và họ dùng sự tranh cãi để tránh gặp những vấn đề rất rối hơn. Ông đưa ra môt ví dụ như sau: các kĩ sư là người chịu trách nhiệm cho việc phát triển một quả bom nguyên tử nhưng họ chỉ toàn tranh cãi về việc nên dùng chất liệu gì thay vì tập trung vào vấn đề thiết kế, vốn quan trọng nhất và cũng là khó giải quyết nhất.   

Một ví dụ điển hình nữa là về việc xây nhà che nắng cho …..xe đạp vốn vô cùng vô nghĩa và lãng phí tiền bạc, thời gian.  Poul-Henning Kamp, một developer người Đan Mạch, đã gọi đó là hiện tượng “bike shedding” để ám chỉ việc trên.

Và nếu bạn làm trong ngành lập trình cũng như là thường xem tinh tức online và các trang mạng xã hội thì bạn sẽ thấy cái “bike shedding” ở khắp nơi. Mọi coder cứ tranh luận, bàn cãi thậm chí là chửi nhau chỉ vì những vấn đề rất cỏn con như ngôn ngữ lập trình là tốt nhất, dùng space hay tab.

Hãy luôn nhớ bất cứ cuộc tranh cãi nào mà càng nóng thì giá trị và kết quả của chúng càng ít đi.

Là một chuyên gia tư vấn, Tôi luôn phải gặp hết khách hàng này đến khách hàng khác, và từng người một đều có những vấn đề và tính cách khác nhau. Vì thế nên cách duy nhất để tôi có thể thành công là phải bơ đi những chuyện nhỏ nhặt, không đáng kể. Và khi liên quan đến việc lập trình thì cứ làm theo cách mình giỏi nhất và chấp nhận kết quả mình đạt được.

Nếu như bạn đang trong quá trình thắc mắc chưa biết phải chọn style code nào thì hãy tự hỏi mình:

  • Có tool nào giúp mình viết theo style đó một cách dễ dàng và tiết kiệm thời gian không?
  • Những cái tool và style đó có được update thường xuyên không?

Nếu cả 2 câu trả lời đều là có thì bạn cứ làm theo style đó, không phải lo lắng lăng tăng chi nữa.  

Sau đây là những nơi để bạn tìm hiểu thêm để đưa ra quyết định của mình:

Tác giả: Bill Sourour

Đại tiệc Mobile lớn nhất toàn quốc đã khởi động

Sau những thành công lớn từ những năm trước, chuỗi sự kiện Vietnam Mobile Day đang có những bước rục rịch đầu tiên chuẩn bị sự trở lại của mình tại các sân chơi công nghệ lớn trên toàn quốc.

Được biết, sự kiện năm nay dự đoán sẽ quy tụ hơn 10.000 lượt khách tham dự, hơn 200 doanh nghiệp lớn nhỏ hoạt động trong ngành công nghệ thông tin, hơn 100 đơn vị truyền thông trên khắp cả nước tham gia. 120 chủ đề năm nay chắc chắn sẽ là một bữa đại tiệc thịnh soạn cho những ai quan tâm đến lĩnh vực công nghệ nói chung và công nghệ nói riêng.

Chờ đợi gì cho Vietnam Mobile Day

Trong những năm vừa qua, các chuyên gia đã nhận định rằng các startup không chỉ cần kiến thức nền tảng về kỹ thuật chuyên môn, mà sự liên kết giữa các mạng lưới cộng đồng với nhau mới thật sự là một đầu mối tốt nhất đảm bảo cho sự phát triển của các startup trong nhiều lĩnh vực khác nhau. Sự kiện Vietnam Mobile Day hàng năm, đã quy tụ và kết nối được rất nhiều công ty công nghệ và đối tác với nhau, từ đó phát triển thêm nhiều mối quan hệ cần thiết cho những bước tiến mạnh mẽ về sau.
Sau những thành công lớn của các năm về trước, sự kiện năm nay vẫn sẽ giữ nguyên những giá trị cốt lõi phục vụ cộng đồng. Bên cạnh đó phía ban tổ chức sẽ bổ sung thêm nhiều hoạt động cũng như nội dung mới hấp dẫn hơn và phù hợp hơn với sự thay đổi của những công nghệ đang có mặt trên thị trường. 

 

Ông Nguyễn Hữu Bình, CEO – TopDev, trưởng ban tổ chức sự kiện Vietnam Mobile Day cho biết:

“Như mọi năm, đến thời điểm này thì công tác chuẩn bị của chúng tôi đã gần như hoàn thành, những nội dung và diễn giả cũng như các chương trình hỗ trợ cho cộng đồng cũng đã được khởi động nhằm thúc đẩy sự đi lên của toàn hệ sinh thái startup nói chung và của cộng đồng công nghệ nói riêng. Hy vọng ở chương trình lần này, chúng tôi sẽ đưa ra nhiều chương trình đột phá hơn dành cho khán giả đang nóng lòng chờ đợi sự trở lại của Vietnam Mobile Day.”

Đặc biệt, các nhóm chủ đề năm nay vẫn phủ sóng đầy đủ và bao quát tất cả những nhóm chủ đề nóng nhất trong ngành công nghệ như Mobile Marketing, ASO, SEO, Analytic Social Media. Crossplatform, Native, Hybrid, Webapp, UX/UI Design, Product Development, QA & Testing, Mobile Game và tối ưu ứng dụng trên các hệ điều hành Android và iOS. Ngoài ra còn có các nhóm chủ đề cực kỳ đặc trưng thuộc phân khúc Architechture, Infrastructure, và Security. Đương nhiên, không thể thiếu sự có mặt của các nhóm chủ đề cũng như các chương trình hỗ trợ đặc biệt dành riêng cho cộng đồng Khởi Nghiệp luôn được các doanh nghiệp cực kỳ quan tâm. Danh sách vẫn còn đang được tiếp tục cập nhật liên tục cho đến ngày diễn ra sự kiện. Những bí mật sẽ được dần hé mở để tạo sự bất ngờ đến phút cuối cho khán giả tham dự sự kiện năm nay.

Tất cả chúng ta hãy cũng chờ đợi những bất ngờ sẽ diễn ra trong sự kiện Vietnam Mobile Day, điều gì sẽ là chìa khoá giúp các lập trình viên cũng như những chuyên gia marketing có thể đón đầu xu hướng, từ đó có được những bước tiến xa hơn trong chuyên môn cũng như sự nghiệp của mình? Câu trả lời sẽ không còn là một ẩn số nữa. Thời gian đã bắt đầu được đếm lùi, tất cả sẽ được giải đáp tại chuỗi sự kiện Vietnam Mobile Day.

Đặc biệt hơn, từ ngày 01/04 đến ngày 15/04/2017, khi đặt mua vé với mã code FIRSTFLIGHT, bạn sẽ được giảm tới 100.000 VND, chỉ còn 150.000 VND/vé (giá gốc 250.000VNĐ)!
Kết quả hình ảnh cho đăng ký ngayCơ hội tiếp cận những xu hướng mới nhất, những diễn giả nổi tiếng nhất trong lĩnh vực mobile đang chờ đón các bạn tại sự kiện Vietnam Mobile Day 2017. Tham dự sự kiện cực khủng chỉ với giá vé tí hon, nhanh tay trở thành 1 trong 200 người đầu tiên sở hữu chiếc vé Early Bird đặc biệt này.

THỜI GIAN DỰ KIẾN DIỄN RA SỰ KIỆN

* TP. Hồ Chí Minh:

Thời gian: 20/05/2017

* TP. Hà Nội:

Thời gian: 27/05/2017

* TP. Đà Nẵng:

Thời gian: 03/06/2017

Vietnam Mobile Day được TopDev tổ chức hàng năm và cũng được biết đến với vai trò nhà tổ chức chuỗi sự kiện lớn nhất trong ngành web – Vietnam Web Summit. Năm nay, với sự bảo trợ của Hiệp hội Thương mại điện tử Việt Nam (VECOM), hứa hẹn sẽ đem đến cho cộng đồng lập trình, doanh nghiệp và khởi nghiệp tại Việt Nam những số liệu, kiến thức, kĩ năng bổ ích và mở rộng quan hệ hợp tác cho các cá nhân, tổ chức và doanh nghiệp lớn nhỏ đang hoạt động trong lĩnh vực web và di động tại Việt Nam.

***Thông tin chi tiết về chương trình, BTC sẽ cập nhật đầy đủ tại địa chỉ:***

Website: http://mobileday.vn

Fanpage chính thức: https://www.facebook.com/mobiledayevent/

Để biết thêm thông tin xin vui lòng liên hệ:

Tổng quát về sự kiện:

Ms. Thảo Nguyên

Điện thoại: 08 6681 3236 | 08 6273 3497

Mobile: 0963 651 587

Email: nguyen.nguyen@applancer.net

Về các hạng mục hợp tác tại sự kiện:

Ms. Ngọc Đỗ

Điện thoại: 08 6273 3497

Mobile: 0944 685 243

Email: ngoc.do@applancer.net

 

THÔNG TIN THAM KHẢO VỀ CHỦ ĐỀ DỰ KIẾN TẠI CHƯƠNG TRÌNH MOBILE DAY

1. Nhóm chủ đề về Mobile Business

Nhóm các chủ đề được chia sẻ bởi đại diện các quỹ đầu tư, nhà đầu tư thiên thần và chính các nhà sáng lập, cung cấp nhiều thông tin thú vị đặc biệt là bài học thành công, bài học thất bại, cũng như những thông tin thị trường đáng giá cho người tham dự có ý định khởi nghiệp liên quan đến mobile. Có thể kể đến các chủ đề như: “Các cách kiểm nghiệm một ý tưởng trước khi bắt tay làm một ứng dụng/game.”, “Nhìn lại năm 2016- đầu 2017 để dự đoán các xu hướng của thị trường, xu hướng tìm doanh thu và tiêu tiền hiệu quả.”, “Kinh nghiệm làm mobile và những bài học thất bại nên tránh”, “Chiến lược phỏng vấn lập trình mobile khi bạn không biết code”…

2. Nhóm chủ đề về Mobile Marketing

Tối ưu quảng cáo, tăng lượng người dùng, tăng download/install, giảm remove, giảm chi phí, thu hút người dùng là các vấn đề muôn thuở, vì thế, sự kiện có sự tham gia chia sẻ của các chuyên gia đầu ngành về mobile marketing, ASO, SEO, social media và quảng cáo. Một vài chủ đề như: “Tại sao quảng cáo của bạn không hiệu quả?”, “Tối ưu hiệu quả chiến dịch marketing/quảng cáo trên di động”, “Growth Hacking với Indie Apps trong môi trường quốc tế“, “Các chiến dịch mà các apps Media và Entertainment cần thử”, “Cách đưa quảng cáo vào game hợp lý”…

3. Nhóm chủ đề về Mobile Game

Mobile game có cách xây dựng và quy trình khác hẳn Mobile App và đem lại hơn 60% doanh thu trên các chợ ứng dụng, nên nhóm chủ đề này rất hữu ích cho khán giả quan tâm đến lĩnh vực mobile game, một số chủ đề trong nhóm: “Adventure of Game Designers – How to make a game?”, “Tối ưu hoá game trong unity”, “Làm thế nào để tạo ra một Puzzle games gây nghiện?”, “Thuật toán AI trong Game”.

Tham khảo thêm: Tuyển dụng lập trình Mobile lương cao

4. Nhóm chủ đề về UX/UI Design

Đây là đề tài muôn thuở với rất nhiều kiến thức mới lạ nhưng hầu như tất cả mọi đối tượng trong lĩnh vực mobile cần học hỏi, một số chủ đề thú vị như: “Làm thế nào để đo lường thành công (hoặc thất bại) trong thiết kế UX của bạn”, “Mobile UX Design: Những điều không nên làm”, ” Những kiến thức UX hữu ích mà lập trình viên cần phải biết”…

Tham khảo thêm: Tuyển dụng UX UI Design lương cao

5. Nhóm chủ đề liên quan đến hệ điều hành iOS      

Đúng như tên gọi của nó, các chủ đề trong nhóm này đậm chất kỹ thuật trên nền tảng iOS như “Saving Data in iOS”, “Vừa làm app vừa làm API/webservice bằng Swift”, “Quản lý bộ nhớ trong lập trình iOS ”…

Tham khảo thêm: Tuyển dụng IOS lương cao

6. Nhóm chủ đề liên quan đến hệ điều hành Android

Cũng đúng như tên gọi của nó, các chủ đề trong nhóm này đậm chất kỹ thuật trên nền tảng Android như “Kiến trúc thực sự của hệ điều hành Android”, “Thủ thuật và công cụ tối ưu ứng dụng Android”, “Android TV. Xây dựng app cho TV”, “Xác thực bằng vân tay trong Android”, “Firebase Realtime Database in Android”…

Tham khảo thêm: Việc làm Android lương cao

7. Nhóm chủ đề về Crossplatform/Native/Hybrid/Webapp

Ngày nay, ngoài lập trình native, rất nhiều công nghệ mới ra đời hỗ trợ cho việc làm ứng dụng nhanh chóng và dễ dàng, lập trình một lần, build app đa nền tảng như Xamarin, React Native, Ionic, Cordova…đổi lại chúng cũng đem đến nhiều thách thức và khó khăn cho việc lựa chọn công nghệ để triển khai cho dự án. Nhóm chủ đề này bao gồm nhiều chủ đề nhỏ, vài trong số đó là “Crossplatform/Native/Hybrid/Web app, lựa chọn nào cho dự án?”, “React Native for iOS Development”, “Lập trình iOS app với Xamarin và Visual Studio”…

8. Nhóm chủ đề về Appstore, Playstore, Gamification, General problem

Nhóm chủ đề hết sức hữu ích cho công đoạn phát hành ứng dụng, tuy nhiên, lại rất cần chuẩn bị kỹ ngay trước cả giai đoạn coding, đặc biệt là Gamification, vài trong số đó là các chủ đề như: “Gamification cho game+app, kích thích user trả tiền, kéo dài thời gian ở lại app, quay lại app”, “Chiến lược đối phó với sự phân mảnh của kích thước màn hình di động, “Vì sao app của bạn bị reject, bị ban, bị xóa trên store”…

9. Nhóm chủ đề về Product Development

Nhóm chủ đề mang tính hàn lâm, nhưng bất kỳ developer nào cũng cần học hỏi để trang bị cho mình những kiến thức và hành trang vững chắc trên con đường tiến xa hơn trong sự nghiệp của mình. Tuy nhiên, BTC đã thú vị hóa nó thông qua các chủ đề hấp dẫn như: “Đo lường hiệu quả làm việc của developer.”, “Câu chuyện về một dự án thất bại”, “Vì sao developer nên có product mindset?”. 

10. Nhóm chủ đề về QA & Testing

Kiểm thử và đảm bảo chất lượng sản phẩm là một trong những khâu quan trọng nhất, có cả một ngành công nghiệp cho khâu này nhưng dường như tại Việt Nam, nó vẫn chưa được các doanh nghiệp quan tâm đúng mức, vì vậy, nhóm chủ đề này sẽ đem lại một cái nhìn đúng mực hơn, với các chủ đề nóng hổi như: ” Những điều khác biệt giữa kiểm thử ứng dụng trên thiết bị di động và kiểm thử trên Desktop và Website”, “Mobile Testing – Emulator và Simulator”, “Automated Testing: Process, Planning, Tool Selection”…

11. Nhóm chủ đề liên quan đến hệ điều hành iOS 

Đúng như tên gọi của nó, các chủ đề trong nhóm này đậm chất kỹ thuật trên nền tảng iOS như “Saving Data in iOS”, “Vừa làm app vừa làm API/webservice bằng Swift”, “Quản lý bộ nhớ trong lập trình iOS ”…

12. Nhóm chủ đề liên quan đến hệ điều hành Android

Cũng đúng như tên gọi của nó, các chủ đề trong nhóm này đậm chất kỹ thuật trên nền tảng Android như “Kiến trúc thực sự của hệ điều hành Android”, “Thủ thuật và công cụ tối ưu ứng dụng Android”, “Android TV. Xây dựng app cho TV”, “Xác thực bằng vân tay trong Android”, “Firebase Realtime Database in Android”…

13. Nhóm chủ đề về Architechture, Infrastructure, Security

Có thể kể một vài chủ đề như: “Kiến trúc đa tầng trong xây dựng ứng dụng”, “Làm thế nào để bảo mật một ứng dụng iOS? Android?”, “Tích hợp các dịch vụ thanh toán trên di động”, “Những lỗ hổng bảo mật trên di động và kiểm thử bảo mật di động”…

Những diễn giả có mặt trong năm nay cũng chính là những chuyên gia hàng đầu trong ngành, những người đã dấn thân thực hiện các sản phẩm lớn thành công trên thị trường. Vì vậy, những chia sẻ của họ được giới chuyên môn đánh giá cao vì chúng đi rất sát với thực tế, kết hợp hài hoà giữa kiến thức và thực hành. Với bề rộng các chủ đề được dàn trải một cách toàn diện cho lĩnh vực web, sự bùng nổ của Vietnam Mobile Day 2017 chắc chắn sẽ là một đòn bẩy cần thiết cho toàn ngành startup công nghệ nói riêng và ngành di động nói chung.

Không phải tiền, đây mới lý do khiến nhân viên “sống chết” vì công việc

Là nhân viên, ai cũng mong muốn có được điều này tại môi trường làm việc nhưng không phải sếp nào cũng biết.

Đã bao giờ bạn tự hỏi các công ty thành công như Google, Zappos, Pandora, Glassdoor, và Menlo Innovations có điểm gì chung? Câu trả lời là: Những công ty này đã tạo ra môi trường làm việc cởi mở, nơi họ cảm thấy mình được đóng góp và công nhận.

Môi trường lý tưởng là nơi mang lại cho nhân viên thứ họ muốn – Tự do

Từ thời xa xưa, con người đã làm việc theo sự phân chia giai cấp và nhân viên “chỉ làm những việc sếp yêu cầu” đã trở thành một nguyên tắc. Các bộ phận thực hiện các nhiệm vụ đơn giản và lặp đi lặp lại trong dây chuyền sản xuất, sự ra lệnh và điều chỉnh từ cấp cao nhất luôn được tuân thủ nghiêm ngặt.

Trong môi trường công sở hiện đại ngày nay, nhân tài cần cấu trúc làm việc cân bằng cho phép họ được tự do để làm những gì mình thích, tham gia đóng góp, đổi mới và sáng tạo.

Theo kết quả nghiên cứu của công ty tư vấn nhân sự Worldblu, các tổ chức đề cao mô hình lãnh đạo tập trung vào sự tự do thường tạo ra nền văn hóa mà ở đó tất cả mọi người đều có quyền lựa chọn và thực hành kỹ năng lãnh đạo, bất kể giới tính, năng lực và vị trí.

Bên cạnh đó, nghiên cứu cũng cho thấy, trong giai đoạn 3 năm, những công ty khuyến khích nhân viên tự do, dân chủ đạt mức tăng trưởng doanh thu hàng năm lớn gấp 6,7 lần các công ty khác nằm trong nhóm S&P 500.

Môi trường kỷ luật tạo căng thẳng và khiến năng suất lao động giảm sút

Khi bạn đang làm việc trong một công ty được gọi là “kỷ luật”, nội quy không cho phép bạn lướt Facebook trong giờ làm việc. Sếp bạn hứa hẹn rằng làm việc tập trung trong suốt 6-8 tiếng sẽ giúp bạn không phải đem công việc về nhà. Và như vậy, bạn sẽ có thời gian cho cuộc sống riêng tư của mình nhiều hơn.

Một công ty như vậy chắc hẳn đang theo đuổi chiến lược “cân bằng giữa công việc và cuộc sống”. Chiến lược này mới nghe thì có vẻ hướng đến lợi ích của người lao động nhiều hơn, nhưng mục đích chính của bất kể công ty nào áp dụng nó đều nhắm tăng năng suất lao động.

Tuy nhiên, các nghiên cứu gần đây đã chỉ ra một thực tế rằng: Môi trường càng kỷ luật, nhân viên càng cảm thấy khó gắn bó và không thể làm việc hiệu quả dẫn đến năng suất lao động giảm sút.

Hãy lấy ví dụ trường hợp của Google – một công ty tạo cho nhân viên môi trường làm việc tự do nhất và nhân viên luôn cống hiến hết mình để đạt kết quả cao nhất.

Giám đốc nhân sự toàn cầu của Google Laszlo Bock đã làm cho việc lan tỏa yêu thương trở nên dễ dàng bằng cách để nhân viên tham gia vào việc khen thưởng lẫn nhau. Google phát hành một công cụ nội bộ “gThanks” cho phép mọi người ghi nhận những đóng góp của người khác.

Nhân viên có thể gửi lời cảm ơn thông qua sự khen tặng hoặc chúc mừng nhau. Những ghi nhận này được đăng tải công khai để các nhân viên khác có thể đọc được và được chia sẻ (việc lan tỏa lời khen làm cho cả người cho và người nhận hạnh phúc hơn).

Bock cũng xây dựng một “Bức tường hạnh phúc” bên ngoài văn phòng, nơi những lời chúc mừng, khen thưởng và cảm ơn nhau được in ra và dán lên. Bất kỳ nhân viên nào cũng có thể thưởng cho nhân viên khác một phần thưởng tiền mặt 175$ mà không cần bất kỳ sự giám sát hay hay theo quy định nào từ công ty. Đó là lý do mọi nhân viên Google luôn cảm thấy hạnh phúc tại nơi làm việc và cố gắng phấn đấu hết mình vì công việc.

Nguồn: blog.topdev.vn via cafef.vn

Tìm hiểu lập trình Javascript trong năm 2024

Bạn là một lập trình viên có kinh nghiệm 5 năm làm việc với các REST API? Bạn đã tối ưu tìm kiếm cho hệ cơ sở dữ liệu khổng lồ ở công ty bạn? Bạn đã viết các chương trình nhúng cho cái lò vi sóng? Hẳn là cũng lâu rồi kể từ lúc bạn đánh vật với mấy cái Prototype.js để viết OOP phía trình duyệt sao cho chuẩn. Và bây giờ bạn quyết định rằng đã đến lúc để nâng cấp các kĩ năng front-end của bạn. Tuy nhiên khi bạn bắt đầu tìm hiểu thì bạn ngay lập tức cảm thấy như thế này.

Cái cảm giác vô định, bối rối này thực ra lại là một chuyện thường ngày ở huyện trong cộng đồng Javascript. Nếu vẫn chưa đủ khiến các bạn bối rối, thì đây là 1 cuộc nói chuyện giữa 2 người bạn, phản ánh chính xác tình trạng trên.

Nhưng bạn lại không có thời gian để mà lo lắng về 1 đống công nghệ trôi nổi xung quanh ấy. Bạn hiện giờ đang ở trong một cái mê cung, và bạn cần 1 cái bản đồ. Được thôi, tôi sẽ làm cho bạn 1 cái.

Tuy nhiên có 1 chút lưu ý nho nhỏ: đây là 1 tài liệu tham khảo giúp bạn nhanh chóng sử dụng các công nghệ hiện thời mà không phải suy nghĩ quá nhiều. Về cơ bản tôi sẽ phác ra 1 bản danh sách các công cụ kết hợp tốt với nhau cho nhu cầu thường thấy của các lập trình viên front-end. Điều này sẽ giúp bạn thoải mái, tránh đi những cơn đau đầu không cần thiết. Một khi bạn đã hoàn thành các topic này, bạn có thể tự tin tiếp tục với stack mà bạn thấy thích thú.

Cấu trúc “bản đồ”

Tôi sẽ chia thành các vấn đề nhỏ để bạn có thể tập trung xử lý từng cái một. Với mỗi vấn đề đó, tôi sẽ:

  • Mô tả nhu cầu sử dụng công cụ.
  • Quyết định sử dụng công cụ nào đối với vấn đề đó.
  • Giải thích tại sao tôi lại chọn nó.
  • Đưa ra một số giải pháp thay thế.

Quản lý package

  • Vấn đề: cần thiết trong việc tổ chức project và các dependency.
  • Giải pháp: NPM và Yarn.
  • Lý do chọn: hẳn bạn chẳng lạ gì NPM, trình quản lý package thông dụng nhất hiện nay. Yarn, hướng đến giải quyết các vấn đề về tối ưu các dependency, kiểm soát phiên bản của các thư viện bạn sử dụng trong 1 file lock (sử dụng song song với phiên bản ngữ nghĩa – semantic version của NPM, theo cách bổ sung cho nhau).
  • Một số phương án thay thế: trong giới hạn kiến thức của tôi thì là không có.

Javascript

  • Vấn đề: ECMAScript 5 (hay còn được gọi là anh già Javascript) tồi quá.
  • Giải pháp: ES6.
  • Lý do chọn: Kết hợp rất nhiều tính năng có sẵn trên các ngôn ngữ lập trình khác. Vài tính năng thú vị như: arrow function, module import – export, de-structuring, template string, let và const, generator, promise. Nếu là một lập trình viên Python thì bạn sẽ thoải mái thôi.
  • Một số phương án thay thế: TypeScript, CoffeeScript, PureScript, Elm.

Biên dịch

  • Vấn đề: Nhiều trình duyệt đang được sử dụng vẫn chưa hỗ trợ ES6. Bạn sẽ cần 1 trình để biên dịch ES6 sang các chuẩn thấp hơn để tương thích với các trình duyệt, như là ES5.
  • Giải pháp: babel.
  • Lý do chọn: làm việc rất hoàn hảo. Biên dịch phía server.
  • Một số phương án thay thế: Traceur.
  • Lưu ý: sử dụng babel-loader, 1 loader Webpack.

Linting (tìm lỗi code trong nguồn mà không cần phải chạy code)

  • Vấn đề: có rất nhiều cách viết mã Javascript và điều đó dẫn đến việc rất khó đảm bảo consistency (tính chắc chắn). Các linter có thể ngăn chặn được một số bug.
  • Giải pháp: ESLint.
  • Lý do chọn: code rất tuyệt, dễ config. Airbnb preset là mọi thứ bạn cần có để thiết lập và chạy. Giúp bạn làm quen với cú pháp mới.
  • Một số phương án thay thế: JSLint.

Bundling (đóng gói code)

  • Vấn đề: số lượng file trong project ngày càng nhiều. Các dependency cần được xử lý và gọi một cách đúng đắn.
  • Giải pháp: Webpack
  • Lý do chọn: dễ cấu hình. Có thể load tất cả các loại dependency và asset. Tính tương thích cao. Là bundler được ưa thích cho các project React.
  • Một số phương án thay thế: Browserify.
  • Nhược điểm: cấu hình lần đầu có 1 chút khó khăn.
  • Lưu ý: nếu bạn muốn dành thời gian để hiểu thêm về bundler này, bạn cần học về babel-loader, style-loader, css-loader, file-loader, url-loader.

Test

  • Vấn đề: ứng dụng của bạn không hoàn hảo. Với rất nhiều bug (chắc chắn ) thì nó sẽ dễ dàng xảy ra vấn đề, hỏng hóc. Bạn cần test để tránh tối đa lỗi có thể xảy ra.
  • Giải pháp: mocha (test runner), chai (thư viện assertion), và chai-spies (cho các spy, fake object mà bạn có thể truy xuất với bất cứ sự kiện nào – mong muốn hay không mong muốn xảy ra).
  • Lý do chọn: sử dụng rất đơn giản, rất mạnh mẽ.
  • Một số phương án thay thế: Jasmine, Jest, Sinon, Tape.

Framework UI/ quản lý trạng thái

  • Vấn đề: Các SPA (Single Page Application) đang ngày càng nhiều, càng phức tạp. Do đó các state (trạng thái) hay thay đổi trở thành rắc rối lớn.
  • Giải pháp: React và Redux.
  • Lý do chọn React: Tạo sự thay đổi lớn trong cách tư duy, xóa bỏ nhiều ràng buộc cũ kĩ của các website, làm cho các website trở nên tuyệt vời hơn. Không còn sử dụng phương pháp truyền thống nữa, thay vào đó là chia nhỏ các mối quan tâm: bỏ đi cách chia các thành phần theo công nghệ (HTML, CSS, JS), chuyển sang cách chia tách chúng theo chức năng (các component). UI lúc này hoàn toàn là các function thuần của state.
  • Lý do chọn Redux: Nếu bạn có ý định xây dựng 1 ứng dụng lớn, bạn cần 1 công cụ để quản lý state (mặt khác bạn sẽ cần các component tương tác với nhau, hãy học Vanilla inter-component communication trước để trải nghiệm). Redux sẽ thực thi pattern theo 1 cách đơn giản. Facebook cũng sử dụng Redux. Thêm vào đó là rất nhiều điều tuyệt vời: reload và vẫn giữ nguyên các state, luồng dữ liệu, các test.
  • Một số phương án thay thế: Angular2, Vue.js.
  • Cảnh báo: Lần đầu tiên nhìn thấy JSX hẳn là bạn đã rất bực mình. Chắc hẳn bạn đã phải kháng cự lại mong muốn tìm ngay một forum và gào thét lên với các đồng đạo. Nó chỉ là do sự mâu thuẫn trong nhận thức. Sau khi học 1 thời gian, bạn mới nhận ra rằng trộn lẫn HTML, Javascript, CSS trong 1 file đơn lẻ hóa ra cũng không phải là 1 ý tưởng tồi tệ.

Thao tác, animate DOM

  • Vấn đề: Bạn thỉnh thoảng vẫn cần quick fix mỗi khi bạn chọn lựa các selector và thực hiện các hoạt động trực tiếp trên các nút DOM.
  • Giải pháp: ES6 hay jQuery.
  • Lý do chọn: Hiển nhiên là jQuery vẫn đang sống mạnh và khỏe. React và jQuery chả đụng chạm gì đến nhau cả. Tuy nhiên, có khả năng là phần lớn bạn sẽ làm việc với vanilla React (và querySelector). Và khi đó, việc thêm jQuery sẽ làm tăng thêm rắc rối cho bundle. Sử dụng jQuery ở tầng trên React thực sự không ổn tí nào, bạn cần lưu ý tránh điều đó. Nếu bạn đang đụng phải 1 vấn đề mà bạn không biết xử lý thế nào với React và ES6, hay như các vấn đề về cross browser, thì có thể jQuery sẽ hữu dụng.
  • Một số phương án thay thế: Dojo (tôi không biết là nó có còn tồn tại hay không nữa?).

Styling

  • Vấn đề: Bạn đang có các module thích hợp, bạn muốn chúng là những mảnh hoạt động độc lập, có thể tái sử dụng. Khi đó style của component cần phải linh động như chính component đó.
  • Giải pháp: CSS module.
  • Lý do chọn: Mặc dù tôi thích dùng inline-style (và sử dụng chúng rất nhiều), tôi vẫn phải thừa nhận rằng chúng khá là giới hạn. Đúng là hoàn toàn được khi sử dụng inline-style trong React, tuy nhiên bạn sẽ không thể sử dụng được các giả-selector (như là :hover) với chúng. Điều đó sẽ phá tan tành ứng dụng của bạn.
  • Một số phương án thay thế: Inline style. Điều tôi thực sự khoái inline-style trong React là nó cho phép bạn làm việc với các style như là các object Javascript thông thường. Inline-style cũng ở trong cùng file với component, điều này rất tốt cho quá trình maintain. Một vài người vẫn đang ủng hộ cho SASS, SCSS hay LESS. Tuy nhiên chúng yêu cầu phải thông 1 bước để build, cũng như không linh hoạt như CSS module hay là inline-style.

Vậy là đủ!

Đến giờ thì bạn đã có đống thứ linh tinh để học, nhưng ít nhất thì bạn không cần mò mẫm nghiên cứu nữa. Tôi có quên cái gì không nhỉ? Hay là tôi có sai gì không?

Nguồn: Techtalk via Techmaster

Tìm việc làm lập trình viên trên TopDev

9 điều người thông minh sẽ làm trong ngày nghỉ để công việc thuận lợi hơn

Bạn có biết khi làm việc nhiều hơn 55 giờ một tuần, hiệu quả công việc không còn tăng? Chính vì lý do đó, khoảng thời gian nghỉ ngơi hay những ngày nghỉ phải được dành cho những hoạt động ngoài công việc.

Có những người mang trong mình khả năng làm mọi thứ chớp nhoáng, họ thậm chí còn chẳng dùng tới ngày cuối tuần để làm việc nhưng vẫn vượt trội người khác từ 10 tới 20 giờ làm việc mỗi tuần. Nhóm người này là những người thông minh trong công việc, một thứ mà các nhà tuyển dụng rất ưa thích.

Thế nhưng, không nhất thiết phải sinh ra với một bộ óc hoàn thiện mới có thể đạt được khả năng này, một nghiên cứu mới đây tại Đại học Stanford cho thấy những người lao động bình thường giảm hiệu quả công việc đáng kể khi mà họ làm nhiều hơn 50 giờ mỗi tuần. Khi đạt mức 55 giờ, toàn bộ những gì họ làm không còn gía trị và họ chẳng thể làm được nhiều hơn.

Chính vì lý do đó có những người làm việc tới 70 tiếng/tuần chẳng có hiệu quả khá khẩm hơn những người làm 55 giờ, đó là mức giới hạn của chúng ta.

Những người thông minh, làm việc hiệu quả biết cách sử dụng ngày nghỉ, thời gian rảnh rỗi để tái tạo khả năng lao động, tăng sức lao động làm việc trong tuần. Ngoài ra họ còn thực hiện 10 điều dưới đây.

1. Ngắt kết nối

Ngắt kết nối là một trong những yếu tố quan trọng nhất chúng ta cần thực hiện vào ngày cuối tuần. Lý do vì sao ư? Những thiết bị điện tử giống như sợi dây xích níu kéo con người với công việc, những email, cuộc điện thoại hay lịch nhắc việc luôn xen lẫn vào cuộc sống chúng ta.

Để điện thoại, tiếp cận với kết nối khiến con người luôn bị dính chặt lấy công việc và không có thời gian nghỉ ngơi, tái nạp năng lượng. Nếu đang làm việc trong một môi trường mà bạn không nhất thiết phải làm cả tuần, hãy tự cho mình những khoảng thời gian nghỉ, cuối tuần là khoảng thời gian nên tắt điện thoại, thoát email.

Ngoài ra, việc ngắt kết nối cũng phải được thực hiện cả ở trong suy nghĩ, hãy dừng nghĩ tới công việc và tập trung tận hưởng những phút giây bên gia đình, bạn bè vào ngày cuối tuần.

2. Tối giản những công việc nhà

Cuối tuần, chúng ta thường dành thời gian để dọn dẹp nhà cửa, chăm sóc cây hay những thói quen khác. Thế nhưng, những hành động tưởng chừng thư giãn này lại mang tính chất của công việc. Nó chiếm mất khoảng thời gian thư giãn, nghỉ ngơi của bản thân hơn thế nữa nó cũng mang lại những áp lực không cần thiết mỗi khi bạn không thực hiện theo đúng lộ trình đặt ra ban đầu.

Để tối giản hoá những công việc này, có nhiều thời gian hơn, hãy thực hiện chúng trong ngày. Giả sử nếu cả tuần bạn không dọn nhà, dành ra cuối tuần để làm nó, hãy bỏ ra 15 phút mỗi ngày cho việc dọn dẹp. Vào cuối tuần có lẽ nhà đã đủ sạch nên bạn không cần dọn lại nữa.

3. Tập luyện, tập thể dục

Theo thống kê, mỗi tuần chúng ta có tới 48 giờ để tập thể dục nếu biết sắp xếp hợp lý. Thêm vào đó, tập thể dục chỉ 10 phút thôi sẽ giúp cơ thể sản sinh ra GABA, một hợp chất thần kinh giúp làm giảm stress. Tập thể dục cũng giúp mang tới cho con người thêm nhiều ý tưởng mới trong công việc.

Hãy cứ xem những người làm sáng tạo hay những người thành công , họ luôn tham gia những hoạt động ngoại khoá và luôn có nhiều ý tưởng mới từ những chuyến đi này.

4. Đối chiếu những gì đã thực hiện được

Tự đối chiếu bản thân vào dịp cuối tuần là cơ hội tuyệt vời để cải thiện chính mình. Sử dụng ngày cuối tuần để sắp xếp công việc, tham chiếu lại những thành tựu trong tuần là thứ tuyệt vời và nên được áp dụng rộng rãi.

Nếu như bạn làm nó vào những ngày trong tuần, những xao nhãng sẽ xuất hiện và bản thống kê của bạn chẳng thể nào chính xác.

5. Theo đuổi những thú vui, đam mê

Bạn sẽ bất ngờ về lợi ích của thú vui đem lại cho bản thân vào ngày nghỉ. Bạn thích đạp xe, đi câu cá hay đơn giản là ngồi nghe nhạc trong một căn phòng yên tĩnh? Đừng ngần ngại làm điều đó vào ngày nghỉ vì nó sẽ mang lại cho bạn trí óc minh mẫn hơn, góc nhìn vấn đề mới hơn.

6. Dành thời gian quý giá cho gia đình

Bỏ ra 2 ngày cuối tuần hay vài ngày nghỉ với gia đình chưa bao giờ là điều phí phạm. Hãy nhìn xem, bạn dành ra cả tuần trời cho công việc nhưng thời gian cho gia đình, những người quan trọng với bạn nhất lại chẳng là bao.

Đưa con cái đi chơi, xem phim cùng vợ hoặc đơn giản là đưa cha mẹ đi ăn một bữa ăn tử tế là những thứ hãy thử làm. Có thể họ không mang lại doanh số khủng hay hiệu quả công việc bạn vẫn ao ước, thế nhưng họ chính là liều thuốc tinh thần giúp cho tuần làm việc của bạn thêm phần khởi sắc.

7. Lên kế hoạch cho những chuyến du hành nhỏ

Thử nghiệm một chương trình ca nhạc mới, đi ăn ở một nhà hàng vừa khai trương hay đơn giản là đi bộ tới những vùng chưa từng nghĩ tới… những chuyến du hành mini này rất phù hợp để thư giãn, thử thách bản thân.

8. Cố gắng thức dậy đúng giờ

Mặc dù việc ngủ nướng cuối tuần thật là một điều tuyệt vời, thế nhưng nó lại không mấy tốt cho chúng ta. Không những lãng phí thời gian cho việc ngủ mà nó còn phá hỏng đồng hồ sinh học, nhịp ngủ của mỗi người và khiến ta khó thức dậy hơn trong tuần làm việc mới.

Hãy duy trì mọi thứ điều độ, đúng giờ và bạn sẽ có khả năng kiểm soát những thứ đến với mình. Nếu bạn muốn ngủ nhiều hơn vào dịp cuối tuần? Đơn giản thôi, hãy ngủ thêm vào buổi trưa hoặc ngủ sớm hơn vào tối trước đó.

9. Chuẩn bị cho những điều sắp tới

Ngày nghỉ là khoảng thời gian thống kê lại những gì đã làm, chuẩn bị cho hững gì sắp tới ở tương lai. Chỉ cần 30 phút lên kế hoạch sắp tới cho bản thân, bạn sẽ thấy mình làm việc hiệu quả hơn rất nhiều. Thực hiện theo bản kế hoạch này sẽ giúp bạn kiểm soát thời gian đơn giản ở tuần kế tiếp.

Nguồn: blog.topdev.vn via cafef.vn

Top 10 GitHub repos mà các lập trình viên phải biết

Cộng đồng FreeCodeCamp là một trong những online forum lớn nhất về lập trình, trung bình có hàng gigabytes data được tạo ra mỗi tuần. Một trong những hệ thống hoạt động tích cực nhất của FreeCodeCamp là phòng chat. Có tới hàng nghìn thành viên chat với nhau về công nghệ , đưa ra lời khuyên cũng như giúp đỡ nhau trong việc coding.

Vốn thường xuyên theo dõi chat room, tôi luôn tự hỏi là GitHub repositories nào mọi người hay hỏi hoặc nói về nhất. Thế nên hôm nay, tôi tự phân tích lại bản chat lịch sử nặng tới mấy gigabyte của phòng chat chính của freeCodeCamp

freeCodeCamp/freeCodeCamp

Không có gì ngạc nhiên với vị trí đứng đầu. Tại freeCodeCamp thì topic được nói nhiều nhất cũng chính là platform của nó. Có tới gần 250k sao, 10k người trả lời cũng như là cả trăm vấn đề, pull request hàng tuần. Vì vậy mà cũng không có gì lạ khi rất nhiều người dùng nói đến nó.

getify/You-Dont-Know-JS

Kyle Simpson’s You Don’t Know JavaScript có thể xem là một cuốn sách tham khảo về JavaScript “không chính thức” cho các thành viên trong cộng đồng freeCodeCamp. Kyle hiện tại đang làm trong một dự án tương tự là YDKJS “Functional Light JS”, cũng được nhiều người biết đến.

vhf/free-programming-books

Một trong những list cập nhật thường xuyên free resources. Không những thế bài viết được sắp xếp có trật tự theo thứ tự bao gồm books, podcast, websites, developer tools, và tất cả những nguồn khác đến từ khắp nơi của thế giới. Là một những nơi mà người học lập trình phải “kinh” qua.

twbs/bootstrap

Github account của Bootstrap, một web deisgn framework khá nổi tiếng. Bài viết chứa đựng nhiều thông tin về kĩ thuật và nhiều link dẫn đến các site hữu ích khác. Nếu bạn có hứng thú và muốn xem thêm thì có thể vào trang chủ của getbootstrap.com.

jwasham/coding-interview-university

Googley as Heck tạo ra repository này nhằm viết lại quá trình 8 tháng chuẩn bị cho buổi phỏng vấn với Google. Bài viết bao gồm một list chi tiết những điều bạn cần biết về google như whiteboard test, các concept về khoa học máy tính (Ấy thế mà sau ngần ấy công sức chuẩn bị, anh lại về Amazon làm).

ericelliott/essential-javascript-links

Trong một thời gian dài, Eric Elliott’s JavaScript Links repository được xem là resource được biết đến nhiều nhất trong cộng đồng freeCodeCamp. (Gần đây thì bị soái ngôi bởi vhf/free-programming-books.)

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

d3/d3

Nếu muốn học về d3.js, thì đây là là một trong những nơi tốt nhất để bắt đầu. Thành viên của freeCodeCamp cũng thường xuyên nhắc đến 2 khu vực khi nói về repo này:

Chúng đều chứa những thông tin rất hữu ích cũng như là list hướng dẫn để bạn có thể tự học d3.js.

vinta/awesome-python

Được gọi là “list về sự tuyệt diệu của Python framwork, libraries, sofware và resource”, đây là một nơi tuyệt vời để bắt đầu học và cải thiện trình Python của bạn.  

oneuijs/You-Dont-Need-jQuery

Một kho tài nguyên khá nổi tiếng về các giải pháp cho những lỗi thường gặp trong lập trình với Javascript.

toddmotto/public-apis

Một list collection công khai về APL. Được cập nhật thường xuyên cũng như sắp xếp, phân chia thành nhiều mục khác nhau giúp người dùng dễ dàng trong việc tìm hiểu.

Tất cả data ở trên được thu thập từ lịch sử phòng chat chính của freeCodeCamp từ tháng 6 năm 2016 đến tháng 3 2017. Tôi chạy một script của Python để đánh giá thông tin, rồi xếp hạng các link dựa theo số lần được nhắc tới bởi người dùng. Sau đó tôi lọc và chọn lại lần cuối. Tất nhiên, bản list này chỉ là một phần nhỏ bề nổi thôi. cộng đồng freeCodeCamp có tới hàng trăm repo mỗi ngày.

Nguồn: blog.topdev.vn via medium

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

Cuộc chiến giữa 1 triệu Reddit user để vẽ bức tranh 16 triệu pixels

Thứ năm vừa rồi, trang mạng Reddit vừa tung ra Place, một sự kiện trải nghiệm hiệu ứng mạng xã hội nhân ngày cá tháng tư, April Fool. Place vừa mới chấm dứt vào buối sáng thứ 2 và kết quả

Nói đơn giản, Reddit place là một lễ hội canvas cực lớn để các redditor tham gia. Có thể nói đó là một sự kiện vẽ ra bức tranh khổng lồ với sự góp mặt của tất cả người dùng từ destop, iOS và cả Android. Các Reddit đều được phép tô màu 1 pixel của canvas trong vòng 5 phút. Do vậy nên các người dùng phải hợp tác với nhau để có thể vẽ nên những bức hình có ý nghĩa.

Tất nhiên là các redditor hưởng ứng nhiệt tình. Tại thời điểm sự kiện gần kết thúc, Reddit thông báo gần họ có hơn một triệu người dùng đang vẽ hơn với hơn 16 triệu pixel màu. Ngay trước khi hết giờ, có tới 90,000 redditor đồng loạt xem và thêm tile.

Những gì mà các người dùng đưa ra phải gọi là không tưởng. Sau đây là kết quả cuối cùng của sự kiện Place canvas:

reddit place resizedMột người dùng còn ghi lại một time-lapse video toàn bộ quá trình diễn ra của trải nghiệm Reddit Place

Cũng như những thí nghiệm về social trước của Reddit, The ButtonRobin, Place cũng tạo ra cuộc chiến nảy lửa giữa các người dùng. Nhiều trang cộng đồng “subreddit’ tuyên bố quyền sở hữu của họ trên bức vẽ khiến cho nhiều nhóm người dùng tranh cãi, phá nhau để có thể tăng kích thước cho phần vẽ của mình.

Bạn có thể thấy cuộc đụng độ bàn phím nảy lửa giữa nhóm vẽ lá cờ Mỹ và những người dùng khác.

Đỉnh điểm của cuộc chiến là khi những người chơi của game online nổi tiếng “osu!’ chiếm được một phần lớn “lãnh thổ” ở khu vực bên dưới của màn hình, và trong một khoảng thời gian ngắn đã biến bức tranh thành một bảng tuyên chiến “Osu! cân cả thế giới”. Cuộc chiến được thể hiện bởi một Reddit user với 3D map của những tiles được đặt bởi người chơi:

Sau cùng, có vẻ Reddit lại tiếp tục thành công cho sự kiện trải nghiệm ngày April Fool.

Và lần này, sản phẩm được tạo ra thật đáng để ngưỡng mộ.

Bài viết gốc được đăng tải tại Businessinsider

Top 10 công ty công nghệ chi đậm để “trộm” nhân tài

Cuộc chiến tranh dành nhân tài trong ngành IT diễn ra vô cùng khốc liệt, theo cuộc khảo sát lương IT của Paysa.

Và luôn có những công ty quyết tâm sẵn sàng chi đậm để có được họ, trong số đó Netflix đứng đầu.

Vừa mới đây, Paysa đã tiến hành cuộc khảo sát về vấn đề thuê tuyển cũng như “trộm” nhân viên để tìm ra top những công ty chi mạnh mẽ nhất và thật bất ngờ khi Netflix chiếm vị trí thứ nhất khi họ sẵn sàng trả gấp 10 lần so với những đối thủ khác để có được những tài năng tới từ LinkedIn, Facebook, and PayPal.

Dựa vào kết quả số liệu thu thập được từ hơn 31,000 thương vụ tuyển dụng, Paysa còn cho biết rằng trong khi Netflix là công ty trả nhiều nhất, vẫn có rất nhiều hãng sẵn sàng chi đậm. Sau đây là top 10 công ty công nghệ trả lương đâm để “trộm” nhân viên từ hãng khác về làm cho mình:

No. 1:

Netflix sẵn sàng trả lương cao gấp 167% so với vị trí hiện tại nếu nhân viên chấp nhận qua làm cho bên họ. Theo lương trung bình của một nhân viên IT là $130,814 thì khi chuyển qua làm cho Netfilx thì họ sẽ được trả tới $329,174.

Tất nhiên là với mức lương tăng khủng như vậy thì promotion phải lớn cũng như stock và các lợi ích khác sẽ ít đi. Các vị trí Senior software engineers ở Netflix có mức lương trung bình $210,244, cao hơn khá nhiều so với $166,403 cho cùng vị trí tại Facebook. Tuy nhiên nếu tính kèm stock và những lợi ích khác thì Facebook lại trả nhiều hơn.

No. 2:

Wikia, trang chuyên Host các fan websites, sẵn sàng trả cao hơn đối thủ đến 72% để nhân viên về làm cho họ.

Điều đó có nghĩa là nếu nhân viên với mức lương trung bình $121,061 sẽ được trả tới $204,077 nếu họ bỏ công ty hiện tại và qua đầu quân cho Wikia.

No. 3:

Một trong những site cung cấp dịch vụ lending nổi tiếng nhất, sẵn sàng tăng thêm 48% lương để trộm nhân viên từ đối thủ. Những vị trí với mức lương trung bình $128,457 sẽ được tăng lên thành $183,469 nếu họ qua làm cho Lending Club.

No. 4:

Microsoft, trả trung bình cao hơn đối thủ 48% để trộm nhân sự. Một vị trí với mức lương trung bình $119,983 sẽ được tăng lên $165,348 khi chuyển qua làm tại Mircosoft.

No. 5:

Tại Groupon, một nhân viên được trả $175,233 so với chỉ $137,390 nếu làm ở công ty cũ. Mức lương tăng là 38%.

No. 6:

Công ty Akamai Technologies trả cao hơn 37% so với mức lương đối thủ để thu hút nhân viên chuyển qua bên họ. Nhờ đó mà lương tăng lên $163,893 so với mức cũ chỉ $126,516

No. 7:

Để trộm nhân tài từ các công ty khác, Palantir sẵn sàng chi hơn cao hơn 37%. Nhân viên khi chuyển qua làm tại Palantir sẽ được trả $169,251 so với $128,040 nếu vẫn tại công ty cũ.

No. 8:

37% là mức tăng lương Salesforce áp dụng cho những nhân sự đầu quân qua bên họ. Nhân viên, với mức lương trung bình $131,758 khi làm tại công ty cũ, sẽ được hưởng mức lương mới là $172,891

No. 9:

Ông lớn Twitter trộm “nhân lực” từ các công ty khác với mức lương cao hơn 37%. Nhờ vậy mà một vị trí nhân viên với mức lương $140,750 sẽ được tăng thành $174,996.

No. 10:

35% là mức lương tăng khi đầu quân về cho Docusign. Như vậy, mức lương mới cho nhân viên sẽ là $173,629. Cao hơn hẳn so với làm ở công ty cũ với mức lương $138,538.

Ngoài ra, Paysa cũng tìm ra được những công ty mà ông lớn công nghệ Microsoft rất thích “trộm” nhân tài từ họ – Trong đó có Amazon, vỗn cũng là chuyên gia…… “trộm” nhân lực. Theo Paysa, Microsoft có vẻ gặp nhiều may mắn hơn khi thành công trong việc khiến nhiều nhân viên của Amazon qua đầu quân cho họ.

Nguồn: topdev via Businessinsider

 

Ngành IT: Làm việc “trên mây” kiếm nhiều tiền nhất hiện nay

Kết quả từ cuộc khảo sát đầu năm của Topdev về lương bổng của lập trình viên cho thấy nhiều thay đổi đã và đang diễn ra trong ngành IT – cuộc khảo sát tập trung vào các câu hỏi về khối lượng công việc, triển vọng cũng như sự hài lòng của họ về việc làm và nhiều câu khác. Báo cáo lương bổng ngành IT quý 1/2017 sẽ cho các bạn những cái nhìn sát thực nhất về thị trường hiện nay.

Đa phần các nhân viên lập trình đều cho rằng lương của họ có tăng nhưng vẫn chưa đủ so với những gì họ đã cống hiến cho công ty. Ngoài ra, nhiều người lo lắng với thị trường việc làm hiện nay dù có nhu cầu lập trình rất cao nhưng các công ty có vẻ đang giảm ngân sách chi tiêu cũng như thuê nhân viên IT.

Nhìn chung lương tăng nhưng đang ở chậm hơn so với trước

Sau giai đoạn tăng trưởng bèo bọt từ năm 2009 đến 2014, mức lương ngành IT đã được chú trọng hơn nhiều trong hai năm vừa qua, với mức tăng trung bình từ 3,6% đến 3,9%. Năm 2017 cũng cho dấu hiệu khả quan khi lương IT vẫn đtăng nhưng tốc độ đã giảm xuống còn 3%.

Mặt khác, hơn 67% người tham gia cuộc khảo sát xác nhận họ được tăng lương, giảm 16% so với cùng kì năm ngoái (71% – 2016). Dựa trên những số liệu trên, một số các nhà phân tích cũng như chuyên gia lập trình lo ngại các công ty đang có kế hoạch cắt bớt ngân sách cho IT.

Số lượng nhân sự IT sẽ tiếp tục tăng

Ngoài ra cuộc khảo sát còn cho thấy 43% số lượng nhân viên IT sẽ tăng lên trong năm 2017. Số người cho rằng sẽ không có thay đổi chiếm 49% và chỉ có 7% manager cho rằng công ty sẽ phải cắt giảm nhân sự bên lT.

Khi các IT manager được hỏi về kế hoạch tuyển nhân sự của họ. 66% nói họ đang tìm kiếm các chuyên gia về lập trình có tay nghề cao, trong khi 30% đang cần nhân viên kĩ thuật bình thường (entry-level) và chỉ có 2% là có ý định tìm kiếm nhân sự ở vị trí quản lí

Lĩnh vực IT nào đang được săn đón?

Trong nhiều năm liền, phát triển ứng dụng vẫn đứng đầu danh sách các mảng công nghệ mà IT manager tin rằng công ty sẽ cần tới trong năm 2017. Các kĩ năng như  help desk/tech support, an ninh, phân tích thị trường và phân tích dữ liệu cũng nằm trong top list của các công ty khi tuyển nhân sự nghành IT. Ngoài ra, năm 2017 cũng đánh dấu cho sự chú trọng trong nhiều lĩnh vực khác của IT như điện toán đám mây, quản trị và kết nối mạng.

Nhiều IT manager cho biết họ vẫn đang gặp khó khăn trong việc tìm kiếm nhân sự cho những vị trí trên: 37% nói rằng trong vòng 2 năm qua, họ mất tới 3 đến 6 tháng để kiếm được người thích hợp cho vị trí trên trong khi 15% cho biết họ chỉ thuê được sau hơn 6 tháng tìm kiếm và có khi còn lâu hơn.

Lương vị trí nào khủng nhất?

Không có gì ngạc nhiên khi vị trí được trả lương hậu hĩnh nhất cũng là vị trí yêu cầu kĩ năng mà các công ty đang cần. Ngành cloud computing hiện cũng lá một trong những ngành được quan tâm nhiều nhất. Ngoài ra, bộ tứ nghành phát triển app, an ninh số, phân tích dữ liệu và điện toán đám mây cũng có tốc độ phát triển nhanh nhất. Không chỉ thế, cả 4 nghành đều có rất nhiều cơ hội cho các IT professional tiềm kiếm việc làm cũng như phát triển sự nghiệp nhờ vào nhiều yêu cầu cũng như vai trò chéo thú vị.

Mức độ hài lòng về lương thưởng?

Mặc dù lương có tăng nhưng chỉ có một nửa số người tham gia cuộc khảo sát cho biết họ hài lòng với mức lương thưởng, trong khi một phần tư câu trả lời là không hài lòng. Khi được hỏi về mức lương của họ trong vòng 12 tháng vừa qua, 14% cho biết họ khá vui sau khi được tăng lương và có tới 21% người được hỏi cho biết họ không được hài lòng lắm.

Cũng chỉ có 21%  cảm thấy rằng mức lương của họ có tỉ lệ tăng phù hợp với nhu cầu  của thị trường.

Bạn làm việc bao nhiêu giờ một tuần?

Làm việc liên tục đã không còn gì lạ đối với nghề lập trình, với trung bình khoảng 46 tiếng hàng tuần. Khoảng 52% nói rằng họ vẫn thường xuyên kiểm tra email hoặc làm những việc liên quan đến công việc với công ty ngay trong cả ngày nghỉ, cuối tuần hoặc lễ.

Bắt kịp sự thay đổi và phát triển của công nghệ IT là điều mà phần lớn người được hỏi cho biết. Tiếp sau đó là việc đánh giá thấp giá trị của người lao động lớn tuổi, việc IT sẽ phải kết hợp với các mục tiêu kinh doanh, khả năng mất việc vì thị trường lao động bị bão hòa. Còn với IT manager thì đó là thiếu nguồn nhân lực giỏi, có trình độ cao.

Khi nói về sự nghiệp riêng, các chuyên gia IT cũng lo rằng họ sợ kĩ năng của mình bị mai một sẽ không bắt kịp được yêu cầu của người tuyển dụng (Được lựa chọn bởi 22% số người trả lời) , lương không tăng (17%), không kiếm được vị trí phù hợp với kĩ năng (14%), sự thay đổi về cấu trúc hoạt động cũng như vai trò của phòng IT trong công ty (12%) và khối lượng công việc nhiều (10%)

Lý do khiến nhân sự ngành IT thay đổi?

Được đánh giá là một ngành có thu nhập cao nên không có gì ngạc nhiên khi đại đa số người tham gia công nhận họ làm công việc mới là vì tiền lương cao (chiếm tới 73%). Một số các nguyên nhân nổi bật khác bao gồm điều kiện việc làm tốt hơn, dành được nhiều thời gian cho bản thân, công việc ổn định hơn, bonus thưởng cao, được tham gia vào các project về công nghệ mới và cả là được thời gian nghỉ nhiều hơn.

Trong số những người quyết định kiếm việc làm mới, 60% nói rằng họ muốn công việc với mức lương tốt hơn, 43% thì vì để có cơ hội thăng tiến, 33% lại vì hoàn thiện bản thân cũng như là vì lợi ích cá nhân và cũng ngần ấy người được hỏi xác nhận họ tìm kiếm công việc mới do đã chán công việc hiện tại cũng như là để thử thách bản thân.

Khi được hỏi về điều gì khó nhất trong quá trình kiếm việc làm, khoảng 22% trả lời rằng họ cần phải biết được bản thân muốn gì từ công việc mới; khoảng từ 10 đến 16% cho rằng đó là việc phải nhờ vả và tạo dựng mối quan hệ; phải đòi hỏi mức lương như thế nào, bao lâu thì công ty mới hoàn tất thủ tục tuyển dụng, đáp ứng được đòi hỏi của công ty và cũng như là cách viết CV, phỏng vấn thành công.

Các lập trình viên có cảm thấy hối hận?

Sau cùng thì đại đa số người tham gia cuộc khảo sát tỏ vẻ hài lòng với lựa chọn ngành của mình. Hơn 58% tin rằng ngành công nghệ thông tin có rất nhiều tiềm năng và lương trả hậu hĩnh hơn những ngành khác. 32% thì tin là nó cũng có tiềm năng như các ngành quan trọng và chỉ có 10% nghĩ theo hướng ngược lại.

Và khi được hỏi câu hỏi trên thì có tới 85% người được hỏi cho biết họ hoàn toàn hài lòng với lựa chọn nghề IT. Để xem toàn bộ bản báo cáo, các bạn có thể tải ngay file báo cáo tại đây

Techtalk via topdev

30 tiện ích Chrome cho designer và dev

Với tốc độ ưu việt và nhiều developer tool built-in, Chrome dần phổ biến hơn trong giới designer và developer bên cạnh Firefox. Và cũng chính vì lý do này, số lượng tiện ích mở rộng cho Chrome đang gia tăng ngày càng chóng mặt.

1. CSS-Shack

Công cụ mạnh mẽ này cho phép bạn design thoải mái, và suất thành file CSS dùng được ngay cho web. CSS shack có hỗ trợ layer và hầu hết các tính năng thường thấy của một photo editor.

css-shack

2. Marmoset

Với tiện ích này, bạn có thể xuất code snapshots đẹp lung linh để đưa vào demo và mockup. Bạn cũng có thể thêm theme và nhiều hiệu ứng hình ảnh cho promo và portfolio online.

3. iMacros for Chrome

Với một web developer, công việc test có thể sẽ lặp đi lặp lại rất nhàm chán. Đây chính là cứu tinh của bạn, iMacros sẽ ghi lại và lưu thao tác của bạn. Những công việc lặp lại dài lê thê giờ đây chỉ cần được thực hiện một lần duy nhất. Chỉ với một cú click chuột, bạn có thể test page bao nhiêu lần cũng được.

iMacros for Chrome

4. Font Playground

Một tiện ích hoàn hảo cho (web) designer và developer. Với Font Playground, bạn có thể “đùa nghịch” thỏa thích với các font bạn hiện có và thư viện Google font đồ sộ. Font sẽ được áp thẳng lên web mà không cần phải thao tác phức tạp. Không chỉ đơn thuần áp font, tiện ích còn cho phép bạn thử nghiệm thay đổi weight, style và effect tùy thích.

5. Window Resizer

Tiện ích làm việc đúng như tên, resize lại cửa sổ trình duyệt, từ đó giúp bạn theo dõi design của mình chuẩn xác hơn. Bạn có thể chọn từ một danh sách chuẩn màn hình phổ biến có sẵn, hoặc theo thiết lập tùy chỉnh.

6. Project Naptha

Nhờ vào công nghệ OCR thông minh, tiện ích cho phép người dùng highlight, copy, paste, và thậm chí dịch text ra từ ảnh.

7. What Font

What Font giúp deverloper và designer xác định font dùng cho một web nhất định. Vì vậy, nếu bạn hay thi thoảng bắt gặp vài font đẹp hay ho mà muốn “tái sử dụng”, bạn chỉ cần hơ chuột vào text để biết được.

8. Yslow

Công cụ không chỉ kiểm tra tốc độ load của web, mà còn cho biết lý do web chạy chậm, nếu có. Yslow sẽ kiểm tra đối chiếu với 23 trong số 34 quy luật của Yahoo’s performance team. Đây cũng là công cụ phân tích và tối ưu web vô cùng hiệu quả.

9. Web Developer

“Không dùng cái này thì dev sống sao đây.” Tiện ích thêm hẳn một toolbar vào Chrom với nhiều công cụ lập trình mạnh mẽ.

10. Page Ruler

Page ruler là công cụ đo lường các thành phần trên web “chuẩn từng li”, bạn chỉ việc đặt thước và lấy thông tin của thành phần đó.

11. Web Developer checklist

Công cụ này sẽ kiểm tra web của bạn từ trên xuống dưới (tất nhiên chỉ khi web của bạn là theo chuẩn) về mọi mặt: SEO, khả năng khả dụng, khả năng truy cập, tốc độ,… Ví dụ như, nếu bạn thiếu tag H1 trên page hoặc page thiếu meta title hay meta description, công cụ sẽ thông báo bạn ngay. Nếu bạn click vào link  ‘more info and help’ ở cuối tiện ích, bạn sẽ thấy checklist chi tiết hơn.

12. DevTools Autosave

DevTools AutoSave cho phép tự động lưu bất cứ thay đổi của trang CSS và JS thông qua môi trường Chrome Dev Tools vào file nguồn. Công cụ rất dễ thiết đặt và sử dụng.

13. Instant Wireframe

Biến bất cứ web nào thành wireframe chỉ với một cú click chuột. Bạn giờ đây có thể kiểm tra web, local lẫn live, qua wireframe nhanh chóng.

14. ColorZilla

Tiện ích ColorZillar là một tập hợp eyedropper (đo màu), colour picker(bảng màu), gradient generator (đổ bóng) cùng nhiều công cụ khác cho công việc design.

15. Ripple Emulator

Ripple Emulator là một công cụ giả lập môi trường mobile đa nền tảng giúp test ứng dụng web trên một số thiết bị và màn hình hiển thị. Rippe có thể kết hợp với các công cụ lập trình hiện có để thực hiện debug, kiểm tra DOM và test tự động.

16. Streak

Streak là công cụ quản lý CRM mạnh mẽ có hỗ trợ email trong Gmail. Công cụ biến một hoặc một loạt email thành ticket dễ theo dõi, quãn lý và chia sẻ.

17. Search Stackoverflow

Nếu đã là web developer, chắc hẳn bạn đã nghe qua về Stack Overflow, địa chỉ phải đến khi vấp phải bất cứ vấn đề lập trình nào. Nếu chưa nghe qua, bạn nên vào xem thử ngay đi, cộng đồng Stack Overflow đang phát triển mạnh mẽ với một loạt chủ đề đa dạng từ C#, Java đến PHP và jQuery. Tiện ích này sẽ thêm một search box trực tiếp lên trình duyệt giúp bạn tìm kiếm kho kiến thức khổng lồ của Stack Overflow mọi lúc, mọi nơi.

18. PHP Ninja Manual

Việc nhớ hết tất cả các hàm gần như là không thể, và đây là công cụ giúp bạn giải quyết vấn đề này. The PHP Ninja Manual là kho tài liệu PHP 5.5 kèm theo ví dụ (của 8 loại ngôn ngữ) ngay trên trình duyệt.

19. PerfectPixel

Design rất bực mình khi thấy sản phẩm sau code lại không đẹp “choáng váng” như thiết kế của mình. Perfect pixel thực sự là công cụ hỗ trợ hay cho các designer đang phát triển web đúng theo như thiết kế. Tiện ích sẽ đặt một hình ảnh mờ chồng lên web như hình, đồng thời so sánh giữa hai ảnh để đảm bảo độ chính xác đến từng pixel.

20. Code Cola

Bên cạnh khả năng hiển thị mã nguồn của đối tượng, công cụ còn một CSS editor cho phép bạn chỉnh sửa CSS style và xem kết quả tại chỗ.

21. Chrome Sniffer

Tiện ích này giúp kiểm tra, xác địch thư viện JavaScript và ứng dụng đang chạy trên web. Cách sử dụng không thể dễ hơn được nữa: một icon sẽ xuất hiện trên thanh địa chỉ cho thấy phiên bản CMS và framework được sử dụng.

22. User Agent Switcher

Một công cụ hay nếu muốn thấy giao diện của web trên nhiều thiết bị truy cập khác nhau như: iPad, iPhone, Android,…

23. IE tab

IE tab là một trong những giả lập IE hàng đầu hiện nay. Cộng cụ giúp developer test page cho nhiều phiên bản IE trực tiếp trên trình duyệt Chrome.

24. PicMonkey

Một tiện ích photor editor cho phép bạn chỉnh sửa hành ảnh và screenshots của web. Nhưng đây chưa phải là tính năng làm ứng dụng nổi tiếng. PicMonkey cho phép bạn tải tất cả hình ảnh và screenshot của cả một trang web trong một cú click chuột. Khi đã lựa chọn một hình ảnh, bạn có thể điều chỉnh tùy thích từ thêm hiệu ứng đến phơi sáng,…

25. Chrome Daltonize

Colour Vision Deficiency (CVD) – khiếm khuyết về thị giác hoặc mù màu đang gây nhiều vấn đề cho hàng triệu người trên thế giới. Tiện ích này sử dụng daltonization, một công cụ cho phép tạo ảnh phù hợp hơn cho người có CVD. Công cụ này sẽ tái thể hiện hình ảnh theo cách nhìn của người có CDV, giúp bạn điều chỉnh thiết kế phù hợp hơn.

26. Appspector

Tiện ích giúp developer kiểm tra thư viện javascript và ứng dụng web. Một icon sẽ hiện trên thanh địa chỉ hiển thị framework được kiểm tra. Tiện ích có khả năng xác định đến hơn 100 thư viên CSS và JS.

27. Check My Links

Bạn đã build xong page? Vậy bạn đã kiểm tra lại đường dẫn chưa? Dù bạn có cẩn thận đến mức nào, bạn sẽ không cách nào đảm bảo được tất cả các link, và kiểm tra lại từng cái một là một công việc kinh khủng. Với Check My Links , bạn chỉ việc chạy tiện ích và ngồi chờ.

28. Flickr Tab

Bạn có phát chán trước những phông tab Chrome đơn điệu? Với, Flickr Tab bạn sẽ không còn chán nữa.

Flickr Tab

Tiện ích gọn nhẹ này sẽ hiển thị một hình ảnh Flickr nổi tiếng mỗi khi bạn mở một cửa sổ mới. bạn có thể click vào ảnh để xem trên Flickr hoặc username để xem thêm ảnh của người dùng đó.

29. Google Art Project

Nếu bạn không thích thú với Flickr Tab và những hình ảnh màu mè. Bạn có thể sẽ thích Google’s Art Project.

Với mỗi tab mới mở, bạn sẽ được chiêm ngưỡng những kiệt tác phân giải cao từ Van Gogh hay Monet. Nếu bạn muốn tìm hiểu thêm, chỉ việc click vào ảnh và bạn sẽ được dẫn đến website Google Cultural Institute với đầy đủ thông tin của tác phẩm và họa sĩ.

30. Data Saver (Beta)

Data Saver, sẽ giảm lượng dữ liệu tiêu thụ khi duyệt web. khi kích hoạt, Chrome sẽ dùng máy chủ Google nén trang web trước khi bạn tải trang. Tuy nhiên vẫn có hạn chế: các trang SSL và ẩn danh sẽ không được hỗ trợ.

Nguồn: Techtalk via creativebloq

 

Viết ngôn ngữ lập trình – Ai cũng làm được?

Trong vòng 6 tháng vừa qua, tôi đang phát triển một ngôn ngữ lập trình gọi là Pinecone. Sẽ còn là quá sớm để kết luận rằng nó đã hoàn hảo, nhưng Pinecone đã có nhiều tính năng hoạt động hiệu quả cho việc lập trình, bao gồm:

  • Variables
  • Functions
  • User defined structures

Trước hết, tôi sẽ nói với các bạn rằng tôi không phải là một chuyên gia lập trình, lại càng không biết mình đang làm cái quái gì, tới giờ cũng vậy. Tôi cũng chả qua được một lớp học bài bản nào, chỉ có học chút đỉnh từ internet rồi cứ lao vào “vọc”, nhiều khi còn bỏ qua nhiều lời khuyên, hướng dẫn.

Ấy thế, mà tôi vẫn tạo ra được một ngôn ngữ lập trình mới. Đã vậy lại hoạt động tốt thế mới hay chứ. Điều đó có nghĩa tôi đã làm điều gì đó đúng.

Trong bài viết này, tôi sẽ cho các bạn thấy điều cốt lõi ở Pinecone (cũng như các ngôn ngữ lập trình khác) để có thể biến các dòng code thành ma thuật thần thánh.

Ngoài ra, tôi cũng sẽ nói về những kinh nghiệm đánh đổi bằng xương máu của mình để đi đến những quyết định then chốt tạo ra Pinecone như bây giờ.

Đây không phải là một bài hướng dẫn chi tiết về cách viết một ngôn ngữ lập trình nhưng nó sẽ là mốc bắt đầu cho những bạn muốn biết về ngôn ngữ lập trình.

Điểm khởi đầu

“Nói thật là em chả biết phải bắt đầu từ đâu cả !” – đó là câu nói mà tôi vẫn thường nghe từ các lập trình viên khác khi nói về việc viết một ngôn ngữ lập trình mới. Nếu đó cũng là phản ứng của bạn thì đừng lo, tôi đã chuẩn bị một list các quyết định cần đưa ra và những bước cần phải thực hiện khi bắt đầu viết một ngôn ngữ lập trình mới.

Compiled vs Interpreted

Có 2 loại ngôn ngữ chính: Biên dịch (Compiled) và thông dịch (Interpreted)

  • Ngôn ngữ biên dịch là ngôn ngữ lập trình mà những trình biên dịch có thể biên dịch mã nguồn thành ngôn ngữ máy. Sau đó được lưu lại để executed sau (Compiled).
  • Với một số ngôn ngữ, mã nguồn có thể được thực thi từng dòng một bởi một chương trình được gọi là trình thông dịch (Interpreted).

Theo lí thuyết thì bất cứ ngôn ngữ lập trình nào cũng sử dụng compiled và interpreted được nhưng tùy vào hiệu quả mà sẽ tập trung vào chỉ dùng compiled hoặc interpreted thôi. Thường thì interpreted  sẽ linh hoạt hơn trong khi compiled sẽ cho hiệu năng cao hơn. Nhưng đây chỉ là bề nổi của một tảng băng vốn phức tạp hơn nhiều.

Bản thân tôi đề cao tính hiệu quả và năng suất vì thế mà tôi nhận ra có rất ít các ngôn ngữ lập trình vừa có hiệu năng cao trong khi vẫn dễ hiểu để người dùng tiếp xúc, chính vì thế mà tôi chọn compiled cho Pinecone.

Đây là một quyết định quan trọng cần phải có ngay từ đầu bởi việc viết ngôn ngữ lập trình sẽ bị ảnh hưởng rất nhiều.

Tuy nói rằng Pinecone được viết theo hướng compiled, nó vẫn có full chức năng của interpreter. Tôi sẽ giải thích cho các bạn lí do ở phần sau của bài viết.

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

Các bạn hẳn cũng đã rõ, tự ngôn ngữ lập trình đã là một chương trình rùi thế nên mà bạn phải biết đọc và viết nó. Tôi thì chọn C++ tại nó có hiệu năng cao mà lại bao gồm nhiều tính năng khá hữu ích. Một phần khác là vì tôi cũng khoái C++

Còn nếu bạn muốn viết một ngôn ngữ lập trình dạng thông dịch (interpreted) thì nó càng phải viết theo hướng compiled ( sử dụng C,C++ or Swift) bởi hiệu năng bị mất trong quá trình thông dịch ngôn ngữ sẽ được khắc phục nhờ vào compiled. Ngược lại với compile thì bạn dùng một ngôn ngữ lập trình “chậm hơn” (Python hoặc là JavaScript) để dù tốc độ compile có giảm đi nhưng vẫn còn hơn là ứng dụng chạy bị lỗi hoặc không ổn định.

Level Design phải cao

Có thế hiểu một ngôn ngữ lập trình có cấu trúc như một cái ổng dẫn nước vậy. Nó sẽ có nhiều tầng khác nhau, và mỗi tầng sẽ là những data được định dạng theo một cách riêng biệt. Ngoài ra nó còn có chức năng chuyển đổi data từ tầng này sang tầng khác.

Tầng đầu tiên sẽ là một string chứa tất cả input source file còn tầng cuối cùng sẽ là kết quả khi app chạy thành công. Các bạn sẽ hiểu rõ hơn về cấu trúc “ống nước” của Pinecone sau khi đọc hết bài viết này.

Lexing

Bước đầu tiên của hầu hết các ngôn ngữ lập trình là Lexing. “Lex” là chữ cái viết tắt ám chỉ việc phân tích từ vựng. Nói cách khác, Lexing tức là chia cắt các đoạn text thành các token riêng biệt.

Tokens

Có thể hiểu Token là một đơn vị nhỏ của ngôn ngữ. Một Token có thể là một variable, tên của  function, operator hoặc đơn giản là số.

Nhiệm vụ của Lexer

Lexer sẽ chia string chứa toàn bộ file của mã nguồn thành một list nhiều string nhỏ chứa các token khác nhau.

Bởi các tầng cao hơn trong cấu trúc “ống nước” của Pipecone sẽ không quay về lấy thông tin từ mã nguồn nữa mà Lexer sẽ đảm nhiệm cung cấp tất cả các thông tin cần cho các stage đó. Nguyên nhân cho việc này là bởi vì để Lexer có thể làm những nhiệm vụ như xóa comments, xác định được token nào là số hoặc là identifier. Như vậy sẽ giúp bạn không phải lo lắng về những qui định khi viết một ngôn ngữ lập trình.

Flex

Ngày đầu tiên tôi bắt đầu viết ngôn ngữ lập trình, việc trước hết tôi làm là tạo ra một Lexer đơn giản. Sau một thời gian, tôi lại tiếp tục học được nhiều tool giúp cho Lexer chở nên đơn giản hơn, ít bị bug hơn.

Flex  là một trong những tool đó. Vốn là một phần mềm tạo ra Lexer. Bạn đưa vào một file chứa cú pháp đặc biệt để miêu tả ngữ pháp của ngôn ngữ mà bạn muốn viết. Flex sẽ tạo ra một phần mềm sử dụng C với tính năng lexing một string và cho ra kết như bạn muốn.

Quyết định của tôi

Dù Flex khá là hữu ích nhưng tôi quyết định vẫn sử dụng Lexer do chính tôi làm ra bởi dù sao thì nó chỉ có vài trăm dòng code, chạy khá êm mà cũng rất tiện cho tôi để chỉnh sửa cũng như thêm operator cho ngôn ngữ mà không cần phải sửa nhiều file khác nhau.

Trình phân tích cú pháp – Parsing

Nhiệm vụ của Parser

Parser thêm cấu trúc cho list của tokens sau khi được tạo ra bởi lexer. Để ngăn sự mơ hồ, bộ phân tích cú pháp (Parser) phải đưa vào ngoặc đơn và thứ tự hoạt động. Thật sự parser không hề khó nhưng khi ngôn ngữ được phát triển thì Perser sẽ trở nên phức tạp hơn.

Bison

Lần nữa, ta lại phải đưa ra quyết định liên quan đến library của một nhóm thứ 3 bên ngoài. Một trong những thư viện parsing mạnh nhất là Bison bởi nó hoạt động khá giống Flex. Bạn viết 1 file với format bất kì để chứa thông tin về ngữ pháp của ngôn ngữ đó, sau đó Bison sẽ dựa vào đó để tạo ra 1 phần mềm C để thực hiện Parsing cho bạn. Nhưng tôi thì lại không xài Bison.

Tự làm vẫn tốt hơn

Với Lexer, lựa chọn tự dùng code của mình đối với tôi là điều hiển nhiên. Bởi lexer thật chất chỉ là một phần mềm không đáng kể đến mức nó khiến tôi cảm thấy hơi bị ngốc luôn nếu mà không tự làm được. Thế nhưng với Parser thì đó lại là chuyện hoàn toàn khác. Chương trình Parser của Pinecone hiện tại dài tới 750 dòng code, đó là chỉ sau 3 lần tôi phải viết lại bởi nó chạy dở như hạch.

Điều khiến tôi đưa ra quyết định này là bởi một vài lí do như sau:

  • Giảm thiểu chuyển đổi ngữ cảnh/thông tin: khối lượng thông tin phải chuyển đổi qua lại giữa C++ và Pinecone đã đủ tệ rùi, giờ mà còn cho Bison vào nữa thì chắc nó “banh xác” luôn.
  • Để build nó đơn giản: Cứ mỗi lần thay đổi ngữ pháp thì Bision lại phải chạy trước cái buid. Dù là có thể để auto tự chạy những việc cứ phải đổi qua lại các build system thì cũng đủ chán nản rùi.
  • Tôi thích build cái gì nó ngầu vãi ra: Ngay từ đầu khi bắt đầu viết Pinecone tôi vốn đã không cho rằng nó dễ. Nếu đã thế thì chơi khó luôn, sao phải sợ mà đưa vị trí trung tâm quan trọng cho những đứa khác chứ (ý là để các phần mềm làm giúp).

Ngay từ đầu tôi đã biết rõ con đường mình chọn vốn không hề đơn giản thế nhưng tôi vẫn tự tin nhờ vào những gì mà Walter Bright nói:

“Biết là thế nào cũng gây tranh cãi khi nói điều này, nhưng tôi sẽ không lãng phí thời gian với Lexer hay Parsen đâu. Chúng rất tốn thời gian. Viết một lexer và parser chỉ chiếm một tỷ lệ rất nhỏ trong công việc viết một trình biên dịch (compiler). Cả cái thời gian mà bạn xài mấy cái trình đó thì tự mình viết còn nhanh hơn. Đã thể sử dụng mấy cái trình tạo ra lexer hay parser còn thường xuyên báo lỗi, ồn ào đến mệt người”

Action Tree

Action tree theo như tôi hiểu thì nó liên quan tới  LLVM’s IR (intermediate representation). Mặc dù có vẻ giống nhau như thật ra bản chất của action tree rất khác biệt so với syntax tree. Tôi đã phải mất một khoảng thời gian để tìm ra được điểm khác nhau giữa chúng.

Action Tree vs AST

Nói nôm na thì Action tree chính là AST nhưng thêm context (thông tin) vào. Những context đó là thông tin về loại function nào hoặc là vị trí mà 1 variable được sử dụng. Bởi vì Action tree cần phải biết và nhớ được những thông tin đó nên phần mềm tạo ra Action tree cũng cần rất nhiều namespace và những thứ khác.

Chạy Action Tree

Khi ta đã có một action tree thì việc chạy code sẽ trở nên dễ dàng. Mỗi action node đều có một function “execute”, chúng sẽ lấy các thông tin input để thực hiện những mệnh lệnh được đưa ra để có thể cho ra output là kết quả những mệnh lệnh đó. Đó cũng là cách interpreter hoạt động.

Lựa chọn để Compiling

“Ủa chẳng phải Pinecone vốn đã compiled rồi mà?”. Bạn đúng rồi đấy! nhưng compiling nó có nhiều cách lắm.

Tự tạo Compiler

Bạn đầu khi mới viết Pinecone thì nghe có vẻ là ý tưởng hay. Bạn cũng biết rùi đấy, tôi thích tự làm, tự “vọc” và tự chế. Thế nhưng việc viết một chương trình compiler nhỏ gọn lại cực kì khó. Đồng thời bởi vì số lượng các thiết kế, cấu trúc và hệ điều hành mà gần như là bất khả thi cho việc tạo ra một compiler backend với đa nền tảng mà chỉ có một cá nhân. Ngay đến cả team của các ngôn ngữ lập trình nổi tiếng như Swift, Rust hay Clang còn chán nản và phải dùng đến những chương trình sau:

LLVM

LLVM là một chương trình tổng hợp của các compiler tools. Nói cách khác, LLVM là một libary giúp biến ngôn ngữ lập trình của bạn thành một thư viện biên soạn chất lượng. Nghe thì có vẻ khá là hoàn hảo đúng không? Thật tiếc là nếu bạn không có chuẩn bị thì dễ “chết đuối” y như tôi. LLVM là một library cực kì đồ sộ và phức tạp. Tôi nhận ra mình phải bỏ ra một khoảng kha khá thời gian để có thể sử dụng LLVM được cho Pinecone.

Transpiling

Vừa muốn Pinecone được viết theo hướng compiled lại muốn hiệu năng phải cao, tôi quyết định sử dụng 1 phương thức khác là transpiling (chuyển đổi)

Tôi viết một chương trình Pinecone cho C++ transpiler, rồi lại thêm tính năng tự động compile cũng như cho ra output với GCC. Hiện tại thì cách này hiệu quả với phần lớn các chương trình của Pinecone. Dù không nhỏ gọn cũng chẳng có được sự tinh tế nhưng ít ra thì nó hoạt động khá suôn sẻ.

Tương lai

Nếu mà vẫn có thể tiếp tục phát triển Pinecone thì chắc chắn là nó sẽ phải có LLVM compiling support thôi. Bởi cho dù tôi có cố đến máy thì cách chuyển đổi – transpiler chỉ là chữa cháy tạm thời thôi. Thế nên trong tương lai không xa thì Pinecone sẽ có sự thay đổi về mặt này.

Lời kết

Hi vọng là bài viết giúp bạn hiểu rõ thêm về ngôn ngữ lập trình. Tôi cũng khuyến khích các bạn thử viết cho mình một ngôn ngữ lập trình riêng. Sau đây là những kinh nghiệm đúc kết được của tôi:

  • Khi bạn còn đang hòai nghi thì cứ chọn interpreted. ngôn ngữ thông dịch luôn dễ để viết, build cũng như học. Không phải là tôi chê compiled nhưng nếu mà bạn không biết phải chọn gì thì cứ interpreted mà tới.
  • Đối với lexer và parser thì cứ “vọc” theo ý bạn. Tại việc tự viết hay sử dụng chương trình có sẵn đều có điểm mạnh điểm yếu của nó. Điều quan trọng là ở bạn.
  • Học theo structure “ống nước” của tôi. Đây là kinh nghiệm xương máu mà tôi rút ra được khi viết nên Pinecone vì thế mà bạn hãy làm theo. Chỉ nên bỏ qua nó nếu bạn thật sự có ý tưởng tốt hơn.
  • Nếu bạn không có thời gian cũng như động lực để viết một ngôn ngữ lập trình quá phức tạp thì thử xài những ngôn ngữ lập trình như Brainfuck. Đây là những interpreter khá ngắn với vọn vẹn vài trăm dòng code.

Sau một thời gian phát triển Pinecone, mắc rất nhiều lỗi cũng như là dành thời gian để sửa những lỗi đó. Pinecone hiện giờ đã vào giai đoạn hoạt động hiệu quả và vẫn được tiếp tục phát triển. Việc tạo ra Pinecone quả thật đã cho tôi rất nhiều bài học hữu ích cũng như những trải nghiệm khó quên và đối với tôi thì mọi thứ cũng chỉ vừa mới bắt đầu thôi. Sẽ còn nhiều thứ để phải làm.

Nguồn: Techtalk via medium

Tăng trưởng ‘nóng’, ngành công nghệ thông tin ồ ạt tuyển người

Doanh thu ngành công nghệ thông tin (CNTT) tăng, doanh nghiệp công nghệ nước ngoài “đổ bộ” vào VN và nhiều doanh nghiệp Việt vươn ra thế giới… đang khiến doanh nghiệp CNTT đua nhau tuyển người.

Nhiều hợp đồng CNTT được doanh nghiệp VN ký với nước ngoài, không chỉ bán sản phẩm mà đưa cả người sang làm việc.

Cùng với đó, việc nở rộ các nội dung số, ứng dụng cho điện thoại, máy tính bảng; phong trào khởi nghiệp liên quan đến công nghệ… đang tạo nhiều điểm nhấn mới trong sự phát triển của ngành CNTT tại VN.

Tuyển dụng tăng kỷ lục

Theo báo cáo về ngành CNTT VN 2017 của các công ty tuyển dụng hàng đầu, nhu cầu tuyển dụng ngành CNTT đang ở mức cao nhất trong lịch sử với gần 15.000 việc làm tuyển dụng trong năm 2016.

Trong khoảng 3 năm trở lại đây, số lượng việc làm trong ngành CNTT được đăng tải đã gia tăng gấp đôi (năm 2013: 6.792 việc làm, năm 2016: 14.997 việc làm).

Với hơn 10.000 nhân sự hiện tại, trả lời Tuổi Trẻ, ông Hoàng Nam Tiến, chủ tịch Công ty FPT Software, xác nhận đơn vị này đang cần tuyển tới 20.000 nhân sự ở tất cả các vị trí từ kỹ sư cầu nối, lập trình viên, kiểm thử… trong giai đoạn 2017-2020.

FPT đã mở riêng một đơn vị tại Nhật Bản và FPT Nhật Bản đã trở thành công ty CNTT nước ngoài lớn nhất tại nước này với 760 nhân sự làm việc tại 4 văn phòng.

Năm 2017, FPT Nhật Bản dự kiến quy mô nhân sự lên đến 3.000 người.

Theo ông Hoàng Nam Tiến, cuộc cách mạng công nghiệp lần thứ tư đã mang đến cho các doanh nghiệp công nghệ những động cơ tăng trưởng mới. Không tiết lộ các hợp đồng với nước ngoài nhưng ông Tiến cho biết “chúng tôi cần tuyển rất nhiều chuyên gia công nghệ”.

Một số doanh nghiệp VN cũng được thông tin đã trúng thầu các dự án phần mềm ở nước ngoài, thậm chí ngay ở các thị trường như Myanmar, Bangladesh, vốn được coi là “sân sau” của các “ông lớn” như Ấn Độ, Trung Quốc…

Hiện tại, tìm thông tin về các doanh nghiệp phần mềm, hiện không khó để thấy họ đang có nhu cầu tuyển người.

Như Công ty phần mềm Misa hiện đang tuyển thêm khoảng 60 nhân sự CNTT cho các vị trí như: lập trình viên, nhân viên giám sát an ninh mạng… để phục vụ mở rộng quy mô cũng như phát triển nhiều phần mềm.

Ông Vương Lê Vĩnh Nhân, giám đốc điều hành Công ty khởi nghiệp TrustPay, cho biết cũng đang muốn tuyển thêm 30 nhân sự CNTT để thực hiện dự án thẻ du lịch thông minh CitiPass…

Bên cạnh đó, nhiều doanh nghiệp công nghệ thế giới đổ bộ, mở rộng hoạt động kinh doanh tại VN như: Samsung, LG, Intel… cũng đẩy ngành CNTT VN phát triển, tăng nhu cầu về nhân lực.

Ngoài ra, với xu hướng CNTT hóa trong hoạt động của các đơn vị nhà nước đang thu hút ngày càng lớn, nhiều doanh nghiệp cũng đầu tư khởi nghiệp, mở rộng kinh doanh mảng CNTT.

Cần đầu tư mạnh cho con người

Trước nhu cầu tăng, nhiều doanh nghiệp đã chủ động “săn đầu người” bằng các chính sách, hoạt động riêng. Không ít doanh nghiệp đã chủ động đặt hàng chương trình đào tạo.

Nhiều chương trình phát triển nguồn nhân lực CNTT VN cũng được các công ty công nghệ lớn của nước ngoài đầu tư, như Samsung VN vừa giới thiệu chương trình Samsung Talent Program (STP) 2017 mới với trị giá 8,5 tỉ đồng.

Tập đoàn công nghệ Huawei cũng vừa công bố dành 2 triệu USD cho các chương trình xã hội, trong đó chủ yếu tập trung vào các hoạt động hỗ trợ đào tạo và phát triển nguồn nhân lực…

Dự báo của các chuyên gia, với gần 80.000 nhân lực CNTT sẽ được các trường cho “ra lò” trong 2 năm 2017 và 2018, so với nhu cầu tính đến cuối năm 2018, VN sẽ thiếu đến khoảng 70.000 nhân lực ngành CNTT.

Theo các chuyên gia, có thể nhiều công nghệ VN đang tụt hậu so với thế giới, nhưng với những công nghệ mới như: điện toán đám mây, dữ liệu lớn, trí tuệ nhân tạo, Internet vạn vật…, kỹ sư CNTT VN hoàn toàn có thể cạnh tranh được với kỹ sư CNTT các quốc gia khác.

Vì vậy, việc đầu tư cho con người đang rất cấp bách. Đây cũng là cơ hội cho ngành CNTT VN để không chỉ phát triển trong nước mà còn vươn ra mạnh mẽ hơn trên thị trường thế giới.

Theo một nguyên lãnh đạo Bộ Thông tin – truyền thông, nhiều doanh nghiệp CNTT của VN đang đầu tư mạnh ra nước ngoài.

Ngoài chiến lược phát triển CNTT đã được thông qua, cần nghiên cứu để nếu cần, cập nhật theo hướng hỗ trợ doanh nghiệp mở rộng thị trường, xâm nhập thị trường ngoài nước.

Đặc biệt, cần quan tâm việc hỗ trợ bằng đào tạo, cung ứng nhân lực chất lượng cao. Việc doanh nghiệp CNTT VN chiếm thị phần cao trong nước và dần chiếm lĩnh thị trường nước ngoài là hoàn toàn có thể, nếu đầu tư bài bản, đúng cách.

Doanh thu 
công nghiệp CNTT đạt gần 
1 triệu tỉ đồng

Theo báo cáo tổng kết năm 2016 của Bộ Thông tin – truyền thông, tổng doanh thu phát sinh trong lĩnh vực công nghiệp CNTT ước đạt 939.400 tỉ đồng (tăng khoảng 10% so với năm 2015).

Tổng số nhân lực trong ngành công nghiệp CNTT trên 600.000 người, trong đó số lao động đang làm việc trong các ngành công nghiệp phần cứng – điện tử khoảng 300.000 người, còn lại thuộc về lĩnh vực công nghiệp phần mềm và công nghiệp nội dung số.

Thêm dự án CNTT VN tại nước ngoài trong năm 2017

Ngoài các dự án ở các nước, ngày 23-3-2017, Công ty hệ thống thông tin FPT (FPT IS) đã chính thức vận hành hệ thống ứng dụng quản lý thuế VAT (IVAS) cho cơ quan thuế Bangladesh (33,6 triệu USD, sử dụng nguồn vốn của World Bank).

Hệ thống IVAS giúp Chính phủ Bangladesh quản lý thuế của hơn 500.000 đối tượng nộp thuế VAT.

Tháng 1-2017, Viettel và các đối tác liên doanh đã được Bộ Giao thông và truyền thông Myanmar cấp giấy phép cung cấp dịch vụ viễn thông cơ bản thời hạn 15 năm. Tổng vốn đầu tư của liên doanh là 2 tỉ USD, trong đó Viettel nắm giữ 49% cổ phần.

 

                                      Topdev via tuoitre

Cách Google tạo ra frameworks cho Web

Ai cũng biết rằng Google sử dụng duy nhất một Repository để lưu trữ và chia sẽ tất cả 2 tỉ dòng code của hãng – với phương thức trunk-based development – phát triển từ một nhánh mã nguồn chính

Codebased của Google được dùng bởi hơn 25000 nhân viên lập trình của hãng từ mọi chi nhánh. Trung bình một ngày, hơn 16000 dòng code được chỉnh sửa.

Bài viết sẽ tập trung nói về ngôn ngữ AngularDart – một mã nguồn mở chạy trên đa nền tảng như Windows, Mac OS X và Linux OS(s).

Chỉ sử dụng một phiên bản

Khi cả một đội ngũ tập trung vào việc phát triển một nhánh chính của mã nguồn (trunk-based development) thì tức là họ đang làm việc với một phiên bản duy nhất. Điều đó nghĩa là bạn không thể dùng các ứng dụng mà có web frame work version khác nhau được. Tất cả các ứng dụng đều phải chạy trên cùng một version của web frame work.

Vì vậy mà đôi khi Google vẫn nói là tất cả các phần mềm của hãng đều chạy trên phiên bản web framework mới nhất.  Điều đó cũng có nghĩ là đôi khi những phiên bản quá mới này tồn tại nhiều lỗi và không được ổn định.

Đọc đến đây thì chắc các bạn sẽ nghĩ rằng “Không phải nó nguy hiểm quá sao?”. Và đúng là cái việc tất cả các phần mềm đều dựa trên một nhánh nguồn chính là rất nguy hiểm nếu có lỗi xãy ra. Nhưng mà hóa ra không chỉ đơn giản là vậy.

Cứ mỗi lần thay đổi 1 dòng code, Google sẽ test tới 76000 lần

Khi một dòng code được thay đổi trong repository của Google thì hệ thống sẽ tự động test cho tất cả các ứng dụng đang sử dụng trên framework đó luôn. Hiện tại, con số test là 76000 lần (Tùy vào mức độ thay đổi mà các ứng dụng không bị ảnh hưởng sẽ không cần test nhằm tiết kiệm thời gian)

Để cho bạn dễ hình dung nhất, tôi đã thử thay đổi một thuật toán nhỏ trong mã nhánh nguồn chính của google (Thêm dòng ‘&& random.nextDouble() > .05’ vào dòng code này). Kết quả là, hơn 1601 bài test được diễn ra và hàng tá ứng dụng cũng như client bị lỗi.

Điều quan trọng là các bài test đều chạy dựa trên các app của người dùng. Nói cách khác, nó phản ánh cách mã nguồn được sử dụng bởi các developer. Đây là điều rất quan trọng bởi nó giúp google hiểu được mã nguồn của họ được các developer sử dụng như thế nào.

Nhờ mà nó giúp cho các app ứng dụng có tính đồng nhất cao. Đó là điều khác biệt giữa việc app được phát triển bởi chỉ một cá nhân với framework tự tạo và một app có tính tương thích cao nhờ vào sự phát triển bởi hàng ngàn người. Vì vậy để phát triển các ứng dụng web thì chúng ta phải sử dụng lựa chọn thứ hai : cùng dùng một web framework.

Nhưng nếu vào một ngày đẹp trời, tự nhiên mã nguồn của web bị lỗi thì sao?

Bạn làm hư thì bạn phải sửa

Khi mà các nhà lập trình của AngularDart đưa ra bất cứ thay đổi nào thì đồng thời họ cũng phải sửa những lỗi xảy ra bởi sự thay đổi đó cho người dùng. Cũng bởi vì tất cả mọi thứ của Google đều thuộc trên một mã nguồn chính nên phải xác định được app ứng dụng nào bị lỗi và sửa ngay luôn.

Nói cách khác, khi mà một thay đổi được diễn ra thì tất cả các ứng dụng cũng được update các bản patch và sửa đổi để có thể chạy được trên phiên bản framework đó. Quá trình vừa thay đổi vừa chỉnh sửa diễn ra liên tục và tuần hoàn sau khi được kiểm tra kĩ lưỡng từ nhiều nhóm developer khác nhau.

Một ví dụ điển hình, khi một thành viên từ nhóm AngularDart muốn thực hiện một sửa đổi gây ảnh hưởng đến ứng dụng Appwork thì nhóm phải vào tận mã nguồn để chỉnh sửa cho ứng dụng đó luôn. Sau đó nhóm phải chạy test để kiểm tra. Chỉ khi bảo đảm được kết quả thì mới lập một danh sách liệt kê các thay đổi và yêu cầu sự chấp thuận từ cả 2 nhóm developer của AngularDart và ứng dụng Appwork. Và nếu được thông qua thì thay đổi mới thật sự được thực hiện.  

Hằng ngày, các developer của AngularDart framework phải tiếp xúc với hàng triệu dòng code từ các ứng dụng được phát triển trên framework của họ. Vì vậy việc phát triển framework sẽ chở nên hiệu quả hơn.

Tuy vậy, việc phải update cho các ứng dụng của người dùng sẽ khiến việc phát triển bị chậm lại (thật sự là không nhiều lắm đâu). Điều đó cũng có lợi và hại tùy vào mục đích sử dụng framework của bạn.

Thế nên giờ thì khi nghe Google nói là họ đã update một phiên bản alpha của library ổn định và bắt đầu áp dụng vào mã nguồn chính thì bạn đã hiểu ý họ là sao rùi nhé.

Khi các bản cập nhật lớn xảy ra

Các bạn chắc sẽ thắc mắc rằng đối với các bản cập nhật lớn với sự thay đổi gần như là tất cả khiến cho 74000 bài test đều hiển thì lỗi thì AngularDart phải làm gì? Không lẽ phải sửa hết cả ngần ấy lỗi?

Chính xác đấy!

AngularDart sử dụng một hệ thống đặc biệt gọi là Sound Dart – với tính năng tự sửa đổi tự động mà không cần tới sự xác nhận của developer. Để dễ hình dung thì khi developer muốn thay một đoạn code ‘bar()’ thành ‘baz ()’ thì thay vì cứ phải thực hiện thao tác thủ công lập đi lập lại thì developer sẽ sử dụng Sound type system của Dart và tất cả các đoạn code ‘bar ()’ sẽ tự động đổi thành ‘baz ()’. Vì vậy nếu không có sự trợ giúp của Sound type thì ngay cả một thay đổi nhỏ cũng cực kì nguy hiểm.

Ngoài ra, Google cũng sử dụng dart_style (định dạng mặc định của Dart) để bảo đảm việc update trên diện rộng. Nói cách khác tất cả dòng code của Dart đều được để ở định dạng trên. Nhờ vậy mà việc thay đổi luôn đồng nhất và không bị lỗi.

Chỉ số hiệu suất

Như bài viết đã đưa ra, Test là một tính năng rất có lợi ích cho AngularDart. Nhưng Test còn giúp cung cấp thông tin về hiệu suất của app. Điều mà Google luôn rất chú trọng vì thế mà hầu như tất cả các app đều có bảng ghi chép lại hiệu suất của chúng.

Vì thế mà khi AngularDart đưa ra các bản thay đổi cấp nhật khiến cho AdWords bị chậm load lại khoảng 1% thì họ đã biết kết quả trước khi việc thay đổi xảy ra rùi. Thế nên khi họ đưa ra thông tin rằng các ứng dụng chạy trên AngularDart nhẹ hơn 40% và nhanh hơn 10% so với 2 tháng trước. Thì đó là số liệu thực tiễn từ các app với hàng triệu người sử dụng.

Công cụ build Hermetic

Vậy trong số hơn 74 ngàn bài test đó thì test nào là quan trọng nhất để các developer theo dõi? Mà cũng không thể chọn từng loại test thích hợp để kiểm tra cho từng thay đổi được? Giải pháp nằm ở một phần mềm gọi là Bazel.

Bởi với hơn 2 tỉ dòng code thì bạn không thể chỉ đơn giản lên từng script được nữa bởi nó quá tốn thời gian. Vì vậy mà bạn phải dùng Hermetic build tool.

“Hermetic” ở đây có nghĩa gần giống như Pure function. Khi mà các bước bạn thực hiện một build không được phép có side effect (như temp files, thay thành PATH etc.) và Input giống nhau thì output cũng phải giống nhau. Nói cách khác, bạn có thể chạy nhiều build khác nhau, từ các máy khác nhau, từ bất kì thời điểm nào mà vẫn có output nhất quán.

Google đã bỏ nhiều năm để tạo ra một tool như vậy. Đó chính là Bazel (open sourced)

Nhờ đó mà các chương trình test cũa hãng có thể chọn build hoặc bài test phù hợp với từng thời điểm và loại thay đổi.

Điều đó có nghĩa là gì?

AngularDart được tạo ra bởi Google với mục đích trở thành mã nguồn mở hiệu quả nhất, tốt nhất với độ tin cậy cao trong việc lập trình tạo website. Và cũng giải thích nguyên nhân vì sao mà các app của google như AdWords và AdSense đều phải sử dụng framework này. Bởi tính tin cậy cao cho người dùng.

Nói cách khác, bởi có lượng lớn khổng lồ các ứng dụng chạy trên AngularDart  mà việc sửa đổi cập nhật lớn sẽ không diễn ra thường xuyên nhằm bảo đảm tính ổn định. Nhờ vậy mà mã nguồn mở cũng trở nên đáng tin cậy hơn bởi mọi thay đổi đều được tính toán kĩ lưỡng.

Theo tôi điều làm nên sự thành công của một mã nguồn đến từ sự bảo trì thường xuyên. Vì vậy mà tôi rất mừng khi Dart có sự tập trung kĩ lưỡng vào các mã nguồn của họ. Bởi nó đều đi theo model của Google trong kinh doanh – tập trung vào chất lượng.

Nguồn: blog.topdev.vn via medium

Xu hướng tuyển dụng 2022: Lương không tăng nhiều!

Tuyển dụng nhân sự luôn là một thử thách đối với các CIO, đặc biệt là đối với việc tìm kiếm nhân sự cho phòng IT với vị trí bảo vệ số và quản trị mạng trong những năm gần đây.

2 nhà tuyển dụng kì cựu về mảng nhân sự IT, Robert Half Technology and TEKsystems đều đưa ra những nghiên cứu phân tích của họ cũng như phán đoán về hướng tuyển dụng trong năm 2022. Sau đây là những điểm nổi bật từ những báo cáo của họ:

Đừng có mong lương tăng nhiều

Phần lớn các leader IT (63%) tin rằng mức lương cho các vi trị của IT trong năm 2017 sẽ ngang bằng với mức cũ của năm ngoái, 1% còn cho rằng lương sẽ giảm. Chỉ có 36% các leader IT là đang có kế hoạch tăng lương cho phòng IT trong năm 2017 này, theo báo cáo của TEKsystems.

“Thực sự là quá thấp, nó chỉ khiến các công ty khó khăn hơn trong việc thu hút nhân tài đến với họ” – TEKsystems nhận xét sau khi thấy số lượng ít ỏi các công ty muốn tăng lương cho nhân viên – “Với sự cạnh tranh hiện nay của thị trường lao động IT, các công ty phải có đối sách lương thưởng để thu hút các nhân tài IT chứ không thể sử dụng mức lương cũ từ mấy năm trước được. Nó chỉ khiến nghành IT bị ảnh hưởng bởi sự trì truệ trong lương bổng”

Trải nghiệm công cụ tính lương gross to net chuẩn tại TopDev

Một vài vị trí sẽ được tăng thêm lương

Cũng theo báo cáo của TEKsystems, mặc dù đa phần các công ty không muốn tăng lương thế nhưng các vị trí đặc biệt mà công ty đang cần thì sẽ là ngoại lệ và được tăng mức lương lên nhằm thu hút nhân sự. Trong đó bao gồm lập trình viên (50% CIO chấp nhận tăng mức lương cho vai trò đó) và lập trình viên phần mềm (47%), an ninh số (45%) và điện toán đám mây (43%).

Chỉ một số ngành IT sẽ tăng thêm nhân sự

Tất cả các CIO đều có kế hoạch tiềm kiếm nhân sự trong năm tới – Nhưng có rất ít có kế hoạch thêm vị trí IT mới: 16% muốn tăng thêm nhân sự IT trong nửa đầu của 2021, và 69% có dự định tuyển dụng thêm nhân sự để lấp đầy vị trí bị bỏ trống, theo báo cáo của Robert Half. Ngoài ra, có khoảng 12% dự định ngừng tạm thời việc tuyển dụng, 2% còn lại có ý định cắt giảm nhân sự bên IT.

Đội ngũ nhân viên IT làm freelancer đang ngày càng gia tăng

Theo báo của các nhà quản lí IT trong năm 2016, 80% nhân viên của họ là làm việc full time trong khi số làm freelancer là 20%. Cũng theo các CIO, họ dự đoán sẽ có sự thay đổi trong năm 2022, với sự tăng lên của các IT làm freelancer được công ty thuê (24%) và giảm của nhân viên fulltime (76%).

Báo cáo của TEKsystems cũng chỉ ra rằng “Với tín hiệu khả quan từ kinh tế, cũng như nguồn vốn tăng lên cho phát triển công nghệ, số lượng nhân sự tuyển dụng cho vị trí full time và freelancer đã tăng đều đặn từ năm 2015 nhưng đang có sự chuyển giao về cán cân tỉ lệ khi phần trăm nhan viên fulltime sẽ giảm và freelancer tăng”.

Các nghành và kĩ năng đang có nhu cầu tuyển dụng cao

Có khoảng 61% CIO cho biết họ gặp nhiều khó khăn để tìm kiếm các chuyên gia công nghệ thông tin với trình độ chuyên môn cao, theo Robert Half. Khỏi được hỏi nghành và kĩ năng nào mà các CIO đang cần nhất thì quản lí dữ liệu đứng đầu tiên (44%); hỗ trợ Desktop (42%); quản lí mạng (42%), an ninh mạng (41%).

TEKsystems cũng hỏi các CIO về những vị trí khó kiếm được nhân sự cho năm tiếp theo. Câu trả lời được đa số các CIO đưa ra là programmers and developers (42%), quản lí mạng (29%), an ninh số (28%) và architect (28%)

Kỳ vọng nghề nghiệp

Trong khi đó, để có cái nhìn khách quan từ phía bên nhân sự, Spiceworks đã khảo sát và hỏi các chuyên gia IT về mức lương và suy nghĩ của họ về công việc và sự nghiệp trong năm 2022. Hóa ra, có tới 37% người được hỏi cho biết họ dự định kiếm việc mới, 26% thì định chấp nhận lời mời làm ở công ty khác.

Hơn nữa, có hơn một nửa (59%) người tham gia cuộc khảo sát tin rằng họ bị trả lương thấp. Thế nhưng chỉ có 24% mong là sẽ được công ty tăng lương (hơn 5% so với năm ngoái) và chỉ có 12% là kì vọng mình được thăng chức.

Nhân viên cũng có kế hoạch riêng

Theo khảo sát của Spiceworks, có rất nhiều nguyên nhân khiến nhân viên muốn kiếm một công việc mới. Sau đây là những lí do thường gặp nhất: Để nâng cao kĩ năng IT (69%); vì mức lương hấp dẫn hơn (64%), làm cho công ty có sự tập trung vào IT hơn (40%); công việc hiện tại quá tải (40%); để có nhiều thời gian cho bản thân hơn (38%), vì có nhiều lợi ích hơn  (bảo hiểm sức khỏe, nhà) (33%); để được làm với team IT chuyên nghiệp và tài năng (26%); để có lợi ích làm xa nhà tốt hơn (ra nước ngoài làm) (24%); để vì chức danh tốt hơn (22%)

“Có rất nhiều chuyên gia IT tin rằng họ được trả thấp hơn những gì mình cống hiến và công ty cũng giảm ngân sách hoặc quá ít cho phòng IT của họ” – Peter Tsai, chuyên gia phân tích IT của Spiceworks, cho biết – “ Vì thế mà khi thấy được dấu hiệu khả quan của thị trường lao động của nghành công nghệ thông tin, có rất nhiều tài năng IT đang có ý định tìm kiếm công việc mới trong năm tới. Họ đặc biệt quan tâm tới những công ty tập trung vào IT, có nguồn nhân lực giỏi và đầu tư nhiều vào các dự án về công nghệ thông tin”

Nguồn: Techtalk.vn via Computerworld

13 điều giúp ứng viên… rớt phỏng vấn xin việc

Chuyên viên tuyển dụng tại Glassdoor, cho biết cô đã được chứng kiến vô vàn các sai lầm mà các ứng viên mắc phải, với hậu quả là họ tự đánh mất cơ hội xin việc của mình.

Hichens cho biết: “Điều tồi tệ nhất là nhiều người đến phỏng vấn mà không hề chuẩn bị trước. Ví dụ như, họ không nghiên cứu về công ty, họ không tìm hiểu về vị trí ứng tuyển, về người đang trực tiếp phỏng vấn mình, và cũng chẳng buồn chuẩn bị câu hỏi ngược lại cho nhà tuyển dụng.”

Tuy nhiên, theo Hichens, việc thiếu chuẩn bị vẫn chưa phải là lý do lớn nhất để nhà tuyển dụng loại bỏ một ứng viên. Thay vào đó, việc đến muộn, hay thậm chí không thèm đến phỏng vấn, sẽ gần như đảm bảo cho bạn một suất “ra về tay không” dù bạn có là một ngôi sao sáng tới đâu đi chăng nữa.

Hichens cho rằng: “Đến trễ cuộc phỏng vấn mà không có bất kì lời giải thích nào, hoặc không gửi email/gọi điện trước thông báo việc đến trễ là một điều tối kỵ. Điều này chắc chắn sẽ hạ knock out 99% số người phỏng vấn. Ít nhất, nếu đến trễ như vậy, hãy gọi và đưa ra một lời giải thích, hoặc bạn có thể đề nghị lên lịch lại chẳng hạn. Quan trọng nhất, hãy nhớ gửi lời xin lỗi đến nhà tuyển dụng vì sự bất tiện này”.

Với nỗ lực giúp đỡ những người đang tìm việc tránh những sai lầm có thể xảy ra, Hichens đã soạn ra danh sách 13 điều bạn nên tránh, dù là bạn đang phỏng vấn cho vị trí thực tập hay giám đốc:

1. Nói xấu công ty và người quản lý cũ. Bạn cần tránh xa điều này bằng bất cứ giá nào!

2. Ăn, uống, thậm chí là nhai kẹo cao su ư? Thời gian phỏng vấn đâu dành để “nhấm nháp” những thứ miễn phí trong văn phòng.

3. Văng tục: bạn không thể làm điều này dù cho văn hoá công ty cho phép, hay ngay cả khi người phỏng vấn bạn cũng đang làm điều đó. Hãy cực kỳ cẩn trọng về chuyện này cho đến khi bạn cảm thấy thật sự an toàn.

4. Nói “à ừm” hay “thì là mà” quá nhiều. 100% các nhà tuyển dụng sẽ lưu ý nếu cuộc phỏng vấn của bạn bị lấp đầy bởi những từ như vậy. Tốt hơn hết là bạn nên tạm dừng để suy nghĩ và không nói bất cứ điều gì, vậy vẫn còn hơn là cứ ậm ừ.

5. Hành động lúng túng: nếu thấy bạn bối rối, hãy dành chút thời gian và hít thở sâu, việc đó hoàn toàn chấp nhận được. Việc cứ lúng túng cố lấp đầy chỗ trống sẽ có hại hơn thôi.

6. Đừng đổ lỗi cho các lý do bên ngoài: Nếu có vấn đề gì xảy ra, hãy coi đây là một cơ hội tuyệt vời để chứng tỏ sự linh hoạt và khả năng giải quyết vấn đề của bạn. Đừng đổ lỗi cho các yếu tố bên ngoài chỉ vì bạn đã một cuộc phỏng vấn không như ý muốn.

7. Trang phục không phù hợp: Hãy tìm hiểu trước buổi phỏng vấn xem kiểu trang phục nào phù hợp với văn hóa công ty mà bạn ứng tuyển. Câu nói “dress for the job you want” (tạm dịch: mặc cho công việc bạn muốn) chẳng bao giờ sai đâu.

8. Không hỏi người phỏng vấn bất cứ câu nào. Bạn nên đưa ra một câu hỏi mỗi khi ai đó đề nghị bạn có bất kỳ câu hỏi nào không. Ngay cả khi bạn cảm thấy như đã “cạn kiệt” câu hỏi, thì vẫn còn 2 câu hỏi dự phòng dưới đây bạn có thể dùng: “Tại sao anh/chị lại chọn công ty này?” và “Trong tương lai, anh/chị cảm thấy hào hứng điều gì nhất về công ty này?”

9. Không mang theo hồ sơ (resume) của bạn. Hãy mang theo vài bản sao – ít nhất một bản cho mỗi người phỏng vấn bạn.

10. Không đưa ra câu trả lời chi tiết. Bạn nên sẵn sàng cung cấp các câu chuyện và ví dụ cụ thể về những gì bạn đã từng làm.

11. Quan tâm đến tiền lương hơn mọi khía cạnh khác. Dĩ nhiên, lương là một phần quan trọng của công việc, nhưng bạn sẽ khó mà tạo được thiện cảm nếu như đó là điều duy nhất mà bạn tỏ ra quan tâm.

12. Không biết sử dụng ngôn ngữ cơ thể, hoặc không nhìn vào mắt người đối diện. Nếu như bạn tỏ ra là một người khó gần và cứng nhắc, liệu có ai muốn làm việc với bạn không?

13. Không thể hiện sự nhiệt tình đối với công ty hoặc vị trí tuyển dụng. Một thái độ nhiệt tình luôn được chú ý cao.

Dĩ nhiên, luôn có những ngoại lệ đối với mọi quy tắc. Ví dụ như bạn có thể an tâm mặc quần jeans khi đi phỏng vấn cho một công ty công nghệ.

Hichens cho biết: “Điều quan trọng nhất là phải tự nhận thức được bản thân và hành động giống một con người bình thường. Không ai mong đợi bạn trở thành một con robot hoàn hảo cả. Hãy làm mọi thứ tốt nhất để chứng tỏ mức độ thông minh về mặt cảm xúc (EQ) của mình, cũng như thể hiện sự bình thản khi đối mặt với các tình huống khó nhằn nhất”.

Tạo CV Online mới nhất cho dân IT