Home Blog Page 179

SOLID – Đã đến lúc cần thay đổi bản thân

Người viết: Quách Đại Phúc

Có thể trong quá trình làm việc với người thông minh chú ý quan sát thì chỉ cần vài tháng, nhưng với những người kém thông minh hơn hay lười hơn thì phải mất cả năm để nhận ra code mình có vấn đề và Bốc mùi đến như thế nào, rõ ràng việc code sạch đẹp, dễ maintain nó cũng như cách sống vậy, có người gọn gàng ngăn nắp, người thì bừa bộn, luộm thuộm (Mình không nói những bạn code không sạch là bừa bộn nhé  cái này chỉ là ví dụ).

Mình tự nhận là người khá ngăn nắp nhưng code thì không sạch (chán). Và mình nghĩ cũng đã đến lúc chúng ta cần tự trau chuốt lại cả cách sống và cách code nếu chúng ta còn tiếp tục muốn sống sót được trong cái nghề mà mỗi ngày càng có nhiều người giỏi hơn, thông minh hơn chúng ta xuất hiện. Chúng ta không thể thông minh, nhanh nhẹn hơn họ được nhưng bù lại chúng ta có sự chỉn chu và những kinh nghiệm xương máu. Để tự thanh lọc mình trong việc code mình bắt đầu lang thang đi tìm những design patterns, Principles … thứ mà những anh hùng đi trước để lại cho hậu thế. Mình đã tìm hiểu DDD, DI …tuy nhiên thấy chúng khá khó hiểu và gây lú (vì mình già rồi chăng). Và nguyên lý SOLID xuất hiện trong quá trình tìm kiếm, đọc … ồ mình nên bắt đầu từ đây, nó khá dễ hiểu, có nhiều người đã áp dụng và chia sẻ trước đây rồi. Tại sao mình lại không chứ. Đầu tiên hãy cùng bắt đầu thanh lọc cơ thể bằng những khái niệm cơ bản nào.

1. Single responsibility principle

Nguyên lý đầu tiên có nghĩa là:

Một Class chỉ nên có một chức năng duy nhất, chỉ sửa đổi với một lý do duy nhất. Giúp dễ dàng quản lý code và bảo trì hơn.

Hãy cùng xem ví dụ sau:

class QuanLySinhVien {
    
    public function getListSV() {}

    public function getDSLopHoc() {}
    
    public function getDSMonHoc() {}

    public function saveSV() {}

    Public function editSV() {}

    public function deleteSV() {}
}

Trước giờ khi học ở trường chúng ta thường viết code theo kiểu 3 trong 1, tức là có gì cũng tống chung vào một class, đôi khi chúng ta lại nghĩ class này thật đa năng nhưng nó chỉ đa năng khi chúng ta đi học ở trường, làm mấy cái project nho nhỏ, và đương nhiên cũng chẳng thầy cô nào phàn nàn về vấn đề đó. Kể cả khi đi làm nhiều lúc chúng ta vẫn thường thấy có những function nghe tên thì đã thấy ngay nó thuộc class B nhưng vẫn có người cố nhét nó vào class A. Nguyên nhân là bởi trong class A đó đang có một số biến mà function này muốn sử dụng mà họ lười khai báo lại ở class B. Điều này là hoàn toàn sai lầm cho sự maintain sau này.

Vậy theo nguyên lý 1, chúng ta sẽ tách class trên ra thành những class con, mà mỗi class thể hiện một đối tượng cụ thể, giữ những chức năng của riêng nó.

class LopHoc {
    public function getDSLopHoc() {}
}

class MonHoc {
    public function getDSMonHoc() {}
}

class SinhVien {
    public function getListSV() {}

    public function saveSV() {}

    Public function editSV() {}

    public function deleteSV() {}
}

Khi đã có những class với những chức năng cụ thể của riêng nó, chúng ta sẽ gặp tình huống trong khi làm việc là spec thay đổi vậy nên chúng ta bắt buộc phải sửa lại code. Chúng ta cùng xem nguyên lý thứ 2.

2. Open/closed principle

Nội dung của nguyên lý này là :

Chúng ta có thể mở rộng một class, nhưng hạn chế thay đổi bên trong class đó.

Thoạt nghe thì thấy không đúng cho lắm, nhưng nghe lại thì thấy không đúng thật (haha) . Các bạn để ý mình đã tô đậm từ Hạn chế bởi lẽ với nguyên lý này chũng ta không nên áp dụng một cách máy móc là cứ có tính năng mới là tôi lại tạo ra một class con kế thừa class cha. Điều này làm cho code các bạn không dễ hiểu mà còn loằng ngoằng hơn. Mà theo mình class mới chỉ nên sinh ra khi nó là một thực thể riêng biệt, không có nó thì thực thể khác vẫn không ảnh hưởng gì, còn nếu sau khi phân tích chúng ta thấy rằng thiếu đi chức năng này sẽ làm ảnh hưởng đến tất cả thì đương nhiên là code cũ đang thiếu, ta nên bổ sung thêm vào cho class đó. Nếu là framework hay plugin thì chúng ta nên tạo commit để contribute cho framework/plugin đó. Giả sử như trong ví dụ về quản lý sinh viên trên, chúng ta muốn tạo chức năng thêm môn học thì thay vì máy móc ta viết class con kế thừa class MonHoc chỉ để thêm tính năng addMonHoc thì ta nên thêm luôn nó vào class MonHoc vì việc thêm môn học là tính năng mà bắt buộc môn học nào cũng cần có.

Hoặc cùng xem class SinhVien, nếu muốn thêm tính năng đăng ký nội trú thì chúng ta nên tách riêng class con kế thừa từ class SinhVien, bởi lẽ không phải tất cả sinh viên đều muốn đăng ký ở nội trú, ví dụ thích ra ở trọ chẳng hạn.

class NoiTru extends SinhVien {
    public function DangKyNoiTru(SinhVien $id) {}
}

3. Liskov Substitution Principle

Nguyên lý này có nội dung như sau:

Các đối tượng thuộc loại con có thể thay thế các đối tượng thuộc loại cha mà không làm thay đổi tính đúng đắn của chương trình.

Nguyên lý này rất trừu tượng và khó hiểu, nên các bạn hãy cố gắng tiêu hóa nhé. Đã có rất nhiều tranh cãi đúng sai về nguyên lý này. Chúng ta có thể hình dung ví dụ: Các đối tượng HinhVuong đều có thể xem là các đối tượng HinhChuNhat.

Bởi vì chúng ta đều biết hình vuông là hình chữ nhật có 2 cạnh kề bằng nhau, vì thế hình vuông sẽ kế thừa hết các thuộc tính của hình chữ nhật.

4. Interface Segregation Principle

Nội dung của nguyên lý này là :

Thay vì dùng 1 interface lớn, ta nên tách thành nhiều interface nhỏ, với nhiều mục đích cụ thể

Nguyên lý này khá đơn giản đó là chúng ta không nên có một interface quá lớn vài trăm method, mà chúng ta nên tách chúng ra thành từng loại nhỏ, mỗi loại thể hiện một mục đích cụ thể nào đó.

Ví dụ thay vì viết tất cả các thuộc tính của class DongVat như bên dưới

interface DongVat {
    public function chay();
    
    public function boi();
    
    public function bay();
}

Chúng ta có thể tách ra thành class cha và các interface như sau:

interface DongVatTrenCan {
    public function chay();
}

interface Chim {
    public function bay();
}

interface Ca {
    public function boi();
}

Mỗi loại tách riêng theo từng đặc tính, như vậy sẽ giúp chúng ta dễ dàng quản lý và maintain sau này cũng như dễ dàng đọc hiểu và sửa code.

5. Dependency inversion principle

Nội dung của nguyên lý này là:

  1. Các module cấp cao không nên phụ thuộc vào các module cấp thấp. Cả 2 nên phụ thuộc vào abstraction.
  2. Abstraction không nên phụ thuộc vào detail. Detail nên phụ thuộc vào abstraction. (Các class giao tiếp với nhau thông qua interface, không phải thông qua implementation.)

Trước tiên chúng ta nên hiểu Interface là một chuẩn kết nối giữ class cấp cao hơn và class cấp thấp, để thiết bị A có thể kết nối được với thiết bị B chúng cần giáo tiếp thông qua 1 chuẩn riêng, chỉ cần một thiết bị có chuẩn như vậy là có thể giao tiếp được với thiết bị A. Ví dụ thường thấy đó là chân sạc điện thoại, Iphone và SAMSUNG có một chân cắm riêng và chỉ cần cái sạc nào có rắc cắm phù hợp là có thể cắm vào sạc được.

class Backend {
    public function codeJava() {
        // code here
    }
}

class Frontend {

    public function codeJS() {
        // code
    }

}

class Project {

    public function build() {
        $backend = new Backend();
        $frontend = new Frontend();
        $backend->codeJava();
        $frontend->codeJS();
    }

}

Như chúng ta có thể thấy qua ví dụ trên class Project đang phụ thuộc vào 2 class Backend và Frontend, Nếu sau này công nghệ thay đổi back end không còn là java nữa, hay frontend không còn là js nữa thì chúng ta phải thay đổi cả code của class cấp thấp và cấp cao. Chúng ta sẽ tạo ra một interface Develop để cho các modules trên phụ thuộc vào:

interface Develop {
    public function develop();
}

class Backend implements Develop {
    public function develop()
    {
        $this->codeJava();
    }

    private function codeJava() {
        // code here
    }
}

class Frontend implements Develop {

    public function develop()
    {
        $this->codeJS();
    }

    private function codeJS() {
        // code
    }

}

class Project {

    protected $develop;

    public function __construct(Develop $develop)
    {
        $this->develop = $develop;
    }

    public function build() {
        $this->develop->develop();
    }

}

6. Kết luận

Vậy là mình đã giới thiệu cho các bạn về nguyên lý SOLID, việc vận dùng như thế nào trong quá trình code còn là cả quá trình dài, vì không dễ dàng gì để thay đổi một thói quen đã ăn sâu vào tính cách trong một khoảng thời gian dài. Hy vọng bài viết này sẽ phần nào giúp các bạn có cái nhìn sâu sắc hơn và tự nhìn lại code của chính mình xem đã đủ sạch sẽ chưa. Ngoài có còn có bao nhiêu nguyên lý khác sinh ra với mục đích làm cho code sạch đẹp hơn, các bạn cũng có thể áp dụng để tự nâng cao chất lượng sản phẩm của chính mình tạo ra. Một lần nữa cảm ơn các bạn đã đón đọc, trong quá trình viết bài mình có tham khảo nhiều nguồn, dùng nhiều ví dụ trên mạng, có thể đúng hoặc sai hy vọng các bạn thông cảm (bow).

Đừng bỏ lỡ một số bài viết hay về:

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

TopDev via Viblo

  Cách tạo một Docker đơn giản cho Node.JS

Mẫu bảng mô tả công việc vị trí Technical Leader

Mô tả công việc lập trình Technical Leader mức lương hấp dẫn

Technical leader đảm nhiệm công việc giám sát một nhóm tập trung vào các vấn đề kỹ thuật, bao gồm phát triển phần mềm, phát hành sản phẩm và các nhiệm vụ kỹ thuật khác. Đôi lúc, technical leader cũng hợp tác với các nhân viên để xác định và sửa chữa các vấn đề kỹ thuật. Họ thường đánh giá các quy trình làm việc của nhóm và thực tiễn tốt nhất và thực hiện các thay đổi để hợp lý hóa các hoạt động. Hy vọng, Mẫu bảng mô tả công việc Technical Leader này sẽ giúp các bộ phận nhân sự dễ dàng hơn cho việc tuyển dụng những vị trí này.

Mẫu bảng công việc Technical Leader

YÊU CẦU CÔNG VIỆC

  • Đảm bảo các ứng dụng hiện tại được cập nhật và phù hợp với việc triển khai các ứng dụng mới;
  • Phân tích nhu cầu của end-users và chọn ứng dụng để đáp ứng các nhu cầu đó;
  • Các nhiệm vụ khác có thể bao gồm phát triển các chương trình khắc phục sự cố và giám sát sửa đổi hệ thống;
  • Tạo và thực hiện các quy trình giảm thiểu rủi ro và tiến hành kiểm toán bảo mật để xác định điểm yếu trong các ứng dụng

MÔ TẢ CÔNG VIỆC

  • Có kinh nghiệm trong việc quản lý một nhóm phát triển
  • Có nhiều kinh nghiệm thiết kế cơ sở dữ liệu, thiết kế cơ bản, thiết kế chi tiết, UML
  • Có nhiều kinh nghiệm về ngôn ngữ lập trình: PHP, C#, Ruby on Rails, Java …
  • Có nhiều kinh nghiệm về design patterns and code refactoring…
  • Khả năng nhận yêu cầu trực tiếp từ người quản lý sản phẩm, sau đó phân tích và thảo luận giữa các bên liên quan để làm rõ
  • Có thể đề xuất ý tưởng tốt / giải pháp sáng tạo cải thiện sản phẩm của công ty ngay cả khi không có vấn đề gì cả;
  • Giải quyết vấn đề: đưa ra ý tưởng, thiết kế, coding, code reviewing. “
  Team Leader là gì? Những kỹ năng nào mà một Team Leader cần có?
  "Bắt đầu từ vị trí dev, làm tốt sẽ được trao cơ hội trở thành leader"

Tham khảo thêm những việc làm Technical leader lương cao trên TopDev 

Mẫu bảng mô tả công việc lập trình .NET

Mẫu bảng công việc lập trình .NET

Lập trình .NET làm việc trong nhóm phần mềm, sử dụng các ngôn ngữ lập trình C# để phát triển các ứng dụng, website dựa trên nền tảng .NET. Đồng thời, .NET Developer cũng tham gia vào toàn bộ quá trình phát triển sản phẩm, từ lên concept, phân tích, thiết kế, đến kiểm tra, vận hành vào thực tế dựa trên kế hoạch đã đề ra…Mẫu bảng công việc lập trình .NET này sẽ giúp các bộ phận nhân sự dễ dàng hơn cho việc tuyển dụng những vị trí này.

Về lập trình viên .NET: Để trở thành một .NET Developer thực thụ, bạn cần vững nền tảng C# và .NET căn bản cũng như có kiến thức và kỹ năng về SQL server, HTML, CSS và Javascript. Bạn có thể học thêm về .NET Core và ASP.NET Core vì đây chính là tương lai của .NET. Khi đã vững vàng, bạn có thể bắt đầu chọn cho bản thân con đường đi theo ASP.NET hoặc Winform.

Mẫu bảng công việc lập trình .NET

YÊU CẦU CÔNG VIỆC

  • Thành thạo lập trình .NET Webform, Winform hoặc C#, ASP.NET MVC/ MVC5.
  • Nắm vững lập trình OOP, MVC.
  • Có kiến thức tốt về HTML, CSS, Javascript/ JQuery/ Bootstrap.
  • Có kinh nghiệm sử dụng database (SQL, NoSQL).
  • Có kiến thức tốt về RESTful service/ Web API.
  • Kỹ năng tư duy logic và thuật toán tốt, phân tích và giải quyết vấn đề
  • Có khả năng đọc hiểu tiếng Anh chuyên ngành

Ứng tuyển ngay các vị trí tuyển dụng .NET mới nhất trên TopDev

MÔ TẢ CÔNG VIỆC

  • Lập trình các ứng dụng trên nền tảng .Net 
  • Tối ưu hiệu xuất xử lý của các sản phẩm, dịch vụ hiện có
  • Tham gia xuyên suốt các công đoạn thiết kế, xây dựng, phát triển và tối ưu cho các chức năng hệ thống.
  • Nghiên cứu, phát triển công nghệ mới để ứng dụng xây dựng các sản phẩm dịch vụ mới
  • Hỗ trợ các thành viên trong nhóm với các chức năng phức tạp, tham gia nhận xét, đánh giá source code của các thành viên trong nhóm.

Tham khảo thêm những công việc lập trình cho fresher .NET tại đây

Làm sao để không bị “ngộp” khi học cái mới?

lam-sao-de-khong-bi-ngop-khi-hoc-cai-moi

Trong ngành IT chúng mình, học cũng là một phần của công việc

  • Để làm mới những skill của bản thân, để theo kịp thời đại, không bị thụt lùi so với thế giới, chúng ta phải tự học.
  • Đôi khi vì yêu cầu của dự án, vì nhu cầu tìm việc chúng ta phải học và tìm hiểu những ngôn ngữ/công nghệ mới.

Thế nhưng, khi bắt đầu học một thứ gì đó, bạn sẽ dễ dàng thấy ngộp, thấy bối rối, vì có quá nhiều kiến thức cần phải học.

Vậy làm sao để học dễ vào hơn, làm sao để không còn “ngộp” khi học kiến thức mới?

Hãy xem những kinh nghiệm mình chia sẻ qua bài viết này nha. Bài này sẽ rất có ích cho các bạn sinh viên, cho những bạn vừa ra trường hoặc đang đi làm đấy.

Tại sao việc học cái mới lại khó và gây “ngộp” như vậy?

Để tìm cách giải quyết chuyện, trước tiên chúng ta phải tìm hiểu vì sao học cái mới lại khó, tại sao ta lại dễ thấy ngộp và choáng?

Lý do đơn giản là vì: Trong ngành mình, khi học và sử dụng ngôn ngữ/công nghệ, ta không chỉ học nó, mà còn phải tìm hiểu về toàn bộ hệ sinh thái (ecosystem) của nó, những công nghệ liên quan tới nó.

Những kiến thức này vô cùng rộng và … không có giới hạn.

Mỗi ngôn ngữ/công nghệ luôn đi kèm với một hệ sinh thái “to bự” và phức tạp

Khi thử tìm hiểu React, các bạn sẽ thấy có… vô vàn những thứ liên quan đến nó mà các bạn phải học:

  1. React là gì? Các khái niệm trong React như ComponentPropsState
  2. Các tổ chức code React, phân tách component cho hiệu quả
  3. Cú pháp ES6 của Javascrip
  4. Cách setup Babel để transpile code React thành code JS chạy trên trình duyệt
  5. Cách setup Webpack để bundle source code, build source code thành JavaScript
  6. CSS in JS, cách dùng JS để setup style CSS cho các component
  7. Redux hoặc Mobx dùng kèm với React, state management để quản lý state cho ứng dụng

React – Redux – Webpack – Babel và đủ thứ hầm bà lằng khác

Các bạn thấy đấy, học React chỉ cần học 1 và 2. Nhưng để sử dụng React cho hiệu quả, ta phải học và biết cách dùng 3 đến 7. Khi tìm hiểu 6, 7 các bạn sẽ thấy lòi ra những cái 8,9 khác nữa.

Càng học, bạn càng cảm thấy có quá nhiều thứ mình không biết, có quá nhiều thứ cần phải học. Bạn sẽ ngộp, sẽ thấy nản vì … chả biết học bao giờ mới xong, dẫn đến chuyện bỏ cuộc.

Vậy làm sao để giải quyết chuyện này? Hãy đọc phần dưới nhé!

Phương pháp chống “ngộp” hiệu quả

Ngày xưa, mình cũng từng thấy “ngộp” khi học cái mới như bạn vậy, về sau mới quen dần. Đây là một số kinh nghiệm mà mình rút ra được:

1. Đặt ra mục tiêu rõ ràng

Đây là thứ quan trọng nhất. Trước khi học, hãy đặt ra mục tiêu là, mình học xong sẽ làm được gì, chứ đừng học chỉ để học.

  • Học React/VueJS, hãy đặt ra mục tiêu là hiểu architecture của chúng, làm được một web app đơn giản bằng React/VueJS.
  • Học Android/React-Native hãy đặt mục tiêu là biết cách tạo các screen, viết được một app note/to-do list.

Những khi học thấy mệt hay nản, hãy nhìn vào mục tiêu, bạn sẽ biết mình đã đi được bao xa, sắp đạt được hay chưa ngay.

2. Tìm hiểu bức tranh toàn cảnh (overview), chọn học thứ quan trọng nhất

Quay lại chuyện React, sau khi đã có bức tranh toàn cảnh, các bạn sẽ thấy mối tương quan giữa các công nghệ.

Bạn sẽ nhận ra rằng 1 và 2 là thứ quan trọng nhất cần học, những thứ khác chỉ cần biết sơ, về sau tìm hiểu dần là được.

Thấy được toàn cảnh, bạn sẽ biết thứ gì nên tập trung học, thứ gì chỉ cần tìm hiểu qua. Khi học mà gặp những thứ mới, bạn sẽ biết nó có quan trọng hay không, có cần học ngay hay có thể để sau.

3. Học tập trung, học dần dần chứ đừng dàn trải

Để chống ngộp, bạn hãy học tập trung chứ đừng học dàn trải. Tập trung vào những thứ quan trọng, sau đó mới đến những thứ “râu ria”.

  1. Ví dụ như lúc học React, hãy dùng create-react-app để có thể bắt tay ngay vào việc viết code React.
  2. Sau khi đã nắm vững các khái niệm React cơ bản và nâng cao, bạn mới bắt đầu tìm hiểu cách hoạt động của Babel, của Webpack, cách setup một dự án React từ đầu.
  3. Khi dự án đã lớn, code React bắt đầu rối rắm, lúc này bạn có thể tìm hiểu về Redux/MobX để xem quản lý state ra sao, component giao tiếp thế nào cho hiệu quả.

Học tập trung, tìm hiểu dần dần chứ đừng dàn trải

Vì mỗi lần ta chỉ tập trung vào học và thành thục một thứ duy nhất, bạn sẽ không cảm thấy ngộp hay nản nữa.

Kết

Việc học luôn luôn là một hành trình dài. Hành trình ngàn dặm chỉ bắt đầu từ một bước chân. Hãy biết nhìn xa, nhưng hãy đi từng bước nhỏ.

Với việc học, ta cũng phải học dần dần, biết dần dần. Bạn không thể nào học một phát là biết hết, mà cũng không cần phải biết hết tất cả. Chỉ cần biết đủ là bạn đã có thể áp dụng thứ vừa học vào công việc được.

Việc học có thể làm việc cảm thấy ngộp và nản, but that’s okay.

Đừng so sánh việc học của mình với người khác. Nếu người có nhiều kinh nghiệm, có kiến thức liên quan, họ sẽ học nhanh hơn. Nếu bạn không đủ kiến thức nền, bạn sẽ học chậm hơn.

Tuy nhiên, việc học không phải là cuộc đua đi nhanh hay đi chạm thì cuối cùng cũng đến đích cả! Quan trọng là bạn có chịu khó đi tới cuối cùng hay không mà thôi!

Bản thân bạn thì sao, đã bao giờ bạn cảm thấy ngộp, cảm thấy nản khi học chưa? Hãy chia sẻ về cảm xúc của mình, những cách bạn vượt qua trong phần comment nhé!

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

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

Cách sử dụng các plugins jQuery trong VueJS

Cách sử dụng các plugins jQuery trong VueJS

Người viết: Max

Hế lô! Sau 1 thời gian tu luyện trên núi mình đã quyết định xuống núi để quay lại chiến đấu cùng các anh em. Hôm nay mình xin giới thiệu đến các bạn 1 thứ hoàn toàn mới và khá hay ho mang tên “Viu gi ét” :))

Nếu bạn là một dev front-end chân chính thì chắc hẳn ít nhất một lần đã nghe và có thể là đang làm với framework này rồi nhỉ.

Mình cũng vậy, sau khi bị nó thả thính và bắt đầu mê nó nên mình đã quyết định áp dụng dùng thử nó với 1 plugin của WordPress.

Trước đây mình cũng đã từng dev AngularJS, rồi Angular 2+ và cũng suýt tẩu hỏa nhập ma với nó. Vì vậy mình đã xách mông lên tìm một môn võ mới mang tên VueJS. Sau 1 thời gian dev với VueJS thì mình đã phải thốt lên “Sao mày không đến với cuộc đời tao sớm hơn :))” bởi vì nó quá tuyệt vời và phù hợp với những nhu cầu của mình.

Và để bắt đầu với seri lầy lội cùng VueJS mình xin giới thiệu 1 trick khá hay mà VueJS có thể làm được đó là:

Cách sử dụng các plugins của Jquery trong ứng dụng VueJS một cách mượt mà.

Source code:

Các bạn có thể xem qua source code và demo tại đây.

Vấn đề

Hẳn là khi các bạn làm với các project áp dụng mấy framework kiểu như VueJS này thì một số thư viện cũng chưa hỗ trợ mà vẫn phải dùng thêm các plugins của jQuery đúng không nào?

Bình thường thì nếu bạn làm với ứng dụng Web kiểu Server-Side Rendering thì phần html đã được render ra khi người dùng load trang và chỉ cần áp dụng vài dòng code Javascript với Jquery là chạy ngay. Nhưng với các framework như VueJS thì cấu trúc DOM không được load ngay từ đầu nên ta không thể chạy các plugin của jQuery theo cách thông thường.

Ở đây mình xin demo 1 trường hợp sử dụng plugin select2 của Jquery để chạy trong ứng dụng VueJS.

Giải pháp

Ta sẽ tạo ra 1 component và wrap nó lại.

<script type="text/x-template" id="template-select2">
    <select class="vue-select2">
        <option v-for="option in options"
        :value="option.key"
        :selected="option.key=== selected">{{option.value}}</option>
    </select>
</script>
<script>
Vue.component('vue-select2', {
        template: '#template-select2',
        props: ['options', 'selected']
});
</script>

Component này sẽ có 2 props là options là list options để select và selected nếu muốn set 1 option nào đã được select.

Để làm được ta cần phải tìm hiểu 1 chút về life cycle của VueJS nhé.

Như các bạn thấy trong ảnh thì đến đoạn mounted là thời điểm mà Vue render html và replace vào cấu trúc DOM và đây chính là cơ hội để mình có thể chạy plugin select2. Và thời điểm thứ 2 ta cần quan tâm là lúc component chuẩn bị xóa đi khỏi DOM đó là beforeDestroy – đây là thời điểm tốt để các bạn xóa tất cả các sự kiện trên component đó đồng thời hủy select2 chạy trên component đó.

Vue.component('vue-select2', {
        template: '#template-select2',
        props: ['options', 'selected'],
        model: {
            prop: 'selected',
            event: 'change'
        },
        mounted: function() {           
            $(this.$el).select2();
        },
        beforeDestroy: function() {
            $(this.$el).off().select2('destroy');
        }
    });

Xong rồi đó, component đã có thể chạy được ngay. Nhưng vẫn còn một vấn đề nữa đó là bạn cần phải cập nhật sự thay đổi lên parent component chứ nhỉ. Để làm được điều đó ta bắt sự kiện change của select đó rồi dùng $emit để đẩy sự kiện cho thằng cha.

mounted: function() {
       	var vm = this;
          
		$(this.$el).select2();
           $(this.$el).on('change', function(e) {
           	vm.$emit('change', vm.$el.value);
           });
       },

Sau đó ở thằng cha bắt sự kiện @change để cập nhật trạng thái option đã được select (trong demo mình dùng tính kiểu two-way binding để chuyền ngược lại cho thằng cha luôn).

Xong rồi đó, ở demo trên kia thì mình có thêm 1 số tính năng nữa để demo khi thằng cha thêm option hoặc thay đổi option đang được select thì thằng con cũng cập nhật được trạng thái của nó.

Kết luận

Mình xin tổng kết lại nhé. Ở đây chỉ có 2 bước quan trọng là:

  1. Chọn thời điểm component được thêm vào DOM để chạy plugin của Jquery và thời điểm để hủy các sự kiện khi component đó bị hủy đi.
  2. Tìm sự kiện thay đổi trạng thái của component con để cập nhật lên compnent cha để biết sự thay đổi.

Quá đơn giản phải không nào. Mình cũng bắt đầu thích VueJS vì sự tương thích của nó với các plugin của jQuery vì jQuery nó đã quá to rồi và hệ sinh thái của nó quá lớn nên thời gian này mình vẫn còn phụ thuộc vào nó rất nhiều trong khi các thư viện hỗ trợ cho VueJS còn chưa nhiều.

TopDev via BlogK

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

Xem thêm tuyển dụng lập trình VueJS trên TopDev

Khi nào nên dùng Golang? Nó dùng tốt trong trường hợp nào?

khi-nao-nen-dung-golang

Bạn có biết khi nào nên dùng Golang? Dùng Golang đúng cách như thế nào? Sau 8 năm hoạt động, ngôn ngữ Go của Google ra mắt phiên bản 1.8.1 vào tháng 4 năm 2017 được lựa chọn bởi các chuyên gia lập trình để trở thành ngôn ngữ lập trình dành cho những dự án cloud-centric quan trọng nhất thế giới.

Tại sao Go được chọn bởi các nhà phát triển của những dự án như Docker và Kubernetes? Đặc điểm của Go là gì? nó khác gì với các ngôn ngữ lập trình khác và phù hợp cho loại dự án nào nhất? Trong bài này, chúng ta sẽ khám phá những tính neăng của Go, trường hợp tối ưu, điểm thiếu sót và hạn chế của Golang.

Go nhỏ gọn và đơn giản

Go hay Golang là sản phẩm được phát triển bởi các nhân viên của Google, đặc biệt là kỹ sư nổi tiếng của Google, một chuyên gia về Unix, ông Rob Pike, tuy nhưng đó không phải là một dự án của Google. Thay vào đó, Go được phát triển như một dự án open source.

Go đơn giản để học, dễ làm việc và dễ dàng đọc bởi các nhà phát triển khác. Và Go không hề có một bộ tính năng lớn, đặc biệt là khi so sánh với các ngôn ngữ như C ++. Ngoài ra Go còn gợi nhớ đến C bởi cú pháp của nó, điều đó giúp các lập trình viên C lâu năm tương đối dễ dàng học nó. Điều đó nói rằng, nhiều tính năng của Go, đặc biệt là tính năng concurrency.

khi nào nên dùng golang

Tương tự như ngôn ngữ C được dùng để xây dựng và duy trì các ứng dụng cross-platform, thì Go cũng có nhiều điểm chung với Java. Và khi nào nên dùng golang? Nó như một phương tiện cho phép lập trình một cách nhanh chóng mà có thể chạy ở bất cứ nơi nào, thì bạn có thể tưởng tượng Go và Python giống nhau ở điểm này, mặc dù giữa chúng có nhiều điểm khác biệt hơn là tương đồng.

  #2 Lập trình Golang ăn xổi: Clean architecture

Dành cho tất cả mọi người

Tài liệu về Go, mô tả Go là “một ngôn ngữ biên dịch nhanh, static type, compiled language (ngôn ngữ biên dịch), nhưng lại giống như một dynamic, interpreted language (ngôn ngữ thông dịch)”. Ngay cả khi một chương trình Go lớn, cũng sẽ được biên dịch chỉ trong vòng vài giây. Thêm vào đó, Go còn tránh được những điểm hạn chế của C liên quan đến các file và thư viện. Nói tóm lại, Go giúp cuộc sống của lập trình viên trở nên dễ dàng bằng nhiều cách:

Tiện lợi:

Go được so sánh với các scripting language (ngôn ngữ kịch bản) như Python với khả năng đáp ứng nhiều nhu cầu lập trình phổ biến. Một số tính năng này được tích hợp vào trong chính ngôn ngữ, chẳng hạn như “goroutines” là một hàm cho concurrency và kiểu giống như behavior, ngoài ra các tính năng bổ sung được có sẵn trong các package thư viện Go chuẩn, như http package của Go. Giống như Python, Go cung cấp khả năng quản lý bộ nhớ tự động bao gồm việc garbage collection (dọn file rác).

Không giống các ngôn ngữ kịch bản như Python, Go biên dịch (compile) code ra nhị phân một cách nhanh chóng. Và không giống như C hoặc C ++, Go biên dịch cực nhanh, nhanh đến mức khiến bạn cảm thấy khi làm việc với Go giống như là làm việc với một ngôn ngữ kịch bản hơn là một ngôn ngữ biên dịch.

Hơn nữa, hệ thống Go build đơn giản hơn so với các ngôn ngữ biên soạn khác. Phải trải qua một vài bước và lập kế hoạch để xây dựng và vận hành một dự án Go.

Tốc độ:

Run nhị phân chậm hơn so với C, nhưng sự khác biệt về tốc độ này không đáng kể đối với hầu hết các ứng dụng. Hiệu suất của Go tốt ngang với C trong phần lớn công việc và nói chung là nhanh hơn so với các ngôn ngữ khác nổi tiếng về tốc độ (ví dụ: JavaScript, Python và Ruby).

khi nào nên dùng golang

Linh hoạt:

Các file executable được tạo bằng toolchain của Go có thể hoạt động độc lập mà không cần external dependencies mặc định. Toolchain hỗ trợ cho nhiều hệ điều hành, hardware platform (chuẩn phần cứng của máy tính) khác nhau và có thể được sử dụng để biên dịch các chương trình nhị phân qua các nền tảng.

Khả năng tương thích:

Go cung cấp tất cả những điều trên mà không bị mất quyền truy cập vào hệ thống bên dưới (underlying system). Phương mềm Go có thể liên kết với thư viện C bên ngoài hoặc thực hiện các lệnh call hệ thống native. Ví dụ trong Docker, Go interface với các chức năng Linux low-level, cgroups và namespace (tạm dịch: không gian tên), để hoạt động với container.

Hỗ trợ:

Toolchain Go có sẵn dưới dạng binary của Linux, MacOS hoặc Windows hoặc như là một container trong Docker. Go được đặt mặc định trong nhiều bản phát hành phổ biến của Linux, như Red Hat Enterprise Linux và Fedora, giúp cho việc triển khai Go source trở nên dễ dàng hơn đối với các nền tảng trên. Go cũng hỗ trợ mạnh mẽ cho nhiều development environment (môi trường phát triển) của bên thứ ba, từ Microsoft Visual Studio Code đến Komodo IDE của ActiveState.

Khi nào nên dùng Golang?

khi nào nên dùng golang? Và dùng trong trường hợp nào? Không có ngôn ngữ nào phù hợp với mọi loại công việc, nhưng có một số ngôn ngữ phù hợp với nhiều mục đích hơn những ngôn ngữ khác. Mạnh mẽ khi phát triển một số loại ứng dụng chính:

Phân phối các network service (dịch vụ mạng).

Các chương trình ứng dụng mạng (network application) sống hay chết là dựa vào concurrency và các tính năng native concurrency của Go, các goroutines và các channel, rất phù hợp cho các tác vụ đó. Do đó, có nhiều dự án Go dành cho mạng, các chức năng distributed (phân phối) và dịch vụ đám mây: API, web server, minimal frameworks cho các web application và các loại tương tự.

Sự phát triển của cloud-native.

Các tính năng concurrency và network của Go và tính linh hoạt cao của nó làm cho nó phù hợp với việc xây dựng các ứng dụng cloud-native. Trên thực tế, Go đã được sử dụng để xây dựng một trong những nền tảng phát triển ứng dụng dựa trên cloud-native, ứng dụng hệ thống containerization Docker.

Thay thế cho cơ sở hạ tầng hiện có.

Phần lớn các phần mềm của chúng tôi phụ thuộc vào cơ sở hạ tầng Internet đã lạc hậu. Việc viết lại những thứ như vậy bằng Go mang lại nhiều lợi ích, như giữ an toàn bộ nhớ tốt hơn, triển khai trên nhiều nền tảng dễ dàng hơn và một code base “sạch” để hỗ trợ bảo trì trong tương lai. Một server SSH mới được gọi là Teleport và một phiên bản mới của Network Time Protocol được viết bằng Go, được cung cấp như phương pháp thay thế cho các đối tác thông thường của họ.

khi nào nên dùng golang

Go không phù hợp với việc gì?

Go được thiết kế nhỏ gọn và dễ hiểu, vì vậy dẫn đến một số tính năng nhất định bị bỏ qua. Thế nên một số tính năng phổ biến có trong các ngôn ngữ khác thì lại không có trong Go.

Một trong những tính năng Go không có là generics, là kiểu biểu diễn của Types dưới dạng tham số khi định nghĩa lớp, hàm và interfaces. Go không bao gồm generics và steward của ngôn ngữ này ngăn cản việc thêm generics vào vì cho rằng điều đó sẽ làm giảm tính đơn giản. Tuy vẫn có thể làm việc tốt với Go, nhưng rất nhiều lập trình viên vẫn muốn thêm generics vào nó.

Nhược điểm khác của Go là kích thước của các chương trình. Code được biên dịch kiểu static (tĩnh) theo mặc định. Cách này làm đơn giản hóa quá trình xây dựng và triển khai, nhưng dẫn đến việc chỉ một đoạn code đơn giản “Hello, world!” lại nặng đến khoảng 1,5MB trên Windows 64-bit. Nhóm nghiên cứu của Go đang cố gắng để giảm kích thước của những chương trình này trong những bản phát hành kế tiếp. Có những giải pháp cho việc này là nén file hoặc xoá bỏ thông tin về debug của Go.

Tuy nhiên, một tính năng khác của Go, quản lý bộ nhớ tự động (AMM), có thể được xem như là một nhược điểm, vì garbage collection (quá trình thu gom file rác) đòi hỏi một số memory nhất định để xử lý. Theo thiết kế, Go không thể quản lý bộ nhớ bằng tay và việc dọn dẹp file rác ở Go bị chỉ trích là không thể giải quyết tốt các loại memory load (bộ nhớ tải) xuất hiện trong các ứng dụng của doanh nghiệp.

Xét về mặt tích cực, Go 1.8 mang lại nhiều cải tiến trong quản lý bộ nhớ và dọn dẹp file rác để giảm độ trệ (lag). Tất nhiên, các nhà phát triển Go có thể sử dụng phân bố (allocation) bộ nhớ bằng tay trong một extension của C hoặc bằng cách sử dụng thư viện quản lý bộ nhớ thủ công của bên thứ ba.

Tình hình xung quanh việc xây dựng một GUI (giao diện đồ họa người dùng) phong phú cho các ứng dụng của Go, chẳng hạn như trong các ứng dụng dành cho desktop, vẫn còn rải rác.

Hầu hết các sản phẩm từ Go là các command-line tool hoặc các dịch vụ network. Mặc dù vậy, vẫn có rất nhiều dự án đang được thực hiện để mang lại một GUI phong phú cho các ứng dụng của Go. Có các framework như GTKGTK3. Một dự án khác nhằm cung cấp platform-native UI, mặc dù các giao diện này dựa vào các binding của C và không được viết bằng Go. Ngoài ra, bởi vì Go được thiết kế là nền tảng độc lập, nên không có bất kỳ cái gì được nêu ở trên có thể trở thành một phần của package chuẩn.

Mặc dù Go có thể tương tác với các chức năng của native system nhưng nó không được thiết kế để tạo ra các component của low-level system, chẳng hạn như kernel (hạt nhân) hoặc device driver hoặc các embedded system (hệ thống nhúng).

Sau cùng, tốc độ run ứng dụng và trình dọn dẹp file rác cho các ứng dụng Go phụ thuộc vào hệ điều hành nằm bên dưới. (Các lập trình viên quan tâm đến một ngôn ngữ dành cho loại công việc này có thể tìm hiểu Rust của Mozilla.)

  Golang là gì? Top 07 Framework tối ưu “cực căng” cho Golang

Đâu là con đường của Go?

Go có thể đang ở một “ngã ba đường”. Giai đoạn phát triển tiếp theo của Go có thể được thúc đẩy bởi nhu cầu phát triển cơ bản của nó, Go cần chú ý về việc thay đổi ngôn ngữ để có thể đáp ứng tốt hơn, chứ phải cứ cứng đầu mà không thay đổi. Nói cách khác, Go hoàn toàn có thể thêm các tính năng mà ban đầu nó không có, giống như generics.

Các lập trình viên sử dụng Golang rõ ràng muốn những điều này. Một cuộc khảo sát ý kiến người dùng Golang vào năm 2016 đã xác định được khi nào nên dùng golang, và generic là một trong những thay đổi mang tính cải thiện nhất, tiếp theo là dependency và package management. Những thay đổi này có thể giúp Go đạt một vị trí cao trong giới lập trình nơi mà Java, JavaScript và Python hiện đang thống trị .

Ngay cả khi không có bất kỳ sự thay đổi lớn nào đối với Go, thì tôi luôn mong được thấy Go sử dụng cho việc xây dựng lại cơ sở hạ tầng và trở thành một phần của dự án sử dụng multi-language (đa ngôn ngữ). Một dự án có sử dụng Go trong một phần của việc lập trình hệ thống đó là Ethos, một hệ điều hành như một phần mềm bảo mật chất lượng cao. Kernel được viết bằng C, nhưng userspace của ứng dụng được viết bằng Go, đây là một cách thông minh để tận dụng những gì phù hợp với C, trong khi vẫn có thể tận dụng các thế mạnh của Go.

Việc triển khai của bên thứ ba đối với công cụ Go cũng đang lan rộng. ActiveGo của ActiveState cung cấp một phiên bản được hỗ trợ về mặt thương mại của Golang và cả LLVM cùng các dự án gccgo được triển khai open source của Go bằng toolchain.

Một cách khác mà Go có thể phát triển là tồn tại như một nền tảng để phát triển các ngôn ngữ hoàn toàn mới khác. Một ví dụ là ngôn ngữ Have. Sử dụng nhiều ý tưởng từ Go và transpile vào Go để dễ thực hiện, nhưng tinh gọn cú pháp của Go và hiện thực hoá một số các concept tương tự những theo cách riêng. Một dự án khác có tên Oden, tiếc là không còn được phát triển, sử dụng assembler và toolchain của Go để biên dịch một ngôn ngữ mới được thiết kế dựa trên cảm hứng từ các ngôn ngữ khác như Lisp và Haskell.

Tương lai của Golang chỉ mới bắt đầu giờ bạn đã biết khi nào nên dùng golang. Nhưng chắc chắn nó sẽ được sử dụng trong cloud, nơi mà tốc độ và sự đơn giản của nó giúp dễ dàng xây dựng một cơ sở hạ tầng có thể mở rộng, có thể được duy trì trong thời gian dài.

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

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

TopDev via Infoworld

Mẫu bảng mô tả công việc lập trình Devops

Mô tả công việc Devops

Mô tả công việc Devops – DevOps Engineers là sự kết hợp giữa Developers (Dev) và System Admins (“Op”-erations) với mục đích giảm chi phía và vòng lập của dự án, là cầu nối giữa Developers và nhóm IT khác.

DevOps Engineers hiểu cặn kẽ vê vòng đời phát triển phần mềm và các công cụ tự động hóa được sử dụng để tạo CI / CD Pipeline (tích hợp liên tục / phân phối liên tục), giúp giảm thiểu lỗi, tạo điều kiện triển khai nhanh chóng các sản phẩm với chất lượng tốt hơn và đồng thời cải thiện khả năng duy trì cơ sở hạ tầng.

Hy vọng, Mẫu bảng mô tả công việc lập trình Devops này sẽ giúp các bộ phận nhân sự dễ dàng hơn cho việc tuyển dụng những vị trí này.

Tuyển dụng Devops lương cao trên TopDev

Mẫu bảng công việc Devops

YÊU CẦU CÔNG VIỆC

  • Có kinh nghiệm làm việc như một DevOps Engineer hoặc các vị trí tương tự
  • Có kinh nghiệm về Network, server và giám sát trạng thái ứng dụng
  • Kiến thức tốt về ngôn ngữ lập trình
  • Kinh nghiệm làm việc với cơ sở dữ liệu và SQL
  • Kĩ năng giải quyết vấn đề
  • Có thể làm việc độc lập và là một phần của nhóm.

MÔ TẢ CÔNG VIỆC

  • Có kinh nghiệm với các điện toán đám mây (AWS, Azure, GCP) để triển khai các bản nâng cấp và sửa lỗi.
  • Thực hiện các công cụ và khung tự động hóa (CI/CD pipelines).
  • Thiết kế, phát triển và triển khai tích hợp phần mềm dựa trên phản hồi của người dùng.
  • Khắc phục sự cố sản xuất và phối hợp với nhóm phát triển để hợp lý hóa việc triển khai mã.
  • Phân tích Code và truyền đạt các đánh giá chi tiết cho team developer để đảm bảo sự cải thiện trong các ứng dụng và hoàn thành kịp thời các dự án.
  • Phối hợp với các thành viên trong nhóm để cải thiện công cụ, hệ thống và quy trình kỹ thuật và bảo mật dữ liệu.
  • Tối ưu hóa kiến trúc điện toán.
  • Phát triển và duy trì tài liệu thiết kế và xử lý sự cố.

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

  8 Bước Trong Lộ Trình Trở Thành DevOps Engineer
   Top 10 khóa huấn luyện kỹ sư DevOps cho dân Dev
  Top 5 câu hỏi phỏng vấn Devops Engineer thường gặp và cách trả lời

Tham khảo thêm những việc làm lập trình hot nhất thị trường tại đây

Mẫu bảng mô tả công việc lập trình iOS

Mô tả công việc lập trình iOS mức lương hấp dẫn

iOS Developer chịu trách nhiệm xây dựng và phát triển các ứng dụng cho thiết bị di động được cung cấp bởi hệ điều hành Apple Apple iOS. Một iOS Developer giỏi phải thành thạo một trong hai ngôn ngữ lập trình cho nền tảng này: Objective-C hoặc Swift. Hy vọng, Mẫu bảng mô tả công việc lập trình iOS này sẽ giúp các bộ phận nhân sự dễ dàng hơn cho việc tuyển dụng những vị trí này.

Mẫu bảng công việc lập trình iOS

YÊU CẦU CÔNG VIỆC

  • Có kinh nghiệm làm việc với Ruby on Rails
  • Có kiến thức về ngôn ngữ và công nghệ của Front-End (JavaScript, HTML, CSS và JQuery)
  • Thành thạo với Objective-C hoặc Swift
  • Kinh nghiệm làm việc với các thư viện và API của bên thứ ba
  • Làm quen với các nguyên tắc thiết kế OOP
  • Hiểu biết về các nguyên tắc thiết kế và hướng dẫn giao diện của Apple
  • Hiểu biết thành thạo các công cụ phiên bản mã như Git, SVN,…
  • Kỹ năng phân tích tuyệt vời và thái độ giải quyết vấn đề tốt
  • Khả năng thực hiện trong môi trường nhóm

Tuyển dụng ios lương cao up to 3000USD

MÔ TẢ CÔNG VIỆC

  • Thiết kế và xây dựng các ứng dụng cho nền tảng iOS
  • Hỗ trợ toàn bộ vòng đời ứng dụng (khái niệm, thiết kế, thử nghiệm, phát hành và hỗ trợ)
  • Đảm bảo hiệu suất, chất lượng và khả năng đáp ứng của các ứng dụng
  • Phối hợp với một nhóm để xác định, thiết kế và cung cấp các tính năng mới
  • Giúp duy trì chất lượng mã, tổ chức và tự động hóa
  • Phát triển giao diện lập trình ứng dụng (API) để hỗ trợ chức năng di động
  • Cập nhật các thuật ngữ, khái niệm và thực tiễn tốt nhất để mã hóa ứng dụng di động
  • Khắc phục sự cố và gỡ lỗi để tối ưu hóa hiệu suất
  • Thiết kế giao diện để cải thiện trải nghiệm người dùng
  • Nghiên cứu và đề xuất các sản phẩm, ứng dụng và giao thức di động mới
  • Luôn cập nhật các xu hướng công nghệ mới

Tham khảo thêm những công việc lập trình hot nhất thị trường tại đây

Webpack là gì? Hướng dẫn webpack 4: tất cả những gì bạn cần biết từ 0 đến khi ra sản phẩm

Webpack là gì? Hướng dẫn webpack 4: tất cả những gì bạn cần biết từ 0 đến khi ra sản phẩm

Webpack là gì?

Webpack là công cụ giúp gói gọn toàn bộ file js, css(bao gồm cả scss,sass,..). Nó giúp bạn compile các module Javascript theo cấu trúc project. Ngoài ra nó có thể tối ưu tùy chọn theo môi trường khác nhau như development hay production.

Ngày nay các website đang có xu hướng trở thành những web app với các đặc tính như:

  • Càng ngày càng sử dụng JS nhiều hơn
  • Những browser ngày càng hỗ trợ những công nghệ mới
  • Những trang full-page-reload ít đi, single page app lên ngôi

Dẫn đến phần code client-side ngày càng nhiều. Điều đó có nghĩa chúng ta cần phải có một công cụ để quản lí chúng một cách hiệu quả. Và webpack là một công cụ rất mạnh để làm điều đó. Nó là một module bundler rất mới nhưng đã gây sốt gần đây. Nó nhận vào các module cùng với các dependencies và generate ra các static assets tương ứng. Các bạn xem thêm Webpack cho người mới bắt đầu tại đây nhé!

Team webpack đang làm việc tích cực để cho ra thế hệ thứ 4. Mình xin giới thiệu sơ qua các chức năng mới của bản này.

Webpack 4 gần như không cần cấu hình module bundler

Webpack rất mạnh mẽ và có không ít các feature khá độc nhưng bên cạnh đó cũng có không ít các điểm khá hạn chế, một trong số đó là configuration file.

Cung cấp 1 cấu hình cho webpack không phải là một vấn đề lớn trong các dự án vừa và lớn. Tuy nhiên đối với các dự án nhỏ thì nó tỏ ra hơi khó nhằng. Sean và team webpack đang thay đổi điều đó cho thân thiện hơn: webpack 4 sẽ không cần 1 file cấu hình mặc định.

Nào chúng ta thử nó 1 chút, tạo 1 thư mục mới và đi vào trong:

mkdir webpack-4-quickstart && cd $_

Khởi tạo 1 package.json bằng cách chạy lệnh:

npm init -y

Bây giờ kéo về webpack 4. Hiện tại webpack 4 đang trong quá trình beta, điều đó có nghĩa chúng ta nên lấy về từ nhánh Next:

npm i webpack@next --save-dev

Ta cần cài thêm webpack-cli nữa:

npm i webpack-cli --save-dev

Bây giờ mở package.json và thêm khai báo sau:

"scripts": {
    "build": "webpack"
  }

Lưu file và chạy:

npm run build

Và xem điều gì xảy ra:

ERROR in Entry module not found: Error: Can't resolve './src' in '~/webpack-4-quickstart'

webpack 4 đang muốn tìm kiếm entry point trong ./src, nói chung đó là điểm bắt đầu để bạn xây dựng gói javascipt bundle của bạn. Đọc thêm tại đây để hiểu rõ hơn nhé: webpack. Trong phiên bản trước của webpack, entry point được define bên trong file cấu hình với tên là webpack.config.js.

Nhưng bây giờ với webpac 4 thì chúng ta không cần define cái entry point này nữa. Nó sẽ được đặt mặc định trong ./src/index.js . Thử test cái feature mới này thấy thật dễ dàng, tạo ./src/index.js :

console.log('Tui là webpack 4);

và build lại xem:

npm run build

Bạn sẽ lấy được bundle trong ~/webpack-4-quickstart/dist/main.js. Khoan đã? chờ 1 chút, nó đâu cần define ở file output đâu nhỉ??!!

Trong webpack 4 không cần phải define entry point, cũng không cần trong out put file.

Tôi biết rằng đối với rất nhiều người thì điều này không quá thú vị. Sức mạnh chính của webpack là split code. Nhưng tin tui đi, file cấu hình lằng nhằng lắm, nhất là anh em mới tiếp xúc hay cần làm nhanh cái gì đó. Sau khi set up xong thì webpack 4 nó xem ./src/index.js như là entry point mặc định.

Trong phần tiếp theo chúng ta sẽ tìm hiểu thêm một số feature khá ngon: production và development mode.

Webpack 4: production và development mode

Có 2 file cấu hình phổ biến trong webpack:

  • 1 file cấu hình cho development, để mình define webpack dev server và những thứ khác.
  • 1 cho production, để define UglifyJSPlugin, sourcemaps…

Khi mà gặp những project lớn thì có thể cần phải có cả 2 file này, trong webpack 4 bạn có thể sử dụng 2 trạng thái của nó mà không phải làm bất kỳ một dùng cấu hình nào.

Bằng cách nào?

Thì nó giới thiệu chức năng này có sẵn mà dùng thôi :v. Trên thực tế khi bạn chạy dòng lệnh npm run build thì bạn sẽ thấy 1 thông báo:

Webpack là gì? Hướng dẫn webpack 4: tất cả những gì bạn cần biết từ 0 đến khi ra sản phẩm

The 'mode' option has not been set. Set 'mode' option to 'development' or 'production' to enable defaults for this environment.

Thông báo này có nghĩa là gì? Mở file package.json và update thêm script sau:

"scripts": {
    "dev": "webpack --mode development",
    "build": "webpack --mode production"
  }

Bây giờ thử chạy:

npm run dev

rồi nhìn code file ./dist/main.js, nó chưa được minified là ok. Tiếp tục chạy thử :

npm run build

và ta thấy minified bundle trong ./dist/main.js

Production mode enable tất cả các tối ưu trong webpack. Bao gồm minified code, scope hoisting, tree-shaking và nhiều nữa.

Developement mode chủ yếu tối ưu hóa tốc độ và không minified code để bạn dễ dàng làm việc.

Resources

Github repo tại đây : webpack-4-quickstart

TopDev via Valentinog

  Sử dụng Laravel Mix với Webpack cho tất cả các assets



  Xây dựng ứng dụng chat realtime bằng Laravel + Vuejs + Socket + Redis

 

Thời Đại Của Data: Trí Tuệ Nhân Tạo Vận Hành Thế Giới

Trong những năm sắp tới, Việt Nam sẽ chứng kiến sự xuất hiện của những kỳ lân mới. Vừa qua, chính phủ đã ban hành nhiều chính sách với ưu đãi cho các doanh nghiệp khởi nghiệp lĩnh vực khoa học công nghệ, gửi gắm vào trong đó sự kỳ vọng “tăng tốc” và bứt phá của cộng đồng startup đặc biệt là ở những lĩnh vực liên quan đến AIMachine Learning

Theo các chuyên gia cho biết, đến năm 2021, trí tuệ nhân tạo sẽ khai sinh ra một 2100 tỷ USD giá trị cho các doanh nghiệp, góp phần tiết kiệm 6.2 tỷ USD giờ làm việc trên toàn cầu. Cuộc chơi AI không chỉ còn là cuộc chơi của những ông lớn, các doanh nghiệp startup cũng đang dần khẳng định mình bằng những sản phẩm không hề thua kém.

Đón đầu thị trường bằng những công nghệ mới, chính là chiếc chìa khóa thành công cho bất kỳ doanh nghiệp nào “Điểm đến tiếp theo của công nghệ là đâu?”. Hãy lắng nghe câu trả lời và tranh luận từ các CEO của các công ty công nghệ, những anh tài startup, full stack developer, devops, software engineer, users and commercial ventures – Dù là lập trình viên hay marketer, sự kiện năm nay chắc chắn sẽ đem lại cho bạn vô số kiến thức, mở ra cánh cửa của đổi mới sáng tạo.

Vietnam Web Summit xoay quanh những trục chính đang là tâm điểm của công nghệ thế giới:

  • Digital Transformation: Survive and Thrive – Cách mạng số và những bước ngoặt lịch sử.
  • Beyond Digital Marketing: Humanize Customer Experiences – “Người hóa” trải nghiệm khách hàng thời đại số.
  • AI-Powered Future: Data drive product – Trí tuệ nhân tạo vận hành thế giới.
  • Operations in a ‘Serverless’ World – Vận hành doanh nghiệp trong thời đại serverless
  • Cloud-based & Intelligence-driven Cybersecurity  – An ninh mạng và những giải pháp của thời đại mới.
  • The new era of web development – Kỷ nguyên mới của công nghệ phát triển web.

Vietnam Web Summit là chuỗi sự kiện thường niên dành cho cộng đồng phát triển web, quảng cáo web. Được đánh giá là một trong những sự kiện web lớn nhất tại Việt Nam, với sự tham gia của các ông lớn như Amazon, Google, Facebook, Nielsen…, Vietnam Web Summit 2019 hứa hẹn là đại tiệc công nghệ được mong chờ nhất trong giai đoạn cuối năm!

Bên cạnh đó, Vietnam Web Summit sẽ tiếp tục hỗ trợ triển lãm với sự trình diễn của các doanh nghiệp và startup. Đây cũng là nơi demo rất nhiều sản phẩm, công nghệ của các doanh nghiệp. Tuyển dụng cũng là một trong những hoạt động mang lại giá trị hữu ích cho cả doanh nghiệp và người tham dự.. Đây là cơ hội lớn để các doanh nghiệp, developer cập nhật những công nghệ mới nhất, trao đổi trực tiếp cùng các chuyên gia đầu ngành.

Thay vì nóng lòng chờ đợi một mùa Vietnam Web Summit nữa thì hãy giữ ngay cho mình một slot tham dự cùng bạn bè nào, cùng nhau cập nhật những kiến thức mới năm 2019 bạn nhé!

THÔNG TIN LIÊN HỆ

Sponsor & Booth: Ms. Như Trương | 033 8847 836
Event team: event@applancer.net | 028 6681 3236
Ms. Thoa | thoa.nguyen@applancer.net | 038 5098 969

Assemly là gì?  Lập trình viên có nên học ngôn ngữ Assembly không?

lap-trinh-vien-co-nen-hoc-assembly-khong

Assembly Language (ASM), tiếng Việt là hợp ngữ. Mục đích của mình học ASM chỉ cơ bản là muốn hiểu thêm về người bạn thân thiết nhất của mình, cái máy tính mà suốt ngày mình ngồi trước nó. Mình chỉ thật sự muốn biết là đằng sau những dòng lệnh mình code thường ngày thì bên dưới nó làm cái gì?!

Thật tiếc là sau khi đã tìm hiểu được một số khái niệm về kiến trúc CPU, các loại Registers (thanh ghi), Data Segments, Data Moving thì mình buộc phải bỏ cuộc ở Control Flow.

Lý do đầu tiên là … do mình dở. Mình thấy nó thật sự quá khó với mình, vốn là lập trình viên ứng dụng với ngôn ngữ bậc cao (high level language) và chưa biết gì về Computer Scientic. Thứ hai là cách tiếp cận bottom-up (từ lý thuyết lên) này cũng không tốt. Mình nghĩ là trong tương lai nếu có dự án nào cần tới ASM thì mình sẽ có thể vừa học và practice tốt hơn (hướng tiếp cận top-down hay còn gọi là end to end). Cùng tìm hiểu xem Assembly là gì và chúng ta có nên học Assembly không trong bài viết này nhé!

  Chúng ta có nên học lập trình không?
  Để làm lập trình viên sau 1 năm, nên học gì?

Assemly là gì? 

Assembly Language (hay viết tắt là ASM) là ngôn ngữ bậc thấp, chính xác nó là ngôn ngữ thuộc thế hệ thứ 2 (2nd generation). ASM sử dụng các từ gợi nhớ (mnemonics) để viết các chỉ thị (instructions) lập trình cho máy tính thay vì bằng những dãy 0 và 1.

Các ASM sẽ cần một chương trình Assembler phù hợp (NASMASDASM) để dịch chúng thành những file binary và một trình linker để link các thành phần lại và chỉ định nơi bắt đầu của chương trình và đây là việc bắt buộc.

VD: Hàm main trong C mặc định là nơi chương trình khởi chạy. Lệnh dịch source C ra binary trên thực tế nó đã làm 2 bước trên: dịch và link (xác định luôn nơi khởi chạy chương trình là main).

Một trong các đặc tính của chương trình viết trực tiếp bằng ASM là: chúng có tốc độ thực thi cao và tiêu tốn bộ nhớ ít hơn các chường viết bởi các ngôn ngữ lập trình bậc cao.

Việc học assembly code cũng sẽ giúp chúng ta hiểu thêm về kiến trúc phần cứng máy tính, cách chúng hoạt động và tương tác với nhau.

Ví dụ như các thành phần cơ bản trong máy tính, cách chúng truyền thông tin cho nhau.

ASM có thể tương tác rất sâu dưới hệ thống, chúng có thể giao tiếp trực tiếp với các phần cứng và bắt chúng hoạt động theo ý người lập trình. Vì thế mà chúng ta có hẳn một ngành mang tên là “lập trình nhúng”. Xem thêm WebAssembly là gì.

Cái khó của việc học assembly là gì?

Thông thường khi học một ngôn ngữ lập trình chúng ta chỉ đơn giản là cài đặt môi trường lập trình, công cụ biên dịch và sử dụng các editor hoặc IDE nếu có thể học lập trình. Viết một chương trình đơn giản rồi biên dịch và chạy thử trên các ngôn ngữ bậc cao (C, C++, Java) là rất dễ dàng. Nhưng với ASM thì bạn sẽ dễ bị “nản” vì không thể dịch và chạy code ASM đúng như hướng dẫn.

Lý do là ASM lập trình các chỉ thị cho phần cứng tuy nhiên chúng lại lệ thuộc vào kiến trúc CPU (ARMx86-32x86-64), hệ điều hành (Linux, Windows, Mac) và các tập chỉ thị mà nhà sản xuất phần cứng đưa ra. Đa số các hướng dẫn, sách vở được viết cho kiến trúc iA-32. Một số hướng dẫn mới gần đây hơn thì viết cho kiến trúc x86-64 trên Linux, sử dụng Assembler của GNU.

Khác với ngôn ngữ C, về lý thuyết chúng ta có thể dịch lại mà không cần đổi source code ban đầu. Tuy nhiên thực tế thì điều này khó xảy ra vì chúng ta chỉ có thể làm được điều trên nếu không gọi tới các API của hệ điều hành. Nói tới đây lại thấy yêu Java hơn, Java thật sự là cuộc cách mạng viết một lần, chạy mọi nơi và cũng chẳng cần phải dịch lại. Mọi thứ đã có máy ảo Java lo.

Thêm một khó khăn nữa cho những người học ASM trên máy Mac như mình. Apple chỉ định riêng bộ linker (Match-O) cho ASM, chúng sử dụng một số chỉ thị riêng, padding memory riêng (có 4 lớp padding). Việc viết ASM cho máy Mac thật sự có rất ít bài viết hướng dẫn, doc của Apple thì như kinh thánh … Việc nhớ các thanh ghi, các chỉ thị thôi đã đuối lắm rồi, thêm Apple hành nữa thật là khó càng thêm khó !!! Chi tiết Apple OS X Assembler Reference.

VD: Một chương trình in ra “Hello World” viết bằng ASM trên Mac OS như sau:

.section __DATA,__data
str:
  .asciz "Hello world!\n"
 
.section __TEXT,__text
.globl _main
_main:
  movl $0x2000004, %eax           
  movl $1, %edi                    
  movq str@GOTPCREL(%rip), %rsi   
  movq $100, %rdx                 
  syscall
 
  movl $0, %ebx
  movl $0x2000001, %eax         
  syscall

Sử dụng GNU Assembler, linker và chạy thử:

as hello.asm -o hello.old hello.o -o hello -e _main./hello

Như các bạn đã thấy việc in một đoạn text ra màn hình với ngôn ngữ assembly khá phức tạp, đó là chưa kể ta phải viết đúng chỉ thị của OS và CPU hiện tại. Tất cả chỉ là các chỉ thị cho các thanh ghi chứ không có kiểu 1 lệnh in ra tất cả như C.

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

ASM khó vậy thì có nên học Assembly không?

ASM sẽ chẳng có ý nghĩa gì nếu chúng ta không thuộc tập sau đây:

  • Những người cần lập trình phần cứng, mạch điện tử, các chip vi xử lý.
  • Những người lập trình compiler, hệ điều hành. (Trong đó có anh Chris Lattner, tác giả của LLVM và Swift mà mình rất ngưỡng mộ vì anh rất trẻ – SN 1978)
  • Hacker chuyên nghiệp.
  • Reverse Engineer: nếu dịch là kỹ sư đảo thì không hay và cũng ko đủ ý. RE là những kỹ sư chuyên phân tích, mổ xẻ các chương trình để hiểu rõ chi tiết bên trong nó thế nào, RE thường ứng dụng trong an ninh: phát hiện mã độc, đánh giá thuật toán mã hoá … và các lĩnh vực khác có liên quan.
Một số lợi ích khác của ASM là:
  • Có thể dùng debug chương trình mà không cần source code.
  • Có thể dùng để tối ưu hoá chương trình: một số dân code ASM chuyên nghiệp dùng C để code và dịch ra ASM rồi edit lại cho phù hợp với kiến trúc và các chỉ thị riêng và tối ưu của nhà sản xuất chip. Lý do là các compiler chỉ dịch ra ASM chung nhất cho các dòng chip.

Một số tài liệu liên quan tới ASM

Mình xin chia sẻ lại một số tài liệu mà trong thời gian qua mình có được, để ai đó có đang tìm hiểu ASM có thể tham khảo qua:
Ebook:
  1. Introduction to 64 Bit Assembly Programming for Linux: Quyển này tinh gọn, rất hay. Third edition có cho cả MacOS. Phiên bản này chỉ có cho Linux.
  2. Professional Assembly Language : Quyển này tác giả nói rất sâu về cơ chế, tất cả các thông số register, cơ chế vận hành phần cứng … Tiếc là tác giả viết cho kiến trúc IA-32 và phần code ASM cũng chỉ cho Linux x86-64 thôi.
  3. Hacking: The Art of Exploitation: Dành cho ai thích hack, cuốn này nói rất sâu về kỹ thuật hacking đặc biệt là sử dụng ASM để can thiệp hệ thống.
  4. Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation: Quyển này cho những ai yêu thích RE.
** Sách tiếng Việt mình thấy có vài cuốn nhưng mở vài trang đọc thật sự không hiểu gì !!!
Bài viết:
  1. Assembly “hello, world” for OS X: Bài này viết ASM với assembler NASM. NASM trên MacOS ko có sẵn, phải cài thêm thông qua brew.
  2. x86 Assembly Guide: bài này mình hay dùng để tra cứu nhanh các chỉ thị và thanh ghi (vì não cá vàng chưa thể nhớ nổi @@)
  3. OS X Assembler Reference: Guide về Assembler cho OS X của Apple, mình dùng doc này để convert code bên Linux qua. Cái này thật sự không giúp mình nhiều, chủ yếu coi phần Data Segment và memory padding để sử dụng thanh ghi EAX cho chính xác. Nếu không chương trình sẽ chạy ra lỗi bus error.
Mặc dù dừng lại khá sớm với việc học ASM nhưng mình cũng hài lòng với kết quả đạt được. Mình thu được một mớ kiến thức kha khá về CPU, cơ bản về việc các process cấp phát bộ nhớ. Và quan trọng là bây giờ khi cái màn hình debug trong XCode hiện lên 1 mớ ASM mình có thể hiểu được phần nào chứ không coi nó như thứ ngôn ngữ ngoài hành tinh nữa.

TopDev via Fb VietTran

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

Cách tạo một Docker đơn giản cho Node.JS

docker-cho-node-js

Đây là một hướng dẫn ngắn và đơn giản về docker, khá hữu ích cho các anh em Nodejs.

Tại sao bạn nên sử dụng Docker?

Khi công việc kinh doanh cần tới nhiều ứng dụng web khác nhau, khi mà bây giờ framework hay ngôn ngữ lập trình chỉ là công cụ. Các công ty không bị giới hạn và có thể sử dụng bất kỳ ngôn ngữ nào cần. Vì vậy chúng ta cần có một môi trường mà nhiều ứng dụng khác nhau có thể chạy cùng nhau trên đó.

Virtual Machines (VM) cho phép chúng ta chạy nhiều app trên cùng 1 server. Nhưng cũng có hạn chế. Mỗi VM cần toàn bộ OS để chạy. Mỗi OS lại cần CPU, RAM,… để chạy, rồi nó cần patching và licensing, do đó làm tăng chi phí và khả năng phục hồi.

Google bắt đầu sử dụng mô hình container từ lâu để giải quyết các thiếu sót của mô hình VM. Về cơ bản thì mô hình container có nghĩa là nhiều container trên cùng một máy chủ sử dụng cùng một máy chủ, giải phóng CPU, RAM để có thể được sử dụng ở nơi khác.

Nhưng nó giúp các lập trình viên như thế nào?

Nó đảm bảo môi trường development tương đồng với môi trường production với tất cả lập trình viên và tất cả máy chủ.

Bất kể ai có thể làm project chỉ trong vòng vài giây, không cần phải vật lộn với config, thiết lập thư viện, cài đặt dependency,…

Nói một cách đơn giản, Docker là một nền tảng cho phép chúng ta develop, deploy và run các ứng dụng với các container.

Quay lại một chút, hệ thống container trông như thể nào và nó khác với VM như thế nào?

Cách tạo một Docker đơn giản cho Node.JS

1.1 Khác biệt giữa VM và Docker

Như bạn có thể thấy host và tài nguyên được chia sẻ trong container nhưng không có trong VM.

Cách sử dụng Docker?

Chúng ta cần làm quen với một số thuật ngữ, bạn có thể đọc thêm Docker là gì:

Cách tạo một Docker đơn giản cho Node.JS

1.2. Mô tả docker image và docker container

Docker image: là một file thực thi có chứa những hệ điều hành được cắt giảm và tất cả các thư viện và cấu hình cần thiết để chạy ứng dụng. nó có nhiều lớp xếp chồng lên nhau và được biểu diễn dưới dạng một object đơn. Một docker image được tạo ra để sử dụng file docker, chúng ta sẽ bàn về nó sau.

Docker Container: Nó là một instance đang chạy của docker image. Có thể có nhiều container chạy từ cùng một docker image.

  Deploy web app với Traefik và Docker Swarm
  Sử dụng Docker (và cả Docker Compose) cho dự án Django

Container hóa một ứng dụng Node.js đơn giản

Chúng ta sẽ thử container hóa một ứng dụng node.js rất đơn giản, và tạo 1 image:

Ứng dụng Node.js của bạn

Hãy bắt đầu với việc tạo folder my-node-app

mkdir my-node-app  
cd my-node-app

Hãy tạo một server node đơn giản trong index.js và thêm dòng code bên dưới vào đó:

//Load express module with `require` directive

var express = require('express')

var app = express()

//Define request response in root URL (/)  
app.get('/', function (req, res) {  
 res.send('Hello World!')  
})

//Launch listening server on port 8081  
app.listen(8081, function () {  
  console.log('app listening on port 8081!')  
})

và lưu file này vào trong folder my-node-app

Giờ chúng ta tạo một file package.json và thêm dòng code dưới này vào:

 {

    "name": "helloworld",  
    "version": "1.0.0",  
    "description": "Dockerized node.js app",  
    "main": "index.js",  
    "author": "",  
    "license": "ISC",  
    "dependencies": {  
      "express": "^4.16.4"  
    }

 }

Ở điểm này bạn không cần cài đặt express hay npm trong máy chủ, vì hãy nhớ là dockerfile xử lý tất cả các thiết lập dependency, lib và cấu hình.

DockerFile

Hãy tạo dockerfile và lưu nó trong folder my-node-app. File này không có extension và được đặt tên là Dockerfile. Tiếp tục thêm dòng code bên dưới vào dockerfile

    # Dockerfile  
    FROM node:8  
    WORKDIR /app  
    COPY package.json /app  
    RUN npm install  
    COPY . /app  
    EXPOSE 8081  
    CMD node index.js

Giờ chúng ta đang làm gì ở đây nào

FROM node:8 – pull docker image node.js từ docker hub, bạn có thể tìm ở đây https://hub.docker.com/_/node/

WORKDIR /app – cái này đặt thư mục làm việc cho code của chúng ta trong image, nó được sử dụng bằng tất cả các lệnh tiếp theo như COPY, RUNCMD.

COPY package.json /app cái này copy package.json từ host folder my-node-app đến image trong folder /app

CRUN npm install – chúng ta chạy lệnh này trong image để cài đặt dependency (node_modules) cho app.

COPY . /app  – Chúng ta báo với docker để copy file từ folder my-node-app và dán nó vào /app trong docker image.

EXPOSE 8081 Chúng ta đang mở cổng trên container bằng lệnh này. Tại sao lại có cổng này? Vì trong server, index.js listen cổng 8081. Theo mặc định container được tạo từ image sẽ bỏ qua tất cả các request thực hiện cho nó.

Build Docker Image

Mở terminal, đến folder my-node-app và gõ dòng lệnh sau:

     # Build a image docker build -t <image-name> <relative-path-to-your-dockerfile>

    docker build -t hello-world .

Dòng lệnh này tạo một image có nội dung hello-world vào host của chúng ta.

-t được sử dụng để đặt tên cho image, mà ở đây là hello-word

. là đường dẫn đến tệp docker, vì chúng ta đang trong thư mục my-node-app, nên sử dụng dấu chấm để thể hiện đường dẫn đến file docker.

Bạn sẽ thấy một output trong dòng lệnh giống thế này:

    Sending build context to Docker daemon  4.096kB  
    Step 1/7 : FROM node:8  
     ---> 4f01e5319662  
    Step 2/7 : WORKDIR /app  
     ---> Using cache  
     ---> 5c173b2c7b76  
    Step 3/7 : COPY package.json /app  
     ---> Using cache  
     ---> ceb27a57f18e  
    Step 4/7 : RUN npm install  
     ---> Using cache  
     ---> c1baaf16812a  
    Step 5/7 : COPY . /app  
     ---> 4a770927e8e8  
    Step 6/7 : EXPOSE 8081  
     ---> Running in 2b3f11daff5e  
    Removing intermediate container 2b3f11daff5e  
     ---> 81a7ce14340a  
    Step 7/7 : CMD node index.js  
     ---> Running in 3791dd7f5149  
    Removing intermediate container 3791dd7f5149  
     ---> c80301fa07b2  
    Successfully built c80301fa07b2  
    Successfully tagged hello-world:latest

Như bạn có thể thấy nó chạy các bước vào file docker và output một docker image. Có thể sẽ mất vài phút khi bạn thử lần đầu, nhưng từ lần tiếp theo sẽ bắt đầu sử dụng cache và build nhanh hơn nhiều với output cũng giống như trên. Bây giờ thử dòng lệnh bên dưới trong terminal để xem image của bạn có ở đó không nhé:

    # Get a list of images on your host 
    docker images

Sẽ có một list các image trong host của bạn, giống như thế này:

    REPOSITORY    TAG      IMAGE ID      CREATED         SIZE  
    hello-world   latest   c80301fa07b2  22 minutes ago  896MB

Chạy Docker Container

Với image của chúng đã tạo, có thể tạo một container từ image này

    # Default command for this is docker container run <image-name>  
    docker container run -p 4000:8081  hello-world

Dòng lệnh này được sử dụng để chạy docker container

-p 4000:8081 Đây là lệnh cho phép, nó đánh dấu host 4000 sang cổng container 8081 mà chúng ta đã mở thông qua lệnh expose trong dockerfile. Bây giờ tất cả các request đến cổng host 4000 sẽ được chuyển thành cổng containter 8081

hello-world Đây là tên chúng ta đặt cho image mới nhất khi chúng ta chạy lệnh docker-build

Bạn sẽ nhận một vài output giống thế này:

    app listening on port 8081!

nếu bạn muốn truy cập vào container và gắn terminal bash vào nó, bạn có thể gõ

    # Enter the container
    docker exec -ti <container id> /bin/bash

Để kiểm tra container chạy chưa, mở terminal khác và gõ

    docker ps

Bạn sẽ thấy container chạy như thế này

     CONTAINER ID    IMAGE        COMMAND                  CREATED    
    `<container id>`  hello-world  "/bin/sh -c 'node in…"   11 seconds ago

    STATUS              PORTS                    NAMES  
    Up 11 seconds       0.0.0.0:4000->8081/tcp   some-random-name

Nó nghĩa là container của chúng ta với id <container id> được tạo từ image hello-word, và được up lên và chạy theo cổng 8081.

Ứng dụng Node.js thông minh sẽ hoàn toàn được container hóa. Bạn có thể vào http://localhost:4000/ trên trình duyệt và thấy thế này:

Cách tạo một Docker đơn giản cho Node.JS

1.3 Ứng dụng Node.js đã được containerise

Và thế là bạn đã containerise ứng dụng đầu tiên của mình rồi đấy. Chúc các bạn thành công!

Xem thêm việc làm Node.js developer hấp dẫn nhất tại TopDev

7 bước cấp thiết của chiến lược tuyển dụng IT trên social media hiệu quả

Tuyển dụng IT trên social media luôn là vấn đề gây đau đầu nhà quản lí, chưa nhắc đến việc phải tạo ra một phương hướng phát triển lâu dài. Hơn nữa, social media tiếp tục thống trị Internet như các kênh truyền thông hàng đầu. Đây không chỉ là công cụ để bạn kết nối với mọi người mà là nơi bạn có thể tìm thấy khối nhân tài. Không ngạc nhiên khi có đến 90% nhà tuyển dụng dùng social media để tìm kiếm, chiêu mộ và tuyển chọn ứng viên tài năng. Vì thế việc cạnh tranh nhau của hàng triệu công ty để thu hút nhân tài ngày một khốc liệt.

Hiểu được nỗi trăn trở đó, TopDev sẽ tóm gọn 7 bước chính yếu để xây dựng một chiến lược tuyển dụng IT trên social media hiệu quả. Ngoài ra bạn có thể xác định nền tảng mạng xã hội hợp lí, chọn lựa đúng ứng viên cũng như cách tiếp cận họ qua cách kênh truyền thông!

tuyển dụng IT social media

Bước 1: Chọn đúng nền tảng cho tuyển dụng IT trên social media

Việc lựa chọn nền tảng cho đóng vai trò vô cùng quan trọng trong chiến lược tuyển dụng IT. Theo Harver, có đến 87% nhà tuyển dụng dùng LinkedIn để tìm kiếm ứng viên, 55% dùng Facebook, 47% là Twitter.

Tương tự, nội dung bạn đăng tải cũng thế. So với Twitter và Instagram, LinkedIn được xem là hiệu quả hơn để đăng các bài blog. Vì thế hãy xác định rõ kì vọng và đảm bảo chọn một (hoặc vài) nền tảng cho xu hướng ngành của bạn.

Bước 2: Xác định cụ thể từng ứng viên khi tuyển dụng IT trên social media

Tìm kiếm một ứng viên là không hề dễ dàng. Bạn tự hào vì có một quảng cáo công việc tốt nhưng nếu ở sai thị trường sẽ không ai ứng tuyển cả. Đặc biệt với tuyển dụng IT trên social media, hãy xác định được kiểu ứng viên mà bạn muốn lựa chọn vào công ty. 

Một số câu hỏi giúp bạn rõ hơn về loại ứng viên công ty thực sự cần:

Bạn muốn tuyển sinh viên mới ra trường, chuyên gia hay tầm trung?

Bạn có yêu cầu đặc biệt nào như đạo đức công việc, lý lịch, tình trạng gia đình?

Ngoài ra, bạn có thể tiết kiệm thời gian bằng việc khắc họa chân dung ứng viên và đặt trọng tâm chiến lược vào đó. Nhờ thế, ứng viên không phù hợp sẽ được lọc sớm cũng như khuyến khích ứng viên khác nộp CV. 

Bước 3: Thiết lập lịch nội dung

Thu hút ứng viên tài năng đòi hỏi sự kiên trì và bền bỉ. Hãy đảm bảo bạn chuẩn bị kĩ bằng việc lên kế hoạch nội dung tuyển dụng IT vài tuần trước đó.

Lịch không chỉ giúp tự động hóa nội dung định sẵn còn giúp mọi người dễ thấy quảng cáo công việc của bạn hơn.

lịch nội dung- tuyển dụng IT social media

Khi đăng tải thường xuyên thì cơ hội các ứng viên thấy vị trí ứng tuyển càng cao hơn. Tuy nhiên đừng lạm dụng, vì nếu đăng quá nhiều thì bạn có thể bị liệt trong danh sách đen vì “spam” đấy.

Bước 4: Đẩy mạnh sự tương tác – điều thiết yếu trong tuyển dụng IT trên social media

Thông thường khi tìm việc, họ sẽ phản ứng ngay với các công việc họ thấy thu hút, vì vậy cần đảm bảo điều này xảy ra khi bạn đăng tải vị trí nào đó. Vì vậy bạn cần bổ sung thông điệp mang tính động lực và thúc đẩy vào quảng cáo công việc.

Một số câu truyền động lực như “sign up today- change your tomorrow” nên được lồng ghép vào các bài đăng. Chúng dễ lĩnh hội cũng như khiến cho người dùng social media thích thú hơn. Việc họ sẽ cân nhắc và cuối cùng quyết định nộp CV dễ dàng hơn bao giờ hết.

  5 tố chất để thành công khi làm nghề tuyển dụng
  3 bí quyết thu phục lòng người của nhà quản trị

Bước 5: Đặt ra những luật lệ và yêu cầu

Trong tuyển dụng IT trên social media, khi viết mô tả công việc, bạn cần chú ý, cân nhắc từng chi tiết liên quan. Trước khi đăng tải điều gì, bạn cần xác định và xem xét toàn bộ quá trình tuyển dụng IT.

Chiến lược tuyển dụng IT trên social media không giống tuyển dụng truyền thống khi nhắc tới quy định. Điều cần làm là đặt ra quy định liên quan tới định dạng, quy tắc CV cho ứng viên của bạn.

Tuy nhiên, đừng mong đợi CV nào cũng như mong muốn. Trong trường hợp đó, những ai không theo đúng nguyên tắc vẫn sẽ như thế nếu bạn chấp nhận tuyển họ.

Bước 6: Giao tiếp qua social media

Bản chất của các social media là thúc đẩy giao tiếp trực tiếp. Vì vậy, chúng có thể đóng vai trò hỗ trợ đắc lực cho bất kỳ ứng viên tiềm năng nào.

Khả năng lớn ứng viên sẽ hỏi thêm về vị trí, công ty cũng như quá trình tuyển dụng. Hãy hướng dẫn cho người quản lí kênh social media cách trả lời bất kì câu hỏi nào liên quan. Nhờ thế, việc tuyển dụng IT trên social media của bạn sẽ mang lại trải nghiệm tích cực hơn cho ứng viên đấy.

Đừng bao giờ bỏ lơ bất kì tin nhắn nào vì họ có thể thấy tiêu cực về tổng thể doanh nghiệp. Facebook và Twitter thường hiển thị trang thường xuyên trả lời tin nhắn hơn là trang không có. Vì thế, hãy thể hiện thiện chí của bạn bằng việc trả lời mọi câu hỏi.

giao tiếp trong tuyển dụng IT social media

Bước 7: Đừng để ứng viên phải chờ

Social media về bản chất khuyến khích thời gian phản hồi và quay vòng thông tin nhanh chóng. Hãy theo logic này nếu bạn có kế hoạch sử dụng tuyển dụng phương tiện truyền thông xã hội.

Khi CV đến, đảm bảo bạn liên hệ với ứng viên càng sớm càng tốt. Hoặc bạn có thể tạo tin nhắn tự động để bảo đảm ứng viên có trải nghiệm tích cực!

Công ty đôi khi phải chịu tiếng xấu khi bạn cố tình lờ đi những tin nhắn trực tiếp. Nhớ rằng bất cứ ai gửi CV chứng tỏ họ đang rất cần việc làm. Hãy cho họ thấy sự trân trọng của bạn bằng giải đáp và sắp xếp phỏng vấn sớm nhất có thể. Nhờ thế, những trải nghiệm không tốt với công ty có thể được giảm thiểu.

KẾT LUẬN

Khi dùng social media cho chiến lược tuyển dụng IT thì bạn cần tập trung vào chất lượng từng bài đăng. Không chỉ thế, bạn phải tạo cho ứng viên cảm xúc tích cực bằng việc duy trì và thúc đẩy sự tương tác với họ. Dĩ nhiên việc thực hiện không hề dễ dàng tí nào. Tuy nhiên, nếu bạn nghiêm túc và kiên trì, vị trí ứng tuyển của bạn sẽ hiệu quả hơn mong đợi rất nhiều đấy!

Nếu còn gì chưa rõ, ấn vào đây và đội ngũ TopDev sẽ giúp bạn giải đáp mọi thắc mắc !

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

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

TopDev via Talentlyft

  3 nguyên tắc tuyển dụng của Richard Branson
  TopDev ra mắt giải pháp tuyển dụng ứng dụng trí tuệ nhân tạo

Mẫu bảng mô tả công việc cho lập trình Golang

Mô tả công việc lập trình Golang mức lương hấp dẫn

Golang Developer là lập trình viên có kiến thức và kinh nghiệm về ngôn ngữ lập trình Golang. Golang là một trong những ngôn ngữ lập trình mới nhất trong ngôn ngữ lập trình hiện đại. Golang được tự mô tả là một ngôn ngữ lập trình mã nguồn mở giúp dễ dàng xây dựng phần mềm đơn giản, đáng tin cậy và hiệu quả. Hy vọng, Mẫu bảng mô tả công việc lập trình Golang này sẽ giúp các bộ phận nhân sự dễ dàng hơn cho việc tuyển dụng những vị trí này

Về lập trình viên Golang : Để thành một Golang Developer, xác lập trình viên cần nắm rõ cấu trúc dữ liệu và giải thuật, kỹ thuật lập trình hướng đối tượng cũng như có kinh nghiệm về ngôn ngữ Golang để cùng tham gia nghiên cứu, thiết kế, phát triển và tích hợp các các giải pháp và hệ thống ứng dụng phục vụ công việc quản trị, vận hành và điều hành cho sản phẩm công ty/ khách hàng.

Mẫu bảng công việc lập trình Golang

YÊU CẦU CÔNG VIỆC

  • Nắm vững chắc về ngôn ngữ lập trình Golang, mô hình, cấu trúc và thành ngữ
  • Hoặc Thành thạo một hoặc nhiều ngôn ngữ lập trình: C / C ++ / Java / Golang
  • Kiến thức về các mẫu Goroutine và kênh phổ biến
  • Có kinh nghiệm làm việc với với các công cụ code versioning (như Git, SVN và Mercurial)
  • Có kinh nghiệm làm việc với các Framework và tools của Go, bao gồm:+ Các công cụ quản lý phụ thuộc như Godep, Sltr, v.v.
    + Go’s code generation tools, như Stringer
    + Go web frameworks, như Revel
    + Gói bộ định tuyến, chẳng hạn như Gorilla Mux

MÔ TẢ CÔNG VIỆC

  • Tham gia thiết kế và phát triển các ứng dụng kinh doanh hiệu suất cao, từ phân tích yêu cầu đến sản xuất
  • Không ngừng nâng cao chất lượng phần mềm
  • Phân tích và cải thiện hiệu suất ứng dụng
  • Phối hợp với thành viên trong team để tối ưu hóa các phương pháp kỹ thuật
  • Đóng vai trò quan trọng trong các quyết định thiết kế và kiến ​​trúc, xây dựng hướng tới một kiến ​​trúc phân tán dịch vụ vi mô hiệu quả.

Tham khảo thêm những công việc lập trình hot nhất thị trường tại đây

Giải pháp cho phần lưu, quản lý log hiệu quả và cực kỳ tiết kiệm chi phí

Sau một thời gian “ngưng log” các request API và SQL query thì đã mạnh dạn tìm kiếm 1 SaaS log management vừa túi tiền để thử, bởi nếu các bạn cũng biết mấy ông này rất đắt tiền, bèo bèo cũng 50$/tháng và cũng lưu được vài GB.

Tìm việc làm it manager lương up to 50M

Syslog-Ng để nhận log local và đẩy lên UDP Server

Vô tình phát hiện ông LogDNA với chi phí khá cool 1.5$/GB/tháng. Thiết nghĩ chắc Teamcrop tầm 3, 4GB tháng là cùng. Cuối cùng đã quyết định đẩy toàn bộ log lên LogDNA, do hệ thống Teamcrop Microservices dùng docker và đang sử dụng Syslog-NG để ghi log local, nên chỉ cần mount 1 file config mới để trỏ tới UDP IP & Port mới là xong.

  Speed up Microservices 3: Export dữ liệu ra Excel
  Speed up Microservices 2: Tận dụng trình duyệt và cache
  Microservices là gì? Speed up Microservices 1: Tác dụng phụ và một số chiến lược cơ bản

Sau khi kết nối và thấy raw log được thì khá là ưng ý và cũng đã apply lên production sau 1 ngày thử nghiệm. Ác mộng mới bắt đầu, sau 2 ngày chạy thiệt, hệ thống log đã ghi nhận gần 16 triệu line, và tổng dung lượng gần 4.5GB. Tính nhẩm nhẩm thì 1 tháng tầm 50GB là ít, tính ra chi phí cũng không ít, chả khác gì mấy ông như Loggly, Papertrail, Sematext…có vẻ không ổn nên lại tính cài lại Graylog hoặc ELK nhưng quá khứ cho thấy làm việc với các hệ thống này mặc dù tự cài nhưng khá chua, lỗi lên lỗi xuống, rườm rà và giao diện cũng phức tạp (performance tệ).

PHP 7 & Swoole Extension để dựng UDP Socket Server

Sau một ngồi suy nghĩ thì tính đến chuyện sao không viết 1 UDP server luôn và lắng nghe log và ghi xuống “một nơi nào đó”, và nơi này phải tối ưu cho truy vấn thống kê (chứ MySQL là nghe đến trăm triệu record là bỏ của chạy lấy người). Viết UDP Socket server khá dễ, chỉ vài phút là dựng được cũng như viết được parser cho log. Nhân đây giới thiệu với các đồng đạo extension Swoole của PHP, tìm hiểu để mở rộng thêm tầm nhìn về PHP nhé.

Kết hợp với Supervisord thì script PHP này chạy ngầm đỡ dở chứng.

Công đoạn thiếp theo là lưu log ở đâu để truy vấn cho lẹ, vô tình tìm ra Clickhouse, được sinh ra để tối ưu cho OLAP và trên nhiều dữ liệu. Lại tương thích với SQL nên hầu như khi sử dụng (truy vấn) sẽ không khác MySQL bao nhiêu. Cài đặt Clickhouse cũng dễ nên sau vài giờ là đã test đọc ghi dữ liệu. Cũng có PHP client để kết nối nên việc tích hợp vào code PHP khá nhẹ nhàng và không có vấn đề gì. Cho chạy thử nghiệm production thì dữ liệu đẩy vào khá smooth. Hiện tại được vài triệu record nhưng query khá nhanh.

Khâu cuối cùng là Select data & UI thì tùy mỗi người nhu cầu gì thì viết chart mà thôi, cái này dễ như làm việc với web bình thường. Bên Teamcrop thì sử dụng cơ chế insight có sẵn và UI trên React nên khâu này khá nhẹ nhàng, tha hồ làm chart mình thích.

Hoặc làm biếng thì có clickhouse-client, có thể vào và viết query để xem kết quả ngay như mysql client.

Toàn bộ giải pháp hiện đang chạy 1 con server 20$/tháng, nếu log nhiều thì có thể xóa record quá cũ hoặc thuê server bự hơn. Dù sao thì hiện tại log khá sướng, chủ động ở khâu parser và query data. Hy vọng những chia sẻ này sẽ giúp anh chị em tiết kiệm kha khá tiền cho log management. Khi nào xịn xịn xíu, có GUI sẽ viết blog hoặc open source phần setup này cho bà con triển khai nhé, đỡ tốn tiền và muốn log bao nhiêu log. Tất cả chỉ tốn 1 ngày R&D và tiết kiệm bộn tiền cho vụ log này.

Một số công nghệ đề cập:
– Syslog-Ng để nhận log local và đẩy lên UDP Server
– PHP 7 & Swoole Extension để dựng UDP Socket Server
– Supervisord để quản lý PHP Background Process
– Clickhouse để làm database và truy vấn dữ liệu

  Giao tiếp hiệu quả giữa các Microservice
  MySQL ngoại truyện

Bài viết được chia sẻ bởi tác giả Võ Duy Tuấn

 

Liệu AI có thể giúp doanh nghiệp đưa ra các quyết định kinh doanh toàn diện nhất?

Thị trường Mobile Marketing tại Đông Nam Á: Cuộc chơi không dành cho “kẻ yếu tim”!

thị trường mobile marketing

Thị trường Mobile Marketing tại Đông Nam Á

Xem thêm việc làm mobile hấp dẫn nhất

Để biết thêm thông tin về AppsFlyer, vui lòng truy cập www.appsflyer.com

Vì sao Angular khiến tôi muốn bỏ nghề lập trình?

Tác giả: Tobias Merkle

Documentation – Tài liệu siêu việt

Bạn đã bao giờ có một ý tưởng tuyệt vời cho một dự án cuối tuần, bắt đầu vào chiều thứ bảy, và sau đó dần dần nhận ra dự án sẽ mất ít nhất sáu tháng để thực hiện đầy đủ? Google đã có một khoảnh khắc như vậy khi họ bắt đầu ghi lại tài liệu các hoạt động bên trong của ANGULAR WEB DEVELOPMENT FRAMEWORK. Sau đó, họ cho một thực tập sinh ăn không có gì ngoài espresso trong nhiều tuần cho đến khi cô có một dự án mã hóa Hello World mà họ có thể thực hiện như một tài liệu hoàn chỉnh về toàn bộ stack của mình.

Không có lỗi nào bạn gặp phải trong khi xây dựng ỨNG DỤNG WEB trên ANGULAR WEB DEVELOPMENT FRAMEWORK sẽ được liệt kê ra trong tài liệu này. Thật vậy đấy, rất ít trong số các design pattern hoặc khái niệm cốt lõi mà bạn cần được ghi lại trong đó. Nếu bạn muốn tìm hiểu cách thực sự xây dựng một công cụ với ANGULAR, bạn sẽ cần mua một khóa học trực tuyến (tôi có thể giới thiệu Hướng dẫn toàn diện của Maximillian Schwarzmueller) sẽ tiết lộ cho bạn tất cả những khoảnh khắc cạm bẫy đang chờ đợi người dùng ngây thơ khi tin rằng họ có thể đơn giản bắt đầu viết Javascript như một nhà phát triển React hoặc Vue.

Tài liệu của Angular thực tế là có nhiều công dụng hơn bạn nghĩ, mà tôi sẽ giải mã dưới đây.

Bạn có nhận thấy gì không? Đúng vậy đó: khi sửa lỗi trong ANGULAR, bạn cần loại trừ cụ thể cụm từ `angularjs` khỏi mọi tìm kiếm của mình. Bạn có thể gắn thêm 2 hoặc 7 hoặc hy vọng rằng chỉ cần `”ANGULAR”`sẽ đủ để loại trừ phiên bản đầu tiên không hợp lệ của ngăn xếp phát triển “phần mềm toàn diện” này.

Nhưng sau đó, bạn có thể đọc đủ các giải pháp Stack Overflow về vấn đề này, và nó bắt đầu cho bạn thấy rằng giữa mã bạn viết và mã chạy trong trình duyệt, không chỉ có một trình biên dịch sẽ tự tay phá vỡ tất cả CSS của bạn, mà còn có một hộp đen thực sự yêu cầu bạn định dạng ứng dụng của mình theo cách chính xác như vậy nếu không toàn bộ mọi thứ sẽ thất bại trong âm thầm hoặc tệ hơn, phát ra một thông báo lỗi không chính xác. Bạn thực sự không thể tin bất cứ điều gì từ ANGULAR bởi vì thậm chí nó còn không biết hệ thống của chính nó hoạt động như thế nào.

Toàn bộ trải nghiệm sử dụng ANGULAR là như thế này. Sau nhiều lần bạn chạy hết tốc lực tông thẳng vào một bức tường, cuối cùng bạn cũng học được cách bò xung quanh để tránh nó nhưng lại phải đi với tốc độ ốc sên, dò dẫm thảm hại cho bất kỳ chướng ngại vật tùy ý nào mà cái FRAMEWORK này có thể bày ra chỉ để cản đường bạn.

Hãy tưởng tượng một chiếc ô tô có cốp xe không bao giờ mở và bảng điều khiển của nó chỉ nói DASHBOARD trong ánh sáng chói mắt mà không thể tắt. Chiếc xe không thể được sửa chữa một khi bị hỏng; nó chỉ có thể được thay thế hoặc sửa đổi từ bên ngoài. Nó phè khí lạnh ngay cả khi bạn không bật máy. Thậm chí còn không có cả hướng dẫn sử dụng tồn tại. Nếu bạn muốn biết làm thế nào nó hoạt động thì phải đọc qua cuốn sách dài 5.280 trang. Chúc may mắn!

Kiến trúc siêu việt nhưng made in china

ANGULAR rất là chậm. Quá trình viết ứng dụng luôn mất nhiều thời gian và các chúng luôn hoạt động rất chậm chạp một khi ứng dụng của bạn trở nên phức tạp hơn mức `Hello World`. Điều này có thể được tạm chấp nhận nếu ANGULAR FRAMEWORK mang lại bất kỳ lợi ích nào cho người dùng hoặc lập trình viên, chẳng hạn như biên dịch nhanh hoặc tăng cường bảo mật ứng dụng. Nhưng ANGULAR không sở hữu bất kì điều gì trong số này. Thậm chí thực tế là nó còn sụp đổ ngay khi chỉ mới nghe nhắc đến một loại `Uncaught TypeError`.

Về cơ bản, cách duy nhất để hiểu Angular đang làm gì là đọc hàng triệu dòng mã nguồn mà các nhà phát triển vui vẻ cung cấp trên GitHub. Vì không ai thực sự làm điều đó, các nhà phát triển WEB ANGULAR thường chỉ học một hoặc hai design pattern có vẻ ổn định nhất và xây dựng toàn bộ ứng dụng từ chúng. Lựa chọn duy nhất khác của bạn là đắm mình trong sự điên rồ vô nghĩa trong khi chờ đợi các nhà phát triển cố gắng tìm hiểu cách ANGULAR hoạt động.

Một trải nghiệm không dám quên

Mở IDE ưa thích của bạn ra đi nào các coder! Sau đó nhập License Key cho IntelliJ IDEA của bạn để bắt đầu. Sau đó vui lòng chọn Type Script “Linter” mà bạn muốn sử dụng để “Lint” Type Script Code của mình. À bạn phải sử dụng IDE tương thích với Type Script. Loại Script thỉnh thoảng sẽ được cập nhật. Điều này sẽ khiến code của bạn bị sập và mọi thứ dính dáng tới nó. Đừng quá lo lắng điều này hoàn toàn bình thường! Hãy thư giãn và bắt đầu tìm kiếm một công việc khác phù hợp hơn!

Đừng hoảng hốt nếu thư viện dependency của bạn thỉnh thoảng phát sinh các thay đổi gậy sập mọi thứ sau khi một thuộc tính trên một class bạn không bao giờ sử dụng bị sửa đổi. Song song đó, bạn chỉ có thể thêm một bước chỉnh sửa tệp thủ công cho mọi quy trình xây dựng. Hoặc bạn có thể đóng băng thư viện ở phiên bản tương thích và mất tất cả các cải tiến trong tương lai. Cảm ơn bạn đã chọn dùng Type Script và ANGULAR.

Bạn có ghét viết CSS dễ đọc? Đừng lo vì ANGULAR sẽ cung cấp tất cả các cách khó hiểu nhất có thể để chuyển đổi các quy tắc style rõ ràng sang giả HTML mà sẽ cần biên dịch lại mỗi khi bạn thay đổi một yếu tố của class. Thậm chí, bạn không cần phải học FLEXBOX, cho đến khi, người quản lý yêu cầu biết lý do tại sao bố cục của bạn không phù hợp với tiêu chuẩn THIẾT KẾ – và rồi đột nhiên, bạn nhận ra rằng mọi thứ sắp sụp đổ, nhưng lại không thể sửa chúng mà không phải tốn nhiều tuần liền.

Điều tôi rút ra sau khi làm nô lệ hơn 1 năm cho Angular

ANGULAR làm cho tôi trở thành một lập trình viên giỏi hơn bởi vì nó dạy cách viết một ứng dụng trong hoàn cảnh cực kì khổ đau. Bất cứ điều gì tôi làm đều không phải là cách hiệu quả nhất. Bất kỳ lỗi nào ở bất cứ nơi nào trong ỨNG DỤNG ANGULAR sẽ khiến phần còn lại của nó trở nên điên loạn theo. 

Nhưng tôi vẫn luôn hy vọng rằng một ngày nào đó mình được sếp cho xài framework khác như React hoặc Redux. Còn bây giờ, tôi vẫn sẽ tiếp tục chiến đấu với nó. Chiến đấu chỉ để tồn tại qua một ngày khác.


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

Cải thiện mối quan hệ giữa Lập trình viên VS Sếp: dễ hay khó? (Phần 1)

Trong hai bài viết gần đây tôi đấ chia sẻ những kinh nghiệm cá nhân về những điều mà lập trình viên và nhà quản lý không nên làm để tránh những căng thẳng không đáng có.

Trong bài này, tôi muốn nhấn mạnh những kết quả tích cực từ hai bài báo trước và những gì tôi đã học được từ chúng, và tôi cũng hy vọng rằng nó giúp ích được cho bạn.

Tôn trọng thời gian của nhau

Tôi nghĩ đây là bài học quý báu nhất mà tôi từng học. Tôn trọng thời gian nên được thực hiện từ cả hai phía để có một mối quan hệ tốt.

Đối với nhà quản lý, điều này có nghĩa là tránh giao các công việc mang tính thách đố đối nhằm giữ cho lập trình viên luôn bận rộn. Điều đó có nghĩa là không đặt ra các deadlines phi thực tế, không yêu cầu quá nhiều thời gian của developers trong một ngày, một tuần hay một tháng nào đó.

Đối với các developers, điều này không liên quan đến công việc chuyên môn nhưng nó vô cùng quan trọng. Bởi vì, bên cạnh công việc họ còn có cuộc sống riêng và các mối quan hệ xã hội khác, và nó thực sự cần được tôn trọng.

Cùng nhau phát triển

Theo tôi, đây cũng là một yếu tố khá quan trọng đối với cả hai!

Đối với các nhà quản lý, điều này có nghĩa là họ phải luôn hiểu rõ về yêu cầu công việc và khả năng cũng như trách nhiệm mà mỗi lập trình viên đang phụ trách. Điều đó có nghĩa là, cần có sự sắp xếp công việc một cách hợp lý đúng với những nguyện vọng và chuyên môn của họ, nhưng đồng thời cũng trao cho những lập trình viên cơ hội được thử thách bản thân ở những vị trí khác ( mà học chưa bao giờ đảm nhiệm )

Đối với lập trình viên, điều này có nghĩa là trước hết cần tuân thủ các yêu cầu công việc thể. Nó không chỉ giúp nhà quản lý hiểu được công việc của lập trình viên và nắm được những vấn đề mà các lập trình viên đang gặp phải và có những sự hỗ trợ phù hợp.

  Tại sao nhiều lập trình viên giỏi không đưa ra lời khuyên để người khác có thể được như họ?

  Hot trend AI, không hề "gắt" như bạn nghĩ

Tích cực hỗ trợ lẫn nhau

Đối với các nhà quản lý, nó có thể đơn giản là thể hiện uy tín của họ đối với một công việc, đảm bảo tiến độ, sử dụng hợp lý ngân sách. Nói một cách đơn giản là giao tiếp với developer (và điều này giúp mở rộng mối quan hệ với bất kì nhân viên nào) rằng họ đang cùng đồng hành cùng với developers. Các developers có thể cảm thấy không an toàn, ngay cả khi họ có cái tôi lớn, vì vậy vài lời khen ngợi thật lòng về những nỗ lực của họ sẽ mang lại những hiệu quả bất ngờ. Bạn đang giúp các developers cảm thấy thành công hơn và giúp họ có thêm động lực hoàn thành tốt công việc.

Đối với các developers, bạn có lẽ nên cân nhắc đến việc gửi feedback bạn đến sếp của bạn. Lần cuối bạn cảm ơn sếp vì đã giao cho bạn một công việc tuyệt vời là khi nào? Tôi có một vài mối quan hệ công việc, và hiện giờ chúng đã trở thành bạn bè, cần có rất nhiều sự trao đổi để đạt được điều đó. Tôi không mong nghe câu ” Làm tốt lắm! ” nếu tôi không nói ” Tôi thích làm việc ở đây” hoặc “Đó là một dự án thú vị! Cho tôi thêm một dự án khác nhé!”.

Góp ý dựa mang tính chất xây dựng

Chủ đề này là phần tiếp theo của chủ đề trên.

Theo ý kiến ​​cá nhân của tôi, đó là một nghệ thuật. Về bản chất, tôi là người hướng nội và tôi thấy các bối cảnh trong đời thực rất khó giải quyết. Tôi phải chiến đấu rất nhiều để vượt qua những cảm xúc đó.

Cho dù bạn là nhà lãnh đạo hay lập trình viên, hãy thể hiện sự quan tâm lẫn nhau. Đứa con mới sinh của tôi có thể là một đề tài để chia sẽ với nhau. Ghi chép những điều bạn nói chuyện với người khác nếu bạn cảm thấy khó nhớ.

Thật khó để nhìn thấy mối quan hệ 1:1 giữa cuộc sống và công việc lập trình nhưng tôi đảm bảo bạn có ít nhất một mối quan hệ. Khi bạn cảm nhận được sự kết nối với những người bạn đang làm việc chung, sự khác biệt sẽ rất lớn.

TopDev via dev.to

Xem thêm: Cải thiện mối quan hệ giữa lập trình viên với sếp: dễ hay khó? (P2)

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

Mẫu bảng mô tả công việc lập trình Android mới nhất

Mô tả công việc lập trình Android mức lương hấp dẫn

Trách nhiệm chính của một Android Developer là phát triển ứng dụng cho các thiết bị được cung cấp bởi hệ điều hành Android. Ngoài ra, một nhà phát triển Android phải đặc biệt chú ý đến khả năng tương thích của ứng dụng với nhiều phiên bản Android và loại thiết bị. Hy vọng, Mẫu bảng mô tả công việc lập trình Android này sẽ giúp các bộ phận nhân sự dễ dàng hơn cho việc tuyển dụng những vị trí này.

Tuyển lập trình android hấp dẫn trong tháng

Mẫu bảng công việc lập trình Android

YÊU CẦU CÔNG VIỆC

  • Có kinh nghiệm với SDK Android, thành thạo ngôn ngữ Java
  • Kinh nghiệm làm việc với dữ liệu từ xa thông qua REST và JSON
  • Kinh nghiệm làm việc với các thư viện và API của bên thứ ba
  • Làm quen với các nguyên tắc thiết kế OOP
  • Hiểu biết thành thạo các công cụ phiên bản mã như Git, SVN,…
  • Kỹ năng phân tích tuyệt vời và thái độ giải quyết vấn đề tốt
  •  Khả năng làm việc tốt trong môi trường nhóm

MÔ TẢ CÔNG VIỆC

  • Thiết kế và xây dựng các ứng dụng tiên tiến cho nền tảng Android
  • Hỗ trợ toàn bộ vòng đời ứng dụng (khái niệm, thiết kế, thử nghiệm, phát hành và hỗ trợ)
  • Đảm bảo hiệu suất, chất lượng và khả năng đáp ứng của các ứng dụng
  • Phối hợp với một nhóm để xác định, thiết kế và cung cấp các tính năng mới
  • Giúp duy trì chất lượng mã, tổ chức và tự động hóa
  • Phát triển giao diện lập trình ứng dụng (API) để hỗ trợ chức năng di động
  • Cập nhật các thuật ngữ, khái niệm và thực tiễn tốt nhất để mã hóa ứng dụng di động
  • Khắc phục sự cố và gỡ lỗi để tối ưu hóa hiệu suất
  • Thiết kế giao diện để cải thiện trải nghiệm người dùng
  • Nghiên cứu và đề xuất các sản phẩm, ứng dụng và giao thức di động mới
  • Luôn cập nhật các xu hướng công nghệ mới”

Tham khảo thêm những công việc lập trình hot nhất thị trường tại đây