Home Blog Page 189

BEM là gì? Quy ước đặt tên dành cho CSS

BEM - Quy ước đặt tên dành cho class CSS

BEM là gì?

BEM là viết tắt của Block-Element-Modifier, là một tiêu chuẩn quy ước đặt tên cho các tên lớp CSS. BEM giúp cho việc code Frontend dễ đọc và dễ hiểu hơn, dễ làm việc và dễ mở rộng cũng như bảo trì khi làm việc với CSS.

Việc đặt tên theo chuẩn giúp các lập trình viên frontend hiểu được đoạn code đó có ý nghĩa gì, nó thực hiện nhiệm vụ gì. Từ đó những lập trình viên khác khi đọc vào code của bạn họ cũng hiểu được bạn đang làm gì, từ đó dễ dàng phân tích, thay đổi và quản lý hơn sau này.

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

Trong những dự án nhỏ có thể BEM chưa cần sử dụng nhưng trong các dự án lớn và làm việc với nhóm thì BEM rất quan trọng.

  • BEM giúp cho cả team làm việc với nhau dễ dàng: Khi làm Teamwork với nhau, mỗi người sẽ có một cách đặt tên class riêng và sẽ bị conflict với nhau. Sử dụng BEM sẽ loại bỏ vấn đề này, vì có cấu trúc rõ ràng và dễ tuân thủ khi sử dụng.
  • Modules: Các class của mỗi block sẽ không bị ảnh hưởng bởi các yếu tố khác, nên bạn sẽ không lo CSS của class này sẽ gây ảnh hưởng lên class khác.
  • Tái sử dụng lại: Bạn có thể soạn các block độc lập với nhau và sử dụng lại chúng một cách thuận tiện, giảm số lượng code CSS.
  • Cấu trúc: BEM cung cấp cho CSS của bạn một cấu trúc vững chắc, đơn giản và dễ hiểu.

Những thành phần cơ bản của BEM

Quy ước đặt tên

.block {}   /* Block */
.block__element {}  /* Element */
.block--modifier {}  /* Modifier */

1. Block: Là một thành phần của trang web hay ứng dụng đó, các thành phần của DOM cũng có thể là các block. Block ở đây thường là các thành phần header, body, content, footer. Ví dụ section td bên dưới tập hợp các block sau:

    • .td__container làm nhiệm vụ cân max width và padding left right
    • .td__inner làm nhiệm vụ cân padding top bottom và điểm bám cho các element absolute. VD: chỉnh một button…
    • .td__header chứa Sub-title.
    • .td__content chứa Headline và Description.
    • .td__footer chứa button CTA.

Các prefix của các class đều là td giúp chúng ta có thể nhận diện section khi muốn update mục tương ứng trong css.

2. Elements: Là một thành phần của một block và sẽ không tồn tại độc lập mà không có block vì được đặt bên trong nó, và chúng phụ thuộc vào parent block của nó. Trong BEM, các phần tử được biểu thị bằng dấu gạch dưới kép __.

    • .td__headline là Text cỡ lớn. Style thường là H1 hoặc H2.
    • .td__intro, .td__description làm mô tả content.
    • .td__image chứa ảnh.
    • .td__button với style riêng cho button trong section này.

Ví dụ:

<div class="td">
  <div class="td__title">
  </div>
  <div class="td__description">
  </div>
</div>

Ở đây td__title, td__description là thành phần con bên trong td.

  .td {
    background: #f2f4f7;
    margin-top: 23px;
    padding-bottom: 30px;
    &__description {
      font-size: 15px;
      font-family: "Arial", sans-serif;
    }
    &__title {
      font-size: 20px;
      font-family: "Arial", sans-serif;
      font-weight: bold;
    }
  }

3. Modifers: Được dùng để thao tác thay đổi cách hiển thị trên block hoặc phần tử. Ví dụ mình muốn tạo thêm một block .block__elem khác nữa và muốn làm nổi bật nó thì sẽ thêm một class .block__elem--hightlight để tạo sự khác biệt đó. Ví dụ:

Ở đây btn là block .btn—red là modifier. Style của chúng ta như sau:

   .btn {
      background: gray;
      border: 0;
      border-radius: 3px;
      box-shadow: none;
      padding: 5px 20px;
      color: #fff;
      font-size: 18px;
      line-height: 1.5;
   }
 /* style .btn--red   */
 
  .btn--red {
      background: red;
  }

Quy ước khi làm việc với BEM

  • Khi bắt đầu 1 porject chúng ta cần xem rõ guide và style những component dùng chung để có thể tái sử dụng được và tồn tại độc lập với các component khác. Chúng ta hãy xem các component của bootstrap một ví dụ tốt về component.
  • Tên selector của component thì đặt là namespace
  • Không được đặt một class con như sau: .block__parent__eye mà thay vào đó để miêu tả mỗi quan hệ giữa các khối và phần tử với nhau như sau .block__parent--eye.
  • Duy trì tính modules
  • Tránh sử dụng để viết CSS cho id, cụ thể là những trường hợp ưu tiên trong CSS.

Tham khảo thêm các việc làm Front endviệc làm CSS lương cao tại Topdev

Service Provider là gì? Tìm hiểu Service Provider trong Laravel

Service Provider là gì? Tìm hiểu Service Provider trong Laravel

Ở bài trước, đã có giải thích về việc Laravel đã xử lý một request như thế nào?. Giờ chúng ta cùng xem Service Provider hoạt động như thế nào trong ứng dụng web nhé.

Service Provider là gì?

Service Provider là thành phần trung tâm của việc khởi tạo tất cả các ứng dụng Laravel bao gồm các thành phần core. Việc đăng kí các liên kết tới service container, event listeners, middleware, và thậm chí các route. Service provider chính là nơi để cấu hình ứng dụng của bạn. Đây cũng chính là nơi khai báo các service provider sau này khi muốn viết một service provider. Hay sử dụng các package từ packagist bạn cũng thường phải khai báo thêm service provider mới tại đây.

Service Provider trong Laravel

Cùng quay lại một chút ở bài trước trong phần handle request. Đoạn này nằm xen kẽ giữa lúc Laravel nhận request và dispatch request lên router. Đây là nơi quá trình bootstrapping bắt đầu diễn ra.

$this->bootstrap();

public function bootstrap()
{
    if (! $this->app->hasBeenBootstrapped()) {
        $this->app->bootstrapWith($this->bootstrappers());
    }
}

Bạn có thể xem nó tại Illuminate\Foundation\Application.php Hàm này sẽ nạp các bootstrappers. Các bootstrappers ở đây được lấy từ trong hàm $this->bootstrappers(). Đó là những class sau:

protected $bootstrappers = [
    \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class, // nạp các biến môi trường
    \Illuminate\Foundation\Bootstrap\LoadConfiguration::class, // nạp các configuration file
    \Illuminate\Foundation\Bootstrap\HandleExceptions::class, // nạp các file cho việc xử lý exceptions
    \Illuminate\Foundation\Bootstrap\RegisterFacades::class, // đăng ký facade
    \Illuminate\Foundation\Bootstrap\RegisterProviders::class, // đăng ký các service provider
    \Illuminate\Foundation\Bootstrap\BootProviders::class, // boot
];

Mở file Illuminate\Foundation\Application.php và tìm đến hàm bootstrapWith ta sẽ thấy hàm này sẽ tạo ra các bootstrappers mà đã liệt kê bên trên, sau đó nạp các bootstrappers này vào trong application của bạn.

$this->make($bootstrapper)->bootstrap($this);

Giờ chúng ta sẽ tìm hiểu xem Laravel Service provider hoạt động như thế nào nhé. Chúng ta biết biết chắc chắn là trong mỗi bootstrapper này đều có một hàm bootstrap.

Ở đây chúng ta sẽ đi vào class \Illuminate\Foundation\Bootstrap\RegisterProviders::classđể xem Service Provider đã làm những gì cho application của chúng ta:

public function bootstrap(Application $app)
{
    $app->registerConfiguredProviders();
}

Ở đoạn xử lý đầu tiên, $providers của chúng ta sẽ trả về một kết quả đó là danh sách các provider nằm trong key 'providers' và bắt đầu bằng Illuminate\\ tại config/app.php.

$providers = Collection::make($this->config['app.providers'])
                ->partition(function ($provider) {
                    return Str::startsWith($provider, 'Illuminate\\');
                });

Ở đoạn xử lý thứ 2, Laravel sẽ gộp các providers có được tại hàm

$this->make(PackageManifest::class)->providers()

vào các providers đã lấy được ở trên. Chúng ta sẽ xem các providers trong cái hàm ở trên là những providers nào nhé. Illuminate\Foundation\PackageManifest.php:

public function providers()
{
    return collect($this->getManifest())->flatMap(function ($configuration) {
        return (array) ($configuration['providers'] ?? []);
    })->filter()->all();
}

Xem hàm getManifest

protected function getManifest()
{
    if (! is_null($this->manifest)) {
        return $this->manifest;
    }

    if (! file_exists($this->manifestPath)) {
        $this->build();
    }

    $this->files->get($this->manifestPath, true);

    return $this->manifest = file_exists($this->manifestPath) ?
        $this->files->getRequire($this->manifestPath) : [];
}

Nên nhớ ở trên chúng ta make một class PackageManifest và không truyền cho nó cái gì cả. Vậy thì constructor của nó cũn không có gì. Vậy là trong hàm getManifest(), property $this->manifest ở đây đang không có giá trị.

Khởi tạo một instance từ Laravel Application

Laravel khởi tạo một instance của PackageManifest.

$this->instance(PackageManifest::class, new PackageManifest(
    new Filesystem, $this->basePath(), $this->getCachedPackagesPath()
));

Trước hết hãy để ý một điều, Laravel sử dụng hàm này trước khi quá trình bootstrapping xuất hiện. Vậy lúc này trong class PackageManifest có gì ??

  Laravel 5.6 thêm Collision Package cho CLI Error Report

Chúng ta đang cần quan tâm đến hàm providers vậy nên ta cần biết tham số thứ 3 trong constructor, đó là $manifestPath là gì.
Tương ứng như chúng ta thấy, đó là:

$this->getCachedPackagesPath() // bootstrap/cache/packages.php

Giờ chúng ta hiểu, giá trị $this->manifestPath chính là chuỗi bootstrap/cache/packages.php, hãy cùng tiếp tục xem Service Provider đã làm gì tiếp theo.
Mở file bootstrap/cache/packages.php , chúng ta thấy 1 array chứa các cặp array khác có key là 'providers' và 'aliases'. Mà hàm providers của chúng ta lấy các key là 'providers'
Đến đây có thể hiểu rằng Laravel sẽ lấy tất cả các providers trong application của chúng ta bằng cách lấy các providers có tiền tố Illuminate\\ tại config/app.php và danh sách các providers tại caches/packages.php. Sau khi tập hợp tất cả các providers chúng ta sẽ quay lại hàm registerConfiguredProviders():

(new ProviderRepository($this, new Filesystem, $this->getCachedServicesPath()))
                    ->load($providers->collapse()->toArray());

Trong hàm này, tất cả các đăng ký các event khi load các provider, sau đó từng provider này sẽ được đăng ký bằng cách gọi đến hàm register trong class Application:

foreach ($manifest['when'] as $provider => $events) {
    $this->registerLoadEvents($provider, $events);
}

// We will go ahead and register all of the eagerly loaded providers with the
// application so their services can be registered with the application as
// a provided service. Then we will set the deferred service list on it.
foreach ($manifest['eager'] as $provider) {
    $this->app->register($provider);
}

Trong hàm register tại class Application, mỗi service provider sẽ được gọi đến method register của chính provider đó.

if (method_exists($provider, 'register')) {
    $provider->register();
}

Và nếu các bạn có để ý, trong các provider tại method register, chúng ta sẽ thường sử dụng việc binding tại hàm này, Tuy nhiên có một cách ngắn hơn đó là nếu provider của bạn đang có property là $bindings hoặc $singletons thì Laravel sẽ tự động binding theo cặp key, value này.

if (property_exists($provider, 'bindings')) {
    foreach ($provider->bindings as $key => $value) {
        $this->bind($key, $value);
    }
}

if (property_exists($provider, 'singletons')) {
    foreach ($provider->singletons as $key => $value) {
        $this->singleton($key, $value);
    }
}

// Ví dụ
public $bindings = [
   A::class => B::class,
];
 //=> $this->bind(A::class, B::class);
/**
* All of the container singletons that should be registered.
*
* @var array
*/
public $singletons = [
   A::class => B::class,
];
 //=> $this->singleton(A::class, B::class);

Đến đây, nếu application của bạn chưa nạp các provider thì nó sẽ nạp tất cả các provider đó. Nếu không, nó sẽ chỉ nạp các provider mới. Thay vì phải quay lại làm một công việc từ đầu, thì nó sẽ không làm lại nữa mà chỉ làm các công việc mới.

if ($this->booted) {
    $this->bootProvider($provider);
}

protected function bootProvider(ServiceProvider $provider)
{
    if (method_exists($provider, 'boot')) {
        return $this->call([$provider, 'boot']);
    }
}

Giải thích ngắn gọn dễ hiểu để bạn mường tượng hơn. Ví dụ chúng ta có sẵn một bộ máy tính để bàn bao gồm CPU, chuột, bàn phím…Bạn muốn gắn thêm màn hình hay thay một bàn phím cơ khác thì chỉ cần plug and play thôi. Không phải build lại cái máy tính từ đầu.

Với Laravel cũng vậy, sau khi kết thúc quá trình bootstrapping lần đầu tiên, các package/library hiện có đã có thể sử dụng.

Giả sử bạn muốn install thêm các package/library khác thì Laravel chỉ nạp lại những package mới này và đăng ký các provider tương ứng cho chúng vào application của bạn. Vậy là chúng ta sẽ hiểu việc đăng ký providers như sau:

$providers = Collection::make($this->config['app.providers'])
                ->partition(function ($provider) {
                    return Str::startsWith($provider, 'Illuminate\\');
                });
// lấy tất cả provider có tiền tố là Illuminate\\ từ config/app.php
$providers->splice(1, 0, [$this->make(PackageManifest::class)->providers()]);
// lấy tất cả các providers từ bootstrap/cache/packages.php rồi kết hợp với các providers ở trên.
// Lúc này trong application chúng ta đã có đc đầy đủ các providers rồi
(new ProviderRepository($this, new Filesystem, $this->getCachedServicesPath()))
            ->load($providers->collapse()->toArray());
// Các providers này sẽ được gọi tự động đăng kí (register), nạp vào application (boot)

Vậy nên chúng ta thường thấy các provider sẽ có các phương thức như boot hay register mà không phải các phương thức khác, tất cả là do Laravel đã thiết kế nên như vậy. Đã bao giờ các bạn sử dụng command để thêm các package/library ngoài vào, sau đó thêm các provider của nó vào trong config/app.php chưa?

Thường thì chúng ta chỉ cần import nó vào và sử dụng mà không cần biết rằng tại sao nó lại vận hành được. Thật ra thì vấn đề này Laravel đã giúp chúng ta làm tất cả rồi.

Tổng kết

Service Provider là một khái niệm khá trừu tượng, và là thành phần quan trọng nhất trong quá trình handle một request trong Laravel. Hiểu một cách tổng quan là trong quá trình bootstrapping application thì Service Provider chính là phần quan trọng nhất.

  Tìm hiểu SQL Transaction và cách sử dụng trong Laravel
  Nhận diện khuôn mặt trong ứng dụng Laravel sử dụng Google Cloud Vision API

Tham khảo thêm việc làm Laravel lương cao hấp dẫn tại đây

Làm sao để trở thành Product Manager

Làm sao để trở thành Product Manager

Trong thế giới IT, sự khác biệt giữa các vị trí rất rõ ràng. Là một coder hay Product Manager (PM) bạn đều cần có những kỹ năng và kiến thức đặc biệt. Chỉ có những coder, với kinh nghiệm cùng kỹ năng tốt mới có thể trở thành Product Manager.

Sau đây là những chia sẻ trên Quora từ anh Kevin – founder của AltSchool và hiện đang làm việc tại quỹ đầu tư mạo hiểm FundersClub.

Các yếu tố một Product Manager cần có.

1. Hiểu sản phẩm và thị trường 

Hiểu rõ sản phẩm và thị trường là một yếu tố quan trọng của Product Manager. Khi đã trở thành một Product Manager, bạn nhất thiết phải hiểu sản phẩm đó một cách rất chi tiết. Tuy vậy, chỉ đơn thuần hiểu sản phẩm là không đủ. Là một Product Manager, bạn nhất thiết phải hiểu thị trường tiềm năng, hiểu rõ tâm lý khách hàng hiện tại, và cả nhóm khách hàng bạn muốn hướng đến.

Không chỉ thế Product Manager còn cần phải biết mục tiêu mà sản phẩm hướng đến, thậm chí cả sản phẩm của công ty đối thủ. Ví dụ như, nếu bạn đang là Product Manager phụ trách tính năng hình của Facebook, bạn nên nghiên cứu sản phẩm của Picasa, Instagram vì nó ảnh hưởng trực tiếp đến “miếng cơm manh áo” của bạn.

2. Đứng trên góc nhìn của người dùng cuối (End-user)

Là một Product Manager, bạn cũng kiêm luôn vai trò “phát ngôn viên” của người dùng cuối (end-user). Trong bất kì lĩnh vực nào Product Manager đều luôn phải chú trọng đến việc quan tâm và thấu hiểu những vấn đề của khách hàng. Một sản phẩm tốt luôn giải quyết được vấn đề của khách hàng.

Chúng ta có thể lấy ví dụ đơn giản sau, giả sử như có một người là khách hàng “thường trực” trên trang Amazon, đã thực hiện rất nhiều đơn hàng và cảm thấy ngán ngẩm với việc phải nhập đi nhập lại thông tin của mình mỗi lần đặt hàng.

Nếu là một Product Manager biết lắng nghe và nói lên “tiếng nói” của khách hàng, người Product Manager này sẽ thúc giục đội ngũ của mình thêm chức năng tự động lưu địa chỉ, thông tin thanh toán. Nhờ thế, người khách hàng chỉ cần “one click” và anh ta lại có thể tiếp tục đặt hàng, giúp tăng trải nghiệm người dùng (UX) theo chiều hướng tích cực.

Tham khảo thêm các vị trí tuyển dụng product manager lương cao tại TopDev

3. Tập trung vào trải nghiệm người dùng (UX) và giao diện người dùng (UI)

Lại là chuyện UX và UI, tưởng là chuyện nhỏ nhưng lại rất quan trọng, chỉ đơn thuần giải quyết vấn đề của khách hàng vẫn còn chưa đủ. Sản phẩm phải có một UI cực kì đơn giản và dễ dùng. UX cũng phải được đảm bảo.

Một ví dụ kinh điển nhất đó chính là Facebook. Facebook không phải là người đi đầu trong “sân chơi” mạng xã hội. Có rất nhiều sản phẩm lúc bây giờ như Mýpace, Hi5 tuy nhiên Facebook có những tính năng tuyệt hơn, tốc độ tải tốt hơn và UX mượt mà cùng UI tối giản. Cuối cùng phần thắng thuộc về ai, bạn hẳn đã rõ.

4. Luôn đảm bảo sản phẩm của bạn được xây dựng dựa trên “sự thật”

Khi trở thành một Product Manager, nếu bạn muốn thêm một tính năng vào sản phẩm, bạn cần phải chắc chắn về độ cần thiết của nó thông qua dữ liệu được trả về từ người dùng và nhiều yếu tố khác.

Giả như có một tính năng, trên lý thuyết rất hữu ích, nhưng khách hàng vẫn không sử dụng. Do đó, bạn muốn tìm ra cách làm cho tính năng ấy “nổi bật” và được khách hàng chú ý hơn. Lúc này, bạn cần thay đổi nhiều kiểu thiết kế (cả UI và UX) khác nhau cho tính năng đó và thu thập dữ liệu nhằm phân tích để có thể kết luận đâu là thiết kế tốt nhất giúp sản phẩm dễ dàng tiếp cận người dùng nhất. Đừng chỉ tạo ra một phiên bản chỉ dựa trên đoán mò.

5. Chủ động hợp tác cùng đội ngũ của bạn

Ngoài hợp tác với khách hàng, Product Manager còn phải chủ động hỗ trợ đội ngũ của mình bao gồm các đơn vị như Sales, Marketing và IT. Ngoài ra, bạn cũng phải hợp tác với các Project Managers, Business Analysts và Developers.

Tất cả điều này cực kì quan trọng bởi họ là người dựng nên sản phẩm của bạn, họ phải hiểu rõ mục tiêu và tầm nhìn của sản phẩm. Một Product Manager tốt luôn có một tầm nhìn tốt cho sản phẩm và biết mình sắp phải lèo lái sản phẩm theo hướng nào. Nếu Product Manager không thực hiện tốt tất cả điều này, sản phẩm sẽ trở nên “lạ hoắc” và khác hoàn toàn so với dự định ban đầu.

Một Product Manager tốt luôn biết sản phẩm cần có những gì trong suốt SDLC (Software Development Lifecycle – Quy trình phát triển phần mềm). Product Manager còn cần phải tham gia tất cả cuộc họp hằng ngày, cùng phân tích vấn đề với toàn đội ngũ để đưa sản phẩm tới đợt giới thiệu sản phẩm thành công (Launch).

Xem product owner tuyển dụng đãi ngộ tốt trên TopDev

6. Nhạy cảm với thay đổi

Nhạy cảm với thay đổi và nắm kịp xu thế của thị trường là một tốt chất quan trọng mọi Product Manager cần có. Giả như bạn là Product Manager của Yammer, bạn phải nắm rõ kế hoạch bắt đầu phát triển vào thị trường mạng xã hội cho doanh nghiệp của Facebook, liệu có nguy cơ gì từ động thái này.

Luôn cập nhật tin tức mới nhất để sản phẩm của bạn không bị bỏ lại trong cuộc đua công nghệ là điều rất quan trọng.

7. Đừng ngại thay đổi và cải tiến

10 năm trước không ai ngờ Nokia, Kodak và MySpace, những ông lớn công nghệ như vậy lại có thể trở thành “kỉ niệm đáng buồn”.

Nếu bạn ngại ngần thay đổi sản phẩm và không cải tiến sản phẩm, bạn đang làm cho chính mình lỗi thời khi đối thủ của bạn làm điều đó. Chỉ cần nghĩ về sự phát triển nhanh đến “choáng ngợp” của điện thoại, chụp ảnh và mạng xã hội trong 5 năm qua, bạn sẽ hiểu rõ điều đó. Đừng bao giờ “ngủ quên trên chiến thắng”.

8. Kinh nghiệm

Qua chia sẻ của anh Kevin Lee, chúng ta đã biết được một số tố chất cần thiết để trở thành một Product Manager. Tuy nhiên, thực tế lại “lắm chông gai” hơn nhiều. Công việc thực tế cần kinh nghiệm, cũng như am hiểu về thị trường. Bạn có thể tìm những điều đó tại những workshop chia sẻ kinh nghiệm để có thể học trực tiếp từ những người đi trước.

  Product Manager được sinh ra để làm gì?
  Con đường trở thành Product Manager từ lập trình viên tại Amazon
  Kinh nghiệm khi đưa ra 1 quyết định về Product tồi

Xem thêm các tin tuyển dụng lập trình viên lương cao trên TopDev

So sánh tốc độ List collection và HashSet collection trong C#

Người viết: Tùng NT

Mở đầu

Lâu nay khi lập trình chúng ta chủ yếu sử dụng kiểu dữ liệu List để thao tác với các collection, mặc dù đây không phải là kiểu collection duy nhất trong .NET nhưng các lập trình viên đã quá quen thuộc với việc sử dụng kiểu List nên thói quen này không phải dễ thay đổi.

Trong bài viết này chúng ta sẽ cùng so sánh tốc độ của kiểu List và HashSet (một kiểu collection xuất hiện bắt đầu từ .NET 3.5) để biết được khi nào thì nên sử dụng List và khi nào thì nên dùng kiểu HashSet.

ListToSet

Kiểu List<T>

Kiểu List<T> chứa một danh sách item, truy cập qua chỉ số. Không giống như kiểu mảng là một kiểu cố định kích thước, list tự động tăng kích thước khi cần. Đây chính là lý do tại sao List đôi khi còn được gọi là kiểu mảng động.

Cấu trúc bên trong của List thực chất là một mảng, nếu mảng này hết chỗ nó sẽ tạo ra một mảng mới lớn hơn và copy toàn bộ item từ mảng cũ sang mảng mới. Ngày nay thì chúng ta thấy hầu hết lập trình viên đều dùng kiểu List thay vì kiểu mảng. Tuy nhiên trong một số trường hợp nếu item là cố định thì bạn nên dùng kiểu mảng để có performance tốt hơn.

Một số phép toán trên kiểu List

Thêm/Xóa phần tử ở đầu hoặc giữa List

Nếu bạn cần thêm/xóa một phần tử ở đầu hoặc giữa List thì nó sẽ cần dịch chuyển một hoặc nhiều item. Trường hợp xấu nhất, nếu bạn thêm/xóa một phần tử ở đầu List nó sẽ phải dịch tất cả item còn lại trong List. Nếu List càng lớn thì sẽ càng mất thời gian và resource để thực hiện.

Thêm/Xóa phần tử ở cuối List

Thêm/Xóa một phần tử ở cuối List ngược lại rất nhanh và không phụ thuộc vào kích thước của List vì không item nào cần phải dịch chuyển.

Tìm kiếm một phần tử

Khi tìm kiếm một phần tử bằng một số hàm như IndexOf, Contains, Find thì kiểu List sẽ thực hiện duyệt qua tất cả các item để tìm ra phần tử đó. Trong trường hợp xấu nhất, nếu phần tử nằm ở cuối List thì tất cả các item cần được duyệt qua.

Truy cập một phần tử bởi chỉ số

Là phép toán thực hiện rất nhanh vì bản chất bên trong List là một mảng. Tốc độ truy cập không bị ảnh hưởng bởi độ lớn của List.

>>> Xem thêm: Cấu trúc dữ liệu List và Tuple trong Python

Kiểu HashSet<T>

HashSet là kiểu xuất hiện từ .NET 3.5, nó chứa các item duy nhất, nghĩa là nó không thể chứa các item trùng lặp và thứ tự của item cũng không quan trọng. VD: {a,b,c} tương đương {c,b,a}

Sử dụng HashSet khi bạn cần tìm kiếm nhanh trên một tập các item không lặp. VD trong bài toán thực tế mình đang phải làm là kiểm tra một danh sách Order có nằm trong một danh sách Order khác không?

Kiểu HashSet dựa trên hàm hash để tính toán ra chỉ số của item vì vậy phép tìm kiếm có tốc độ rất nhanh. Dưới đây là một số phép toán trên kiểu HashSet

So sánh tốc độ List<T> và HashSet<T>

Mặc dù trong các tài liệu đều chỉ ra kiểu HashSet nhanh hơn List nhưng thực tế có phải luôn luôn như vậy? Chúng ta sẽ cùng kiểm nghiệm qua một ví dụ benchmark đơn giản: Kiểm tra một danh sách có nằm trong một danh sách khác hay không:

Kết quả thực hiện cho thấy sự khác nhau rõ rệt về performance:

  • 50 item List.Contains mất 0.000018s, HashSet.Contains mất 0.000023s
  • 50000 item List.Contains mất 9.38s, HashSet.Contains mất 0.002s

BenchmarkResult

Từ kết quả trên có thể thấy rằng không phải lúc nào performance của HashSet cũng nhanh hơn List. Với số lượng item nhỏ (<50 item) thì tốc độ của List còn nhanh hơn so với HashSet nhưng khi số lượng item lớn thì lúc đó HashSet mới phát huy tác dụng, tốc độ của HashSet rất nhanh và không phụ thuộc vào số lượng item.

Kết luận

Kiểu List tương đối nhanh khi bạn truy cập item bằng index nhưng khi tìm kiếm một item trong List lớn (50 item trở lên) thì nó sẽ chậm dần. Ngược lại kiểu HashSet lại rất nhanh khi tìm kiếm trên một tập item lớn. Vì vậy mà tùy từng trường hợp cụ thể bạn cần lựa chọn kiểu collection cho phù hợp với bài toán của mình.

Tham khảo thêm các vị trí tuyển dụng C# lương cao tại Topdev.

Source code example các bạn có thể download tại đây: ListAndHashSetBenchmark

TopDev via Tungnt.net

  Bộ tài liệu tự học lập trình C/C++ tiếng Việt hay nhất
  Kiến thức C cho người mới và cách tự học lập trình C

Lấy email từ bình luận của bài viết trong Facebook

Tác giả: Võ Duy Tuấn

Chào các bạn, số là hôm nay bữa giờ trong cái group Launch trên facebook có thấy 1 bài có 1 member tặng phần mềm email marketing (miễn phí) cho các bạn bình luận. Có đến gần 500 comment chứa nội dung email nên thiết nghĩ đây là 1 kho báu cho những ai đang làm các tool email marketing, còn gì tuyệt vời hơn khi có gần 500 email khách hàng cực kỳ tiềm năng và sẵn sàng sử dụng. Mình nghĩ cũng có nhiều người như mình nhưng phải ngồi copy từng email ra thì thiệt là khổ, nay chia sẻ mọi người cách nhanh nhất (3 phút) để “copy” toàn bộ các email này.

Bước 1: Nhấn xem tất cả bình luận.

Để đảm bảo nội dung không bị nhiễu, bước đầu tiên là bạn cần xem bài post ở chế độ xem 1 bài mà thôi, nhấn vào cái thời gian bên dưới tên người gửi sẽ tới trang chi tiết của bài. Tiếp theo, đây là bước trâu bò và không cần kỹ thuật cao siêu, cứ nhấn nút xem bình luận trước để hiện hết tất cả bình luận. Sau khi click đã đời thì trên web đã hiển tất cả bình luận.

Bước 2: Copy nội dung “thô”.

Trong trình duyệt, chọn tất cả nội dung (Ctrl+A) hoặc trên menu “Edit \ Select All”, sau đó copy vào paste vào một trình soạn thảo text nào đó mạnh mạnh xíu. Tại sao mạnh, bởi vì cần dùng trình duyệt nào có hỗ trợ chế độ tìm theo Regular Expression, đây là chế độ giúp mình tìm kiếm nhanh chóng các địa chỉ email và copy ra. Ở đây mình dùng Sublime Text (trên Mac).

Bước 3: Tách email

Đến đây, bạn đã có được nội dung thô và đang nằm trong text editor của bạn, chỉ cần bật chế độ tìm kiếm theo Regular Expression (có thể search google cách bật chế độ tìm này trong text editor vì mặc định nó tắt). Nhập nội dung tìm kiếm sau:

\w+\@\w+\.\w+

” và nhấn tìm tất cả. Khi nhấn tìm tất cả thì tất cả email sẽ được highlight. Sublime Text có hỗ trợ multiselect nên sau khi highlight toàn bộ email, chỉ cần copy (Ctrl+c) và mở 1 file khác paste vào. Voila! Đã có danh sách email khách hàng tiềm năng.

Như vậy, với 1 vài thao tác là bạn đã có 1 tập khách hàng tiềm năng. Dạng bài viết kêu gọi bình luận email, số điện thoại (sẽ dùng 1 chuỗi regular expression khác) rất nhiều, nếu biết tận dụng thì đây là một nguồn lead rất tốt. Là một người làm biếng, mình thích những kỹ thuật trích xuất hàng loạt và có thể lập lại được, như vậy sẽ tiết kiệm được rất nhiều thời gian. Nếu có thời gian thì có thể sẽ viết 1 chrome extension để tự động hóa hơn xíu, chỉ cần 5s chẳng hạn.

Chúc các bạn một ngày “copy” hiệu quả và nhớ có spam thì đừng đổ thừa Tuấn.

TopDev via bloghoctap.com

  Làm sao để tránh Async/Await Hell?
  1 ngày "thâm nhập" đại bản doanh Facebook, giờ tôi mới hiểu tại sao ai cũng muốn vào đây làm việc

Tất tần tật các Frontend cheatsheets tốt nhất

frontend cheatsheets

Làm sao có thể nhớ hết được các APIs? Đừng lo vì đã có cheatsheets! Dưới đây là tập hợp các frontend cheatsheets hay nhất mà tôi tập hợp được.

  1. Javascript ES2015 features
  2. Javascript
  3. Javascript Regular expression
  4. React
  5. Redux
  6. Vuejs
  7. Vuex
  8. Angular 4
  9. Flexbox
  10. SCSS
  11. Stylus
  12. GraphQL
  Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 1)
  Roadmap Frontend Developer - "Con đường tắt" để trở thành cao thủ Frontend Developer

Ứng tuyển ngay các vị trí tuyển dụng Frontend trên TopDev

Instagram ra mắt tính năng Checkout khiến shopping dễ dàng hơn bao giờ hết

  10 PHP Instagram Scripts & Widgets tốt nhất
  Những người đã bỏ lỡ cả tỷ USD chỉ vì từ chối làm việc cho các “ông lớn công nghệ” như Facebook, Instagram... khi mới bắt đầu

Tính năng mua sắm mới của Instagram ‘Checkout’ cho phép người dùng mua hàng trong ứng dụng.

Instagram đã tiết lộ “Checkout”, một tính năng mới cho phép người dùng thực hiện mua hàng bên trong ứng dụng mà không phải chịu sự phiền hà nào.

Tính năng “Checkout” mang chuẩn thương mại điện tử: 20 brands đã tham gia vào buổi giới thiệu bao gồm Nike, Dior, Warby Parker, Zara,… tính năng cho phép người dùng không chỉ xem các quảng cáo mà còn có thể chi tiền để mua ngày trong chính quảng cáo. Thông tin thanh toán được lưu trữ trong Instagram và người dùng cung cấp địa chỉ email để nhà bán lẻ có thể hoàn tất giao dịch. Nhà bán lẻ sẽ cắt phần trăm hoa hồng cho Instagram theo doanh thu bán hàng, theo báo cáo từ TechCrunch.

Instagram

Mặc dù dự án có thể trông giống như một bản cập nhật thông thường, chỉ mang lại sự tiện lợi hơn cho người dùng và sự nổi bật cho các brands, nhưng đó là đỉnh cao của sự cố gắng từ Facebook để không chỉ thu hút mà còn chuyển sự chú ý của bạn thành tiền. Với sự phát triển quảng cáo của Facebook đang chững lại sau vụ bê bối về quyền riêng tư làm mất danh tiếng với công chúng, công ty sẽ tìm cách khai thác sự chú ý của 130 triệu người dùng đã sử dụng các sản phẩm trên Instagram mỗi tháng.

Trong nhiều năm qua, giám đốc Facebook Mark Zuckerberg đã không giấu giếm tham vọng của mình bằng việc di chuyển mọi thứ trên internet vào bên trong khu vườn có bức tường Facebook bao quanh, bằng quyền lực nếu cần thiết. Khi có thể, Facebook sẽ mua các đối thủ của mình (như Whatsapp và Instagram). Hầu hết các sản phẩm được Facebook tiết lộ khá rõ ràng về các dịch vụ tồn tại bên ngoài: Facebook Marketplace cho Craigslist, Facebook Stories cho Snapchat, Facebook Instant Article cho Google News, v.v.

Giờ đây, với Checkout, Facebook có thể sử dụng Instagram để làm mũi tên cảnh cáo với Amazon hoặc ít nhất là cố gắng tự mình lấy một miếng bánh trong thị trường.

TopDev via Popularmechanics

Đừng bỏ lỡ những xu hướng shopping cũng như thanh toán mới nhất qua sự kiện Vietnam Mobile Day 2019 do TopDev tổ chức.

JVM là gì? Định nghĩa JVM

jvm-la-gi

JVM là gì?

JVM (Java Virtual Machine) là 1 máy ảo java – nó được dùng để thực thi các chương trình Java hay hiểu nôm na là trình thông dịch của Java. Nó cung cấp môi trường để code java có thể được thực thi. Chương trình Java khi biên dịch sẽ tạo ra các mã máy gọi là bytecodes. Như bạn thấy mỗi hệ điều hành chạy chương trình của nó ứng với một mã máy khác nhau đó là mã bytecodes, ví dụ Windows được biên dịch dưới dạng exe còn Linux là .ELF…

Định nghĩa JVM

Tóm gọn lại là mỗi nền tảng/hệ điều hành khác nhau (Windows, Android, Linux…) lại có một loại JVM khác nhau được cài đặt. Nói Java đa nền tảng, thực chất thì nó được hỗ trợ JVM trên nhiều nền tảng. Chương trình Java chạy được trên Window/Linux/IOS vì nó có JVM chạy được trên các nền tảng đó, vì vậy mới hiểu ý nghĩa là lập trình Java một nơi nhưng chạy được nhiều chỗ là do JVM này thực hiện.

Các bạn có thể tham khảo cơ chế thực hiện 1 chương trình Java trong sơ đồ dưới đây :

JVM là gì? Định nghĩa JVM

Máy ảo java được sinh ra với 3 mục đích chính

  • Dịch mã java ra mã máy chạy được trên các hệ điều hành khác nhau
  • Tăng tốc độ
  • Nâng cao độ bảo mật và tránh virus phá source code

JVM thực hiện các công việc chính sau đây

  • Tải code (các class, resource)
  • Kiểm tra code (kiểm tra code có đúng cú pháp không, có bị lỗi không, tất nhiên nếu code có lỗi thì sẽ không chạy được chương trình rồi)
  • Thực thi code
  • Cung cấp môi trường runtime

JVM có 3 thành phần chính

  • Class Loader: Tìm kiếm và load các file *.class vào vùng nhớ của java dưới dạng bytecode
  • Data Area : vùng nhớ hệ thống cấp phát cho Java Virtual Machine
  • Execution Engine: chuyển các lệnh của JVM trong file *.class thành các lệnh của máy, hệ điều hành tương ứng và thực thi chúng.

Cơ chế thực hiện

Sau khi Classloader tìm và load các file .class, các file này sẽ được máy ảo JVM cung cấp bộ nhớ tương ứng với chúng.

  • Class (Method) area: là vùng nhớ cấp phát cho class(Method) trong đó lại phân chia thành heap, stack, PC register, native method stack
  • Heap: Đây là khu vực dữ liệu thời gian chạy trong đó các đối tượng được phân bổ.
  • Stack : Các phương thức và tham chiếu tới đối tượng địa phương được lưu trữ trong Stack. Mỗi Thread quản lý một stack. Khi phương thức được gọi, nó được đưa vào đỉnh của Stack. Stack lưu trữ trạng thái của phương thức bao gồm: dòng code thực thi, tham chiếu tới đối tượng địa phương. Khi phương thức chạy xong, vùng nhớ (dòng code thực thi, tham chiếu tới đối tượng địa phương) được đẩy ra khỏi stack và tự động giải phóng.
  • PC register (Program Counter Register) : Nó chứa địa chỉ của các máy ảo Java hướng dẫn hiện đang được thực hiện.
  • Native Method Stack: Nơi chứa tất cả các method native trong chương trình
  • Execution Engine: Nó bao gồm: Một bộ xử lý ảo, một phiên dịch để đọc dòng bytecode sau đó thực hiện các hướng dẫn và cuối cùng là trình biên dịch Just-In-Time (JIT). JIT biên dịch các phần của mã byte có chức năng tương tự như cùng một lúc, và do đó làm giảm số lượng thời gian cần thiết cho compilation.*Thuật ngữ: trình biên dịch là đề cập đến như một dịch giả từ những hướng dẫn của một máy ảo Java (JVM) cho các tập lệnh của CPU cụ thể.

Tài liệu tham khảo thêm:

9 xu hướng font chữ on-trend năm 2022

Xu hướng font chữ đẹp cho năm 2022 là gì? Sử dụng những font chữ đẹp mắt luôn là một trong những cách truyền tải thông điệp với khách hàng hữu dụng nhất trong thiết kế. Đó chính là lý do vì sao việc cập nhật những xu thế về typography là cực kỳ quan trọng với mỗi designer.

Những font chữ sáng tạo không chỉ đơn giản diễn đạt lại thông tin thông qua những ký tự chữ cái, nó còn đem lại người xem những ấn tượng về thị giác, và khơi dậy nhiều cảm xúc. Font chữ có thể diễn tả sự vui hay sự sợ hãi, sự ồn ào hay tĩnh lặng đến lạ kỳ. Những hỷ nộ ái ố chưa bao giờ rõ đến vậy qua những con chữ.

1. Font chữ Bold lớn và đậm

Trong năm 2022, xu hướng sử dụng những font chữ cực lớn, đậm và tạo cảm giác “ồn ào” sẽ tiếp tục trở nên phổ biến trong giới thiết kế. Những font chữ này chủ yếu được sử dụng như một thành tố chính, nổi bật trong thiết kế. Nếu bạn muốn người xem nhìn vào thiết kế, và hét thật to câu khẩu hiệu của bạn? Các font đậm này sẽ là lựa chọn số một dành cho bạn.

font chữ

Font đậm khiến nội dung đó đập ngay vào mắt người nhìn, ở bất kỳ đâu bạn đặt vào. Poster hay từ rơi chắc chắn sẽ nổi bật từ xa, nhờ những font chữ này. Muốn Website của bạn trở nên “cá tính” hơn, thân thiện hơn? Hãy sử dụng những phông chữ lớn này.

2. Font chữ Sans Serif – không chân tối giản

Chia tay với font chữ đậm lớn ở phần 1, chúng ta cùng chào đón font không chân tối giản, một “gã” hoàn toàn đối lập với anh bạn ồn ào nhà bên. Với xu hướng tối giản hóa trong thiết kế, font chữ Sans Serif, hay còn biết tới là font không chân chắc chắn là người bạn đồng hành không thể thiếu cho những nhà thiết kế theo trường phái tôn thờ sự đơn giản.

font chữ

Nhờ vào sự tối giản, những phông chữ này có thể dễ dàng thích ứng với nhiều trường hợp khác nhau. Nó cũng không yêu cầu quá nhiều yếu tố trực quan. Khi được sử dụng một cách hợp lý, các font chữ này chắc chắn sẽ đem lại hiệu quả vô cùng lớn.

Những phông không chân tối giản khơi gợi cho người đọc cảm xúc nhẹ nhàng, thư thả, trầm lắng mà cũng vô cùng điềm tĩnh. Thay vì phải hét lên với câu khẩu hiệu lớn, bạn hãy cho người xem “một chút bình yên, một chút sâu lắng”. Hãy để không gian lắng đọng cùng những font chữ này.

  Cơ chế phối màu trong UX/UI (Phần 1)
  Font chữ cho Lập Trình Viên Và xu hướng ligature trong code font

3. Font chữ Vintage

Càng hướng về tương lai, con người ta lại có xu hướng nuối tiếc, hoài niệm những ký ức đã qua. Trend vintage đang thống trị trong thế giới thiết kế, từ thời trang, nội thất đến thiết kế đồ họa. Sẽ chẳng ngạc nhiên gì khi trong năm 2022, chúng ta đón nhận rất nhiều những font chữ được thiết kế ra để bắt kịp trào lưu Vintage này.

font chữ

Bạn có thể sử dụng những font chữ vintage này để tạo logo hay cho các sản phẩm bao bì, những thứ đòi hỏi sự trang nhã và lịch sự, nghiêm túc. Bạn còn có thể sử dụng các font chữ đậm, mang hơi hướng phức tạp mà hoài cổ. Với những ai muốn níu giữ một chút kỷ niệm trong một thế giới hiện đại bộn bề, phong cách vintage chắc chắn sinh ra là để dành cho bạn.

4. Font chữ viết tay

Các font chữ mang hơi hướng viết tay chưa bao giờ tỏ ra hết thời. Nó là sự tổng hòa giữa tính lưu loát của nét chữ viết tay, với sự trang nhã, thanh lịch của những ký tự thư pháp.

font chữ

Trong năm 2022, các phông viết tay (dạng script) đã phát triển và biến hóa rất nhiều với đa dạng những hình thù, phong cách khác nhau. Chúng có thể tinh nghịch, cổ điển, hay nghiêm túc, đơn giản hoặc phức tạp. Với font chữ viết tay, bất kỳ kiểu dáng nào cũng có. Bạn sẽ phải choáng ngợp trước những gì phông chữ này mang lại đến sản phẩm của mình.

5. Font chữ outline

Một khi bạn đang bí ý tưởng về font chữ tiêu đề, hay muốn tìm kiếm một phông chữ thể hiện sự trưởng thành và sang trọng, các outline font (phông chữ viền, có hình bao) là lựa chọn dành cho bạn.

font chữ

 

Năm 2022 tới, font chữ này “xâm lấn” khắp mọi nơi, trong mọi sản phẩm thiết kế. Tính hiện đại, nghiêm túc khiến font chữ này được dùng để diễn đạt sự trưởng thành và thành đạt. Có rất nhiều kiểu cách được thiết kế cho font chữ outline này, từ lớn tới nhỏ, đậm tới nhạt, nghiêng, handmade, sharp, và nhiều hơn nữa.

6. Font chữ Serif – có chân có độ tương phản cao

Có một font chữ, mà nó là sự kết hợp của sự nổi bật, thu hút mọi ánh nhìn, với tính trang nhã, lịch thiệp. Đó chính là những phông có chân có độ tương phản cao (high-contrast serif font). Trong năm 2022, nó thực sự là một cơn sốt và có mặt ở khắp mọi nơi.

font chữ

Sự tương phản ở đây đến từ khía cạnh về chiều rộng: Một phần các ký tự có xu hướng mỏng hơn so với phần còn lại. Hai phần có sự tương phản cực lớn, tạo sự khác biệt rõ nét, đồng thời làm nổi bật lẫn nhau.

Chính sự tương phản này tạo nên những thiết kế chữ cực đậm, mà sang trọng. Sử dụng phong cách typography này, bản thiết kế của bạn sẽ được nâng lên một tầm cao mới.

7. Quirky fonts – đáng yêu, vui tươi

Một thiết kế mang đầy nét tinh nghịch và đáng yêu trong năm 2022, đó chính là những quirky fonts (thường là những font được thiết kế không theo nhiều khuôn mẫu, mang tính ngẫu hứng và thể hiện tính tươi vui, tinh nghịch). Chúng vừa có nét “vụng về”, lại vô cùng đáng yêu và dễ mến. Quirky font mang tới cho người xem cảm giác bất ngờ, vui vẻ bởi sự thoải mái và tự nhiên mà nó đem lại.

font chữ

Xu hướng font chữ Quirky thích hợp với những nội dung nhẹ nhàng, hài hước, mang ý nghĩa khích lệ, đủ để làm người xem nở 1 nụ cười trên môi. Những ấn phẩm thiết kế sử dụng Quirky font thường đem lại cho người xem một trải nghiệm tươi mới và lạc quan.

8. Messy fonts – Lộn xộn, cá tính

Xu hướng font chữ Messy (Những font mang tính lộn xộn, xù xì có thể coi là “trai hư” trong họ nhà Typography) là một trường hợp đặc biệt trong Typography. Vậy mà đến năm 2022, nó lại trở thành xu hướng được vạn người mê. Vẻ đẹp của nó thật đặc biệt: Đó là sự phá cách, bỏ mọi quy tắc về cái đẹp mà bạn từng biết.

font chữ

9. Hand-lettering font độc đáo

Hand-lettering là một biến thể trong các font chữ viết tay. Nó được sinh ra dựa trên những nét bút lên xuống đậm nhạt của bút lông kim. Hand-lettering mang những quy tắc hoàn toàn khác biệt so với những Typography thông thường. Năm 2022, những thiết kế độc lạ và cá tính nổi bật lên như một xu thế mới. Chính vì thế, hand-lettering là “nhân vật cuối” chốt lại bảng danh sách top 9 những xu hướng font chữ hot nhất năm 2022.

font chữ

Hand-lettering rất đa dạng, nó có nhiều hình dáng, kích thước và phong cách khác nhau, Nhưng quan trọng hơn cả, chúng đem lại cho bạn cảm giác độc nhất, là thứ duy nhất mà bạn có thể lồng ghép những tính cách của riêng bạn vào trong thương hiệu và các sản phẩm thiết kế.

2022: “Mọi thứ đều có thể xảy ra”

Sự sáng tạo của các nhà thiết kế lại được đẩy tới ranh giới mới. Chúng ta sáng tạo và tái sáng tạo! Ở 2022, mọi thứ đều có thể xảy ra. Với những font chữ lớn, cho tới những font bổ trợ, từ mang đậm tính truyền thống, cho tới những font “kỹ thuật số 4.0.”, từ trang nhã đến lộn xộn mà quyến rũ. Tất cả nằm trong một tổng thể thống nhất. Trước sự đa dạng đến không ngờ, quyền lựa chọn là của bạn.

TopDev Blog via uplevo.com

Tìm việc làm IT tại Topdev

Ngoài ra, các Designer và Developer đừng bỏ lỡ cơ hội tìm hiểu thêm về các các xu hướng thu hút người dùng qua sự kiện Vietnam Mobile Day do TopDev tổ chức.

Fresher là gì? Các kỹ năng và công việc của Fresher

fresher-la-gi

Fresher là title quen thuộc thường được dùng nhiều trong ngành công nghệ thông tin (IT). Bài viết này sẽ giúp các Developer đặc biệt là các bạn sinh viên sắp ra trường hiểu rõ fresher là gì, công việc của fresher có khác gì intern không? Cần có các kỹ năng gì để trở thành fresher. Tìm hiểu ngay!

Fresher là gì?

Fresher là những sinh viên mới ra trường, là nhân viên mới vào nghề, chưa có kinh nghiệm, mới chỉ đang bắt đầu làm quen với công việc. Tuy nhiên fresher là những người đã trang bị đầy đủ kiến thức căn bản cần có. Và cần một môi trường để thực hiện, triển khai, học hỏi và phát triển lên các kỹ năng chính và kỹ năng mềm.

Công việc của Fresher

Công việc của một fresher thường liên quan đến việc học hỏi, làm quen với môi trường làm việc và áp dụng các kiến thức đã học vào thực tế. Dưới đây là một số nhiệm vụ chính mà fresher có thể đảm nhận:

1. Học hỏi và làm quen với môi trường làm việc

  • Đào tạo: Tham gia các khóa đào tạo nội bộ của công ty để hiểu rõ hơn về quy trình làm việc, công nghệ và công cụ mà công ty sử dụng.
  • Quan sát và học hỏi từ đồng nghiệp: Tham gia vào các cuộc họp, thảo luận và các dự án nhỏ dưới sự hướng dẫn của các nhân viên có kinh nghiệm.

2. Thực hiện các nhiệm vụ cơ bản

  • Hỗ trợ dự án: Tham gia vào các dự án thực tế dưới sự giám sát của các quản lý hoặc nhân viên cấp cao, thực hiện các công việc cơ bản như viết mã, kiểm tra phần mềm, thu thập dữ liệu, v.v.
  • Viết báo cáo và tài liệu: Ghi chép lại các quy trình, kết quả làm việc và tạo tài liệu hướng dẫn.

3. Nâng cao kỹ năng chuyên môn

  • Thực hành kỹ năng: Áp dụng các kiến thức đã học vào công việc thực tế, từ đó rèn luyện và nâng cao kỹ năng chuyên môn.
  • Học thêm kỹ năng mới: Tìm hiểu và học hỏi các công nghệ, công cụ và phương pháp mới để cải thiện hiệu suất công việc.

4. Giao tiếp và làm việc nhóm

  • Giao tiếp với đồng nghiệp: Tương tác với các thành viên trong nhóm, học cách giao tiếp hiệu quả và xây dựng mối quan hệ làm việc tốt.
  • Tham gia các cuộc họp nhóm: Đóng góp ý kiến và ý tưởng trong các cuộc họp, giúp cải thiện quy trình làm việc và chất lượng sản phẩm.

5. Đáp ứng yêu cầu công việc

  • Hoàn thành nhiệm vụ đúng hạn: Đảm bảo hoàn thành các nhiệm vụ được giao đúng thời hạn và chất lượng yêu cầu.
  • Phản hồi và cải tiến: Nhận phản hồi từ quản lý và đồng nghiệp, từ đó cải thiện và phát triển kỹ năng và hiệu suất làm việc.

Mẫu mô tả công việc của Fresher Tester

Công việc của một fresher tester thường sẽ xoay quanh việc đảm bảo chất lượng phần mềm bằng cách phát hiện lỗi và đảm bảo rằng sản phẩm hoạt động theo yêu cầu. Dưới đây là một mô tả chi tiết về công việc của một fresher tester:

  • Đọc và hiểu các tài liệu yêu cầu dự án, đặc tả kỹ thuật và thiết kế phần mềm
  • Phân tích các yêu cầu của dự án để xác định các trường hợp kiểm thử cần thiết
  • Thiết kế và viết các test case chi tiết, bao gồm các bước thực hiện, dữ liệu đầu vào và kết quả mong đợi
  • Thực hiện các test case thủ công, kiểm tra tính năng phần mềm và ghi lại kết quả kiểm thử
  • Học và sử dụng các công cụ kiểm thử tự động để viết và thực hiện các kịch bản kiểm thử tự động
  • Ghi nhận và báo cáo các lỗi phát hiện được trong quá trình kiểm thử, bao gồm mô tả chi tiết lỗi, bước tái hiện lỗi và ảnh chụp màn hình nếu cần
  • Tham gia các cuộc họp nhóm, sprint planning, và daily stand-ups để cập nhật tiến độ công việc và thảo luận về các vấn đề phát sinh
  • Phối hợp chặt chẽ với Dev, Designer và các thành viên khác trong nhóm dự án để đảm bảo hiểu rõ các yêu cầu và tiêu chí kiểm thử.

Kỹ năng và tố chất cần có ở một Fresher là gì?

Dưới đây là một số kỹ năng và tố chất quan trọng để bạn trở thành một Fresher giỏi:

  • Tinh thần học hỏi: Là một Fresher bạn sẽ có cơ hội được tham gia vào nhiều dự án cụ thể. Do đó, bạn phải luôn trong trạng thái sẵn sàng học hỏi những điều mới. Tích lũy kinh nghiệm làm việc và nâng cao kỹ năng sẽ giúp ích cho bạn trên con đường phát triển sự nghiệp.
  • Khả năng tìm hiểu: Lập trình là một công việc liên tục đòi hỏi bạn phải tìm hiểu về những thứ mới mẻ. Fresher cần có khả năng tìm hiểu và khả năng học hỏi để hiểu và áp dụng các công nghệ mới.
  • Tư duy logic và sáng tạo: Lập trình đòi hỏi bạn phải suy nghĩ logic để giải quyết vấn đề. Tư duy logic cần thiết để phân tích và giải quyết các vấn đề lập trình. Bên cạnh đó, tính sáng tạo sẽ giúp bạn tạo ra các giải pháp mới và phát triển các ứng dụng hoàn thiện hơn. 
  • Kỹ năng giải quyết vấn đề: Khi làm việc với mã nguồn, bạn sẽ gặp phải nhiều vấn đề khác nhau. Kỹ năng này là yếu tố quan trọng trong việc giải quyết các vấn đề và tìm ra những giải pháp tốt nhất.
  • Kỹ năng làm việc nhóm: Lập trình không chỉ là công việc cá nhân, đôi lúc bạn cần phải làm việc với cả đội nhóm. Kỹ năng làm việc nhóm bao gồm khả năng giao tiếp, tiếp thu và chia sẻ kiến ​​thức, phối hợp với những người khác để hoàn thành một dự án.
  • Kiên trì và sự chăm chỉ: Lập trình đòi hỏi bạn phải tận tâm và kiên trì để giải quyết các vấn đề. Fresher cần phải có khả năng chịu áp lực và sẵn sàng làm việc chăm chỉ để đạt được mục tiêu của mình.

>>> Xem thêm: Fresher, Junior, Senior là gì? Yêu cầu và nhiệm vụ

Điểm khác nhau giữa Fresher và Intern

Fresher đã nắm rõ các kiến thức căn bản về lập trình hoặc framework của ngôn ngữ nào đó phù hợp với dự án. Ví dụ một fresher cho vị trí lập trình Php thường phải biết về Html, Css, Jquery và đương nhiên là ngôn ngữ Php, cao hơn 1 chút là biết sử dụng framework Php như Laravel chẳng hạn…đó là điều kiện tối thiểu cho vị trí Fresher IT.

Tất nhiên đây chỉ là những hiểu biết căn bản, gọi là Fresher chính là vì họ còn thiếu nhiều kinh nghiệm thực chiến, kinh nghiệm về thiết kế phần mềm, database…họ thường đối mặt với những thách thức thực tế bởi dự án được giao, từ nó mà tích lũy dần kinh nghiệm làm việc.

fresher là gì?

Fresher cũng chính là vị trí nhân viên chính thức của công ty, được hưởng đầy đủ phúc lợi của công ty. Rất nhiều công ty IT sẵn sàng trả mức lương hậu hĩnh khi họ thấy được tiềm năng phát triển của bạn.

Tham khảo tuyển dụng fresher IT lương cao trên TopDev

Intern lập trình dùng thường là những ai đang trong giai đoạn thực tập. Vẫn chưa có đầy đủ chuyên môn, kiến thức và sẽ nhận được sự hướng dẫn của các anh chị có kinh nghiệm trong công ty. Tất nhiên là bạn đang trong quá trình học nên bạn chỉ nhận được mức lương gọi là hỗ trợ ăn uống đi lại, phúc lợi lớn nhất là những kiến thức thực chiến quý giá cũng như đường hướng tương lai được nhận từ thời gian thực tập này.

>>> Xem thêm: Một số thứ để nhanh vượt qua giai đoạn Junior/Fresher hơn

Hiện nay tại Việt Nam rất nhiều công ty IT lớn có các chương trình tuyển dụng internship, fresher như công ty Framgia (Nay là Sun* Inc.), công ty KMS, Fpt Software, TMA.

Bạn nên đi thực tập từ năm 3 hoặc năm 4 đại học để tích lũy dần kinh nghiệm, đó là cách để chúng ta đạt tới các mức level cao hơn như junior, senior trong quá trình làm việc, để đạt được mức lương cũng như đãi ngộ mà mình mong muốn.

Bảng so sánh chi tiết Fresher và Intern

Intern

Fresher

Khái niệm Intern là sinh viên hoặc người mới tốt nghiệp đang thực tập để học hỏi kinh nghiệm Fresher là người mới tốt nghiệp, chưa có nhiều kinh nghiệm làm việc
Trình độ chuyên môn Thường có kiến thức cơ bản về lập trình, đang học hỏi để nâng cao kỹ năng Đã có trình độ chuyên môn nhất định, cần phát triển nhiều hơn về kỹ năng và kinh nghiệm
Lương thưởng Thường được trả lương thấp hơn so với nhân viên chính thức Thường được trả lương cao hơn so với intern và được hưởng nhiều chế độ phúc lợi hơn
Trách nhiệm công việc Thường được giao những công việc đơn giản để học hỏi kinh nghiệm Thường được giao những công việc phức tạp hơn, đòi hỏi kỹ sử dụng nhiều kỹ năng và có deadline rõ ràng

Làm sao để trở thành fresher ngay khi chưa ra trường?

Để trở thành một fresher mà không cần phải trải qua giai đoạn thực tập (intern), bạn có thể làm theo các bước sau:

  • Hoàn thành các môn chuyên ngành liên quan đến lĩnh vực bạn quan tâm có project ấn tượng để trình bày trong CV.
  • Tham gia các khóa học trực tuyến trên các nền tảng như Coursera, Udemy, LinkedIn Learning để nắm vững các kỹ năng cần thiết.
  • Tạo và hoàn thành các dự án cá nhân liên quan đến lĩnh vực bạn muốn làm việc. Ví dụ, nếu bạn muốn làm trong lĩnh vực phát triển phần mềm, hãy xây dựng các ứng dụng hoặc trang web cá nhân.
  • Đăng tải và quản lý các dự án của bạn trên GitHub hoặc các nền tảng tương tự để minh chứng cho kỹ năng và kinh nghiệm của bạn.
  • Tham dự các sự kiện, hội thảo, và gặp gỡ chuyên gia trong ngành để mở rộng mạng lưới quan hệ và tìm kiếm cơ hội nghề nghiệp.
  • Tìm kiếm và ứng tuyển trực tiếp vào các vị trí fresher thông qua các trang tuyển dụng, website công ty hoặc qua các mối quan hệ nghề nghiệp.

Hy vọng rằng bài viết này đã giúp bạn phân biệt được Intern và Fresher, hiểu rõ các kỹ năng và công việc của một Fresher. Đừng quên truy cập TopDev để cập nhật các công việc lập trình dành cho Intern và Fresher hấp dẫn nhất.

Có thể bạn muốn đọc thêm:

Tìm việc làm IT lương cao, đãi ngộ hấp dẫn trên TopDev!

Kiến thức C cho người mới và cách tự học lập trình C

Tài liệu lập trình C/C++ và các bước tự học lập trình

Ngôn ngữ lập trình C là một trong những ngôn ngữ lập trình được ưa chuộng nhất hiện nay, từ các dự án nhỏ đến các dự án lớn và phức tạp. Cùng TopDev tìm hiểu tất tần tật về ngôn ngữ lập trình này, bên cạnh đó chúng tôi cũng tổng hợp một số tài liệu và cách học lập trình C hiệu quả nhất.

Khái niệm ngôn ngữ lập trình C

Ngôn ngữ lập trình C là một ngôn ngữ lập trình bậc cao, đa chức năng (general-purpose), cung cấp giao diện trực tiếp, nhất quán và mạnh mẽ cho các hệ thống lập trình. Đây là lý do vì sao ngôn ngữ C được áp dụng rộng rãi trong việc phát triển phần mềm hệ thống, phần mềm ứng dụng và các hệ thống nhúng.

Sự linh hoạt và mạnh mẽ của ngôn ngữ C khiến nó được gọi là “mẹ của mọi ngôn ngữ”. Nhiều ngôn ngữ lập trình khác được phát triển dựa trên C như C++, PHP, JavaScript, Java, Python, và Perl.

Bởi vì là một ngôn ngữ có tính chất general-purpose, C có khả năng thích ứng tốt với phát triển hệ thống, ví dụ như hệ điều hành, trình biên dịch và trình điều khiển mạng. Tuy nhiên một số người cho rằng cú pháp của C có thể phức tạp và khó học, trong khi những người khác nhấn mạnh vấn đề thiếu chuẩn hóa. Cùng tìm hiểu sâu hơn về ngôn ngữ lập trình C ở các phần tiếp theo cũng TopDev!

Việc làm lập trình C mới nhất tại TopDev

Lịch sử hình thành và phát triển của C programming language

Lịch sử hình thành và phát triển của ngôn ngữ lập trình C
Lịch sử hình thành và phát triển của ngôn ngữ lập trình C

Nguồn ảnh: unstop.com

Ngôn ngữ lập trình C được đặt tên như vậy để ám chỉ sự kế thừa và phát triển từ ngôn ngữ lập trình B, một ngôn ngữ được thiết kế trước đó. C bổ sung hệ thống kiểu dữ liệu, cho phép ngôn ngữ này trở nên nhẹ hơn và cơ bản hơn so với BCPL (Basic Combined Programming Language)

Ngôn ngữ C được phát triển bởi Dennis Ritchie vào năm 1972 tại Bell Labs. Ban đầu, nó được dùng để viết hệ điều hành Unix. C bao gồm bốn kiểu dữ liệu nguyên thủy cơ bản: char, int, float, và void.

Vào năm 1978, Brian Kernighan và Dennis Ritchie viết cuốn sách “The C Programming Language” giúp ngôn ngữ C trở nên phổ biến hơn. Cuốn sách này cũng đóng vai trò quan trọng trong việc định hình cú pháp và các tiêu chuẩn sử dụng cho ngôn ngữ C.

Năm 1983, ANSI (American National Standards Institute) thành lập một nhóm làm việc để tiêu chuẩn hóa ngôn ngữ C, dẫn đến việc xuất bản tiêu chuẩn ANSI C vào năm 1989. Tiêu chuẩn này quy định cú pháp và các tính năng cơ bản của ngôn ngữ C, giúp cho việc phát triển và duy trì mã nguồn trở nên dễ dàng hơn.

Các đặc điểm chính của ngôn ngữ C

Các đặc điểm chính của ngôn ngữ C

  1. Đa mục đích (General-purpose): C là một ngôn ngữ lập trình đa mục đích, được thiết kế để phát triển nhiều loại ứng dụng khác nhau, từ hệ điều hành, phần mềm nhúng đến các ứng dụng cấp cao như trò chơi và phần mềm doanh nghiệp.
  2. Tính di động (Portability):Chương trình viết bằng C có thể dễ dàng biên dịch và chạy trên nhiều hệ thống và nền tảng khác nhau mà không cần phải thay đổi mã nguồn, nhờ đó C trở thành một ngôn ngữ phổ biến trong việc phát triển các ứng dụng đa nền tảng.
  3. Hỗ trợ lập trình cấu trúc (Structured Programming): C hỗ trợ lập trình cấu trúc, giúp các nhà phát triển tổ chức mã nguồn một cách logic và dễ quản lý, với các khái niệm như hàm, vòng lặp, và điều kiện.
  4. Truy cập cấp thấp (Low-level access): C cho phép truy cập trực tiếp vào bộ nhớ và phần cứng, giúp tối ưu hóa hiệu suất và cho phép lập trình viên kiểm soát tốt hơn các tài nguyên của hệ thống.
  5. Hệ thống kiểu mạnh mẽ (Strong typing system): C cung cấp một hệ thống kiểu mạnh mẽ, với các kiểu dữ liệu cơ bản như char, int, float, và void, giúp quản lý bộ nhớ và dữ liệu một cách hiệu quả.
  6. Bộ từ khóa nhỏ (Small set of keywords): C chỉ có 32 từ khóa, làm cho ngôn ngữ này trở nên đơn giản và dễ học, nhưng vẫn đủ mạnh để xây dựng các ứng dụng phức tạp.
  7. Thư viện chuẩn phong phú (Rich Standard Library): Ngôn ngữ C đi kèm với một thư viện chuẩn phong phú, cung cấp các hàm hữu ích cho các tác vụ như xử lý chuỗi, quản lý bộ nhớ, và thao tác với tệp tin.
  8. Hỗ trợ con trỏ (Pointer Support): C hỗ trợ con trỏ, cho phép lập trình viên làm việc trực tiếp với địa chỉ bộ nhớ, một tính năng quan trọng để quản lý bộ nhớ động, thao tác với mảng và chuỗi.
  9. Tối ưu hóa hiệu suất (Performance Optimization): C được biết đến với khả năng tối ưu hóa hiệu suất cao, nhờ vào khả năng kiểm soát chi tiết hoạt động của phần cứng, giúp các chương trình viết bằng C chạy nhanh và hiệu quả.
  10. Khả năng mở rộng (Extendibility): C cho phép người dùng thêm các hàm mới vào thư viện chuẩn, tạo ra các thư viện tùy chỉnh cho các tác vụ cụ thể, làm cho việc quản lý mã phức tạp trở nên dễ dàng hơn.

Ngôn ngữ lập trình C hoạt động như thế nào?

Máy tính không nói cùng ngôn ngữ với chúng ta, vì vậy ta phải dịch human code sang computer code (hệ nhị phân 1 và 0). Ngôn ngữ lập trình C hoạt động bằng cách viết mã của bạn vào một tệp thực thi (.exe). Trình biên dịch C sẽ lấy tệp thực thi đó và chuyển đổi toàn bộ thành mã máy (machine code), sau đó máy tính sẽ chạy đoạn mã đã được biên dịch.

Ngôn ngữ lập trình C hoạt động như thế nào?

Dưới đây là cách ngôn ngữ C hoạt động qua các giai đoạn:

Giai đoạn 1: Chỉnh sửa mã nguồn (Editing)

Việc viết hoặc chỉnh sửa mã nguồn là giai đoạn đầu tiên trong việc xây dựng một ứng dụng bằng C. Mã nguồn là một tập tin văn bản chứa tất cả các lệnh cần thực thi bởi máy tính (có thể hiểu được bởi con người). Chúng ta có thể sử dụng trình soạn thảo văn bản đơn giản (như Notepad) hoặc trình chỉnh sửa tích hợp trong các môi trường phát triển tích hợp (IDE). Mã nguồn phải tuân theo cú pháp của ngôn ngữ lập trình C. Sau khi hoàn thành, tập tin mã nguồn được lưu với phần mở rộng là *.c.

Để biên dịch mã nguồn, chúng ta cần một trình biên dịch (compiler). Nếu sử dụng một trình soạn thảo văn bản đơn giản, chúng ta cần cài đặt một trình biên dịch C trên máy tính và chạy nó thủ công từ dòng lệnh. Một cách dễ dàng hơn là sử dụng một IDE (thường đi kèm với trình biên dịch) và chỉ cần nhấn một nút trong menu để bắt đầu biên dịch.

Giai đoạn 2: Tiền xử lý và biên dịch (Preprocessing and Compilation)

Trong quá trình biên dịch, có một giai đoạn xử lý sơ bộ được thực hiện trước khi biên dịch mã nguồn. Trình tiền xử lý (preprocessor) được gọi bởi trình biên dịch để thực hiện công việc tiền xử lý. Trình tiền xử lý tìm kiếm các dòng mã bắt đầu bằng ký tự # (hash).

Một trong những nhiệm vụ của trình tiền xử lý là bao gồm các hàm được khai báo bên ngoài mã nguồn của chúng ta. Trình tiền xử lý sẽ loại bỏ tất cả các chỉ thị của trình biên dịch khỏi mã gốc nhưng vẫn giữ thông tin về các tập tin bổ sung cần thiết sau này. Một tập tin tạm thời sẽ được tạo ra vào cuối quá trình tiền xử lý, và tập tin này sẽ được ẩn khỏi người dùng.

Sau khi tiền xử lý hoàn tất, trình biên dịch bắt đầu hoạt động. Trình biên dịch sẽ chuyển đổi tập tin mã nguồn thành một tập tin đối tượng. Tập tin đối tượng này, còn được gọi là mã máy (machine code), có thể được CPU của máy tính hoặc vi điều khiển diễn giải.

Mặc dù tập tin đối tượng đã hoàn thành, nhưng vẫn còn một số tham chiếu chưa được định nghĩa. Các tham chiếu chưa định nghĩa này là những đoạn mã cần được lấy từ một vị trí khác. Trong ví dụ của chúng ta, hàm printf() là một tham chiếu chưa định nghĩa. Chúng ta biết nơi lấy mã cho hàm này vì chỉ thị của trình biên dịch (#include <stdio.h>) đã đề cập đến nó.

stdio.h là một tập tin tiêu đề (header file) chứa khai báo cho hàm printf() của chúng ta, cùng với các nội dung khác. Bằng cách bao gồm tập tin tiêu đề, chúng ta mô tả nơi để lấy định nghĩa của hàm printf().

Giai đoạn 3: Liên kết (Linking)

Tại điểm này, chúng ta cần thu thập tất cả các tập tin cần thiết cho ứng dụng của mình. Đối với các hàm bên ngoài, chúng ta sẽ cần các tập tin đối tượng cũng như các tập tin thư viện tĩnh. Các hàm bên ngoài được sử dụng trong tập tin mã nguồn của chúng ta được định nghĩa trong các tập tin thư viện tĩnh (có phần mở rộng là *.lib). Trong ví dụ của chúng ta, mã máy cho hàm printf() sẽ được lưu trữ trong tập tin thư viện tĩnh.

Trình liên kết (linker) là người thực hiện quá trình liên kết. Nó sẽ kiểm tra tất cả các tập tin đối tượng để tìm các tham chiếu chưa định nghĩa và thay thế chúng bằng mã máy từ các tập tin thư viện. Cuối cùng, chúng ta sẽ có một tập tin thực thi (thường có phần mở rộng là *.exe đối với ứng dụng trên Windows, *.hex đối với vi điều khiển) sau khi quá trình liên kết hoàn tất.

Giai đoạn 4: Tải và thực thi chương trình (Loading and Execution)

Sau khi tập tin chương trình được tạo, nó phải được nạp vào bộ nhớ của máy tính trước khi có thể thực thi. Trình tải (loader) chịu trách nhiệm cho việc này. Trình tải thường được tích hợp trong tập tin thực thi bởi trình liên kết. Khi chúng ta khởi chạy tập tin thực thi, nó kích hoạt trình tải, trình này sẽ nạp chương trình vào bộ nhớ và bắt đầu thực thi.

Tại sao lập trình viên nào cũng nên học lập trình C?

Có rất nhiều ngôn ngữ lập trình hiện đại hiện nay để lựa chọn như Perl, Ruby, và Python, Java. Tuy nhiên, có một số lý do thuyết phục để bạn nên nắm vững ngôn ngữ lập trình C.

Trước hết, C đã được các lập trình viên sử dụng trong suốt ba thập kỷ qua, với một lượng lớn mã nguồn có sẵn để tham khảo và học tập. Nhờ đó, bạn có thể dễ dàng tiếp cận kiến thức và thực hành, đồng thời giải quyết các vấn đề đã được cộng đồng lập trình giải quyết và hiểu rõ. Ngoài ra, có rất nhiều tài liệu hướng dẫn chi tiết dễ dàng truy cập.

C đã trở thành một ngôn ngữ lập trình phổ biến nhờ vào lịch sử lâu đời và vai trò quan trọng trong lập trình hệ thống cho Unix. C là một công cụ mạnh mẽ để diễn tả các khái niệm lập trình cơ bản theo cách mà nhiều người có thể dễ dàng hiểu. Nhiều khái niệm trong C, như argc và argv cho các tham số dòng lệnh, cấu trúc vòng lặp và kiểu dữ liệu, cũng xuất hiện trong nhiều ngôn ngữ khác, giúp bạn giao tiếp dễ dàng hơn với những người khác, ngay cả khi họ không biết ngôn ngữ C.

Hơn nữa, C cho phép bạn tiếp cận gần hơn với phần cứng máy tính. Khi làm việc với con trỏ, byte, và các bit, các phương pháp tối ưu hóa trở nên rõ ràng hơn. Hiểu cách hoạt động chi tiết của hệ thống rất hữu ích khi bạn gặp phải những vấn đề trong các ngôn ngữ bậc cao, vì bạn sẽ có cái nhìn sâu hơn về cách thức hoạt động của hệ thống, giúp việc khắc phục sự cố trở nên dễ dàng hơn.

C có 32 từ khóa, nhiều kiểu dữ liệu và một tập hợp các hàm hệ thống, làm cho việc lập trình trở nên đơn giản hơn.

Một điểm mạnh khác của C là khả năng mở rộng dễ dàng. Bạn có thể tích hợp các hàm từ thư viện vào chương trình C, và tự thêm các tính năng hay hàm riêng của mình vào thư viện đó. Điều này làm cho việc quản lý mã nguồn phức tạp trở nên đơn giản hơn rất nhiều.

Cuối cùng, có nhiều trình biên dịch khác nhau có sẵn trên thị trường, giúp bạn dễ dàng chạy các chương trình viết bằng C trên nhiều nền tảng khác nhau.

>> Xem thêm: Nên học C hay C++

7 ứng dụng tuyệt vời của lập trình C

Ứng dụng tuyệt vời của lập trình C
Ứng dụng tuyệt vời của lập trình C

Ngôn ngữ lập trình C có rất nhiều ứng dụng quan trọng và đa dạng trong ngành công nghiệp và nghiên cứu. Dưới đây là một số ứng dụng chính của ngôn ngữ C:

  1. Phát triển Hệ điều hành: C là ngôn ngữ chủ đạo được sử dụng để phát triển các hệ điều hành như Unix, Linux và Windows. Nhờ vào tính năng tiếp cận trực tiếp với phần cứng và hiệu suất cao, C là lựa chọn lý tưởng để xây dựng và quản lý các hệ thống phần cứng phức tạp.
  2. Phần mềm nhúng (Embedded Software): Với tính năng di động và khả năng tối ưu hóa hiệu suất, C thường được sử dụng trong việc phát triển phần mềm nhúng cho các thiết bị điện tử thông minh, hệ thống điều khiển tự động, và IoT (Internet of Things).
  3. Phát triển ứng dụng hệ thống: Có sự linh hoạt và khả năng tương thích cao, C được sử dụng rộng rãi trong việc phát triển các ứng dụng hệ thống như trình duyệt web, máy chủ, và các phần mềm đa nền tảng.
  4. Lập trình mạng: Cung cấp các thư viện và công cụ mạnh mẽ cho việc phát triển ứng dụng mạng, từ các giao thức mạng đơn giản đến các ứng dụng phức tạp như máy chủ email và hệ thống phân phối nội dung.
  5. Công cụ di động và game: Có thể sử dụng để phát triển các ứng dụng di động và game, đặc biệt là trong lĩnh vực game console và game đa nền tảng.
  6. Công cụ hệ thống và bảo mật: Được sử dụng để viết các công cụ hệ thống như trình biên dịch, trình gỡ lỗi và phần mềm bảo mật, bao gồm cả các công cụ phân tích và thử nghiệm bảo mật.
  7. Nghiên cứu và giáo dục: Là một trong những ngôn ngữ lập trình cơ bản và phổ biến trong giảng dạy và nghiên cứu khoa học máy tính, C giúp sinh viên và nhà nghiên cứu hiểu sâu hơn về cấu trúc và hoạt động của máy tính.

Những ứng dụng trên chỉ ra rằng ngôn ngữ lập trình C không chỉ phổ biến mà còn cực kỳ linh hoạt và mạnh mẽ trong nhiều lĩnh vực công nghệ thông tin và kỹ thuật.

Cách học lập trình C hiệu quả cho người mới

Phương pháp học C hiệu quả

Học lập trình C không phải là chuyện mà ta có thể làm trong một sớm, một chiều, nhưng nó không phải là quá khó khăn. Sau đây là 4 lời khuyên cho bạn khi muốn trở thành một C developer:

Xem code sample

Khi bạn mới bắt đầu học lập trình C, bạn nên cố gắng hiểu từng ví dụ, đọc và hiểu các đoạn code mà tác giả đã viết dùng để làm gì. Tuy các ví dụ đó không phải khi nào đánh vào máy cũng chạy, nhưng nó tập cho chúng ta một thoái quen xem code cẩn thận và góp phần giúp chúng ta viết code rõ ràng hơn.
Chúng ta phải viết code làm sao để cho các lập trình viên khác có thể đọc và hiểu nó, và để khi chính mình nhìn lại cũng nắm được. Do đó cần phải tuân thủ những nguyên tắc, và cú pháp khi viết code để đảm bảo kiểm tra lỗi đơn giản hơn, các phần hướng dẫn viết code theo một mẫu chuẩn.

Hãy chạy thử nó

Chạy thử ở đây không phải là copy rồi paste vào rồi nhấn F5. Bạn nên tự mình gõ từng đoạn code đó vào chương trình biên dịch, vì khi đó bạn thực sự buộc mình phải đi qua tất cả các dòng code, việc gõ code sẽ giúp bạn chú ý đến các chi tiết cú pháp của ngôn ngữ – những sự thiếu sót buồn cười như thiếu đấu chấm phẩy ở cuối mỗi câu lệnh có thể làm bạn hết sức đau đầu. Nhưng đó là những gì bạn cần phải vấp ngã, rồi bạn sẽ có kinh nghiệm sau những lần đau đó.

Sau khi gõ code xong, hãy chạy thử nó, sau đó thử thêm thắt vào đoạn code mà mình muốn. Điều đó sẽ giúp bạn hiểu nhanh hơn mỗi câu lệnh có ý nghĩa như thế nào.

Hãy tự mình ngẫm nghĩ và code riêng cho mình 1 chương trình ngay

Bạn hãy tự nghĩ cho mình một thuật toán riêng, một chương trình nào đó. Tuy việc này rất khó và tốn nhiều thời gian, nhưng nó sẽ giúp bạn có được những kinh nghiệm thực sự hữu ích, khả năng tư duy lập trình ngày càng phát triển. Thay vì lên mạng tìm code về sửa.

Nếu ý tưởng làm một ứng dụng lớn, phải viết một lượng lớn code. Khi đó bạn hãy chia nhỏ project thành nhiều tính năng, tự thiết kế cấu trúc và code của chức năng đó, rồi xong xuôi bạn map các tính năng lại cho hoàn chỉnh. Sẽ thất bại nhiều đó, tin tôi đi, nhưng đừng nản, khi bạn chạy ra được thành quả thì nó sẽ tiếp thêm động lực cho bạn.

Nhớ sử dụng rành rọt một công cụ Debug

Debug là một công cụ chỉ ra cho bạn chạy sai dòng nào đó hay lỗi nào đó. Nó cho bạn theo dõi giá trị của các biến và các thay đổi của chúng qua từng dòng code của chương trình. Công cụ debug giúp chúng ta hiểu chương trình của mình hơn, và là thứ chúng ta cần phải biết khi viết chương trình.

Khi bạn lần đầu tìm hiểu về debuger, có thể nó sẽ làm bạn mất khá nhiều thời gian khi bạn sửa lỗi chương trình của mình. Nhưng khi bạn nắm được các kiến thức về debug nó sẽ đem lại cho bạn một lợi ích lớn trong việc tiết kiệm thời gian khi sửa lỗi chương trình.

Tổng hợp lộ trình học C từ căn bản đến nâng cao

Tương tự như các ngôn ngữ lập trình khác, lộ trình học của bạn nên bắt đầu từ việc đọc và tìm hiểu các cú pháp cơ bản trong C, từ kiểu dữ liệu, cách khai báo biến,… sau đó là về các câu lệnh điều kiện(if-else, switch), vòng lặp (for, while). Sau đó nâng cao hơn sẽ là những kiến thức liên quan đến bộ nhớ, cấp phát động, con trỏ,… Bạn có thể tuân theo một lộ trình cơ bản như dưới đây:

1. Giới thiệu và chuẩn bị

  • C là gì?: Tìm hiểu về ngôn ngữ lập trình C, lịch sử phát triển và ứng dụng thực tiễn trong lập trình hệ thống, phần mềm nhúng, và các ứng dụng khác.
  • Cài đặt môi trường phát triển: Cài đặt một IDE (Integrated Development Environment) như Code::Blocks, Dev-C++ và trình biên dịch như MinGW, hoặc Visual Studio để viết và chạy mã C mà không cần trình biên dịch

2. Cơ bản về ngôn ngữ lập trình C

  • Cấu trúc chương trình C: Hiểu cấu trúc cơ bản của một chương trình C, gồm các phần như #include, hàm main(), và các lệnh cơ bản.
  • Cú pháp C cơ bản: Học về cú pháp ngôn ngữ C, cách viết và tổ chức mã nguồn theo đúng quy chuẩn.
  • Kiểu dữ liệu trong C: Nắm vững các kiểu dữ liệu cơ bản trong C như int, float, char, và void.
  • Biến: Học cách khai báo, khởi tạo và sử dụng biến để lưu trữ và xử lý dữ liệu.
  • Hằng số: Tìm hiểu về hằng số và cách sử dụng chúng trong chương trình để giữ giá trị cố định.
  • Lớp lưu trữ (Storage Classes): Hiểu về các lớp lưu trữ như auto, extern, static, và register, cách chúng ảnh hưởng đến phạm vi và thời gian sống của biến.

3. Các khái niệm lập trình cơ bản

  • Toán tử: Sử dụng các toán tử số học, logic, quan hệ và gán để thực hiện các phép tính và so sánh trong chương trình.
  • Điều khiển luồng: Học cách sử dụng các câu lệnh điều kiện như if, else, và switch-case để điều khiển luồng chương trình.
  • Vòng lặp: Sử dụng các vòng lặp for, while, và do-while để lặp lại các đoạn mã theo điều kiện.
  • Hàm: Định nghĩa và gọi hàm, làm việc với tham số và giá trị trả về của hàm.
  • Quy tắc phạm vi (Scope Rules): Hiểu về phạm vi biến và quy tắc sử dụng biến toàn cục và cục bộ trong các hàm và tệp tin khác nhau.

4. Làm việc với dữ liệu phức tạp

  • Mảng (Array): Khai báo và sử dụng mảng một chiều và hai chiều để lưu trữ tập hợp các giá trị có cùng kiểu dữ liệu.
  • Con trỏ (Pointer): Hiểu về con trỏ, cách sử dụng chúng để quản lý bộ nhớ và làm việc với mảng, chuỗi.
  • Chuỗi (String): Xử lý chuỗi ký tự, sử dụng các hàm thao tác chuỗi như strlen(), strcpy(), strcmp() để làm việc với chuỗi.
  • Cấu trúc (Struct): Sử dụng cấu trúc để nhóm các biến khác nhau thành một đơn vị duy nhất, dễ quản lý.
  • Union: Hiểu về Union và cách sử dụng nó để tiết kiệm bộ nhớ trong các ứng dụng yêu cầu tối ưu hóa.
  • Các trường Bit (Bit Fields): Làm việc với các trường bit trong cấu trúc để quản lý dữ liệu ở mức độ bit, tiết kiệm bộ nhớ.

5. Cấu trúc và quản lý chương trình

  • Từ khóa typedef: Sử dụng typedef để tạo các kiểu dữ liệu mới từ các kiểu dữ liệu có sẵn, giúp mã nguồn dễ đọc hơn.
  • Input & Output cơ bản: Sử dụng printf()scanf() để nhập và xuất dữ liệu từ người dùng.
  • Nhập/Xuất File: Làm việc với tệp tin, sử dụng các hàm như fopen(), fclose(), fprintf(), và fscanf() để đọc và ghi dữ liệu từ/tới tệp tin.
  • Bộ tiền xử lý (Preprocessor): Sử dụng các chỉ thị tiền xử lý như #define, #include, #ifdef để điều khiển quá trình biên dịch, tái sử dụng mã nguồn.
  • Header File: Tạo và sử dụng các tệp tiêu đề (.h files) để tổ chức mã nguồn, chia sẻ các khai báo hàm và biến giữa các tệp mã nguồn.

6. Các khái niệm nâng cao

  • Ép kiểu (Type Casting): Hiểu về ép kiểu và cách sử dụng nó để chuyển đổi giữa các kiểu dữ liệu khác nhau một cách an toàn.
  • Xử lý lỗi (Error Handling): Phát hiện và xử lý lỗi trong chương trình để đảm bảo chương trình chạy ổn định và tin cậy.
  • Đệ quy (Recursion): Hiểu về đệ quy và cách viết các hàm đệ quy để giải quyết các vấn đề phức tạp, như tính giai thừa, dãy Fibonacci.
  • Tham số biến (Variable Arguments): Sử dụng các hàm với số lượng tham số không cố định, ví dụ như printf() trong C.
  • Quản lý bộ nhớ (Memory Management): Sử dụng các hàm cấp phát (malloc(), calloc(), realloc()) và giải phóng bộ nhớ (free()) để quản lý bộ nhớ động trong chương trình.
  • Tham số dòng lệnh (Command Line Arguments): Xử lý các tham số dòng lệnh được truyền vào khi chạy chương trình, sử dụng argcargv.

7. Thực hành và phát triển dự án

  • Dự án thực tế: Áp dụng những kiến thức đã học để xây dựng các dự án nhỏ như quản lý sinh viên, chương trình tính toán ma trận, hoặc một trò chơi đơn giản.
  • Tiếp tục học hỏi và thực hành: Tham gia các diễn đàn lập trình, cộng đồng mã nguồn mở để trao đổi, học hỏi kinh nghiệm từ những lập trình viên khác.

8. Cải thiện và mở rộng kiến thức

  • Thuật toán và cấu trúc dữ liệu nâng cao: Học thêm về các thuật toán sắp xếp, tìm kiếm, và cấu trúc dữ liệu nâng cao như danh sách liên kết, cây nhị phân, đồ thị.
  • Lập trình hệ thống và mạng: Nâng cao kỹ năng lập trình bằng cách tìm hiểu về lập trình hệ thống, quản lý bộ nhớ ở mức thấp, và lập trình mạng.
  • Học các ngôn ngữ lập trình khác: Sau khi đã nắm vững C, mở rộng kiến thức bằng cách học các ngôn ngữ lập trình liên quan như C++, Python, hoặc Java để mở rộng khả năng phát triển phần mềm.

Tài liệu học lập trình C tốt nhất

Kho tài liệu sách PDF

Các khóa học C căn bản miễn phí

  • freeCodeCamp – C Programming for Beginners
  • Udemy – C Programming For Beginners
  • Coursera – Introduction to Programming in C
  • edX – C Programming: Getting Started
  • Codecademy – Learn C

Video series học lập trình C cơ bản

Dưới đây là tổng hợp một số series dạy lập trình C miễn phí trên Youtube:

  • C Programming For Beginners” – by freeCodeCamp.org
  • C Programming Tutorial for Beginners” – by ProgrammingKnowledge
  • Learn C Programming | C Tutorial | Complete Playlist” – by Naresh i Technologies
  • C Programming Language” – by The Cherno
  • C Programming Tutorials for Beginners” – by Caleb Curry
Tóm lại, C là một ngôn ngữ lập trình mạnh mẽ, linh hoạt, có tính ứng dụng cao dùng để viết nhiều chương trình từ hệ điều hành đến ứng dụng người dùng, đồng thời C cũng là nền tảng cho nhiều ngôn ngữ lập trình hiện đại khác. Bài viết trên của chúng tôi, hi vọng đã cung cấp được những kiến thức căn bản về ngôn ngữ C và cách tự học lập trình C cho người mới bắt đầu.

Tôi đã dạy vợ coding như thế nào?

toi-da-day-vo-coding-nhu-the-nao

Tác giả: Carl Tashian

Khi Siobhán, đồng nghiệp của tôi nói rằng cô ấy muốn làm phân tích và dữ liệu viên (data science), tôi nhận ra đó là cơ hội để mình quan sát cách học và làm việc của lập trình viên trẻ ngày nay.

Trước hết, để tôi giới thiệu một chút về bản thân. tôi đảm nhiệm vị trí quản lí manager bên developer và engineering vì thế mà tôi luôn làm việc với những bạn đã có rất nhiều kinh nghiệm. Thế nhưng đối với các bạn trẻ chỉ mới chập chững bước vào thế giới lập trình, tôi luôn tự hỏi các bạn đã bắt đầu từ đâu và từ khi nào. Tôi thì vốn đã đụng vào lập trình ngay từ khi chỉ là đứa con nít.

Đồng nghiệp của tôi, Siobhán, thì quyết định theo đuổi nghề lập trình sau khi đã hoàn thành khóa học phân tích dữ liệu tại Udacity tháng 2 vừa rồi. Đây là khóa học mà trước tiên bạn phải làm quen với CS, điều mà hoàn toàn xa lạ với Siobhán cho tới mùa hè năm ngoái (thời điểm cô ấy đăng kí học). Nói cách khác, Siobhán chưa đụng vào bất cứ dòng code nào trước đó. Chính vì vậy mà trong khoảng thời gian đầu, tôi đảm nhiêm vai trò huấn luyện cho Siobhán. Tôi cung cấp các tài liệu khác nhau từ nhiều nguồn (Khóa học CS50 của Harvard) và yêu cầu cô ấy nghiên cứu nhằm bổ sung thêm kiến thức.

Trong quá trình trên, Siobhán đã đưa ra rất nhiều thắc mắc như công dụng thực tế của text editor, command line cho đến việc máy tính hoạt động như thế nào. Một câu hỏi khá hay khác là “ Tại sao em phải dùng Chrome để vào Jupyter, khi mà cái ứng dụng đã có sẵn trên máy rồi? Không phải Chrome chỉ là trình duyệt web thôi à?” dẫn đến một cuộc thảo luận về cấu trúc Client/server, TCP/IP, HTTP cũng như là về loop back trong network.

Siobhán là một học sinh cực kì chăm chỉ, cô thức dậy và bắt đầu học từ lúc 6h sáng cho đến tận tối khuya. Vì vậy mà một thử thách đặt ra là làm sao đảm bảo cho Siobhán học hiệu quả mà không khiến cổ xì khói vì bị quá tải từ lượng thông tin dày đặc. Sau đây là cách mà “thầy trò” chúng tôi đã áp dụng:

Đầu tiên là lâu lâu phải để  Siobhán ….. bị quá tải. Đó là cách tốt nhất để tối đa khả năng tiếp thu bài học của cô ấy. Hiển nhiên là chỉ để việc đó xảy trong thời gian ngắn nhất có thể. Khi bạn bị quá tải bởi khối lượng kiến thức khổng lồ, bạn sẽ cảm thấy mệt mỏi và mất đi động lực. Vì thế mỗi khi Siobhán cảm thấy cô ấy bị “overload” thì việc học sẽ được giảm xuống.

Tôi đã yêu cầu Siobhán lập ra một list những nội dung mà cô phải học ở Udacity:

  • Python / Jupyter
  • R / R Studio
  • VIM
  • git / GitHub
  • Các dòng lệnh command
  • Thống kê số liệu
  • matplotlib / pandas / NumPy / SciPi
  • JavaScript / D3
  • Học về CS cũng như các thuật toán
  • SQL / PostgreSQL
  • NoSQL / MongoDB

Udacity vốn nổi tiếng bởi số lượng phong phú các bài học cũng như chất lượng của những khóa học. Tuy nhiên, nhìn ở mặt khác, số lượng thông tin là cực kì lớn và nó khiến Siobhán có cảm giác bị choáng ngợp mỗi khi cô vừa hoàn thành một khóa học. Một ví dụ điển hình là chỉ mới vài tuần sau khi học xong lớp về JavaScript, D3 và cách lập trình. Siobhán đã phải chuyển một thế giới hoàn toàn khác lạ của R and RStudio và bỏ hẳn JavaScript về một bên.

Trong quá trình học, Siobhán đã thực hiện vô số các project khác nhau và học hỏi được rất nhiều thứ. Thế nhưng sau kết thúc chương trình học vào tháng 2 vừa rùi, Siobhán lại cảm thấy bị lung lay mất tự tin. Nói cách khác, cô cảm thấy đôi khi mình chả biết gì bởi việc học quá nhiều lĩnh vực mà lại không có chuyên môn tập trung. Hơn thế nữa, kinh nghiệm sử dụng các ngôn ngữ lập trình và tool của Siobhán vẫn còn thấp.

Vì thế mà tôi yêu cầu Siobhán dành ra vài tuần để thực hành. Mục tiêu đặt ra là thành thạo trong việc sử dụng Python, SQL, hệ thống phân tích dữ liệu trong khi vẫn tạo core CS và cập nhật số liệu. Cứ mỗi tuần trôi qua,  Siobhán càng tự tin hơn vào khả năng của mình. Đồng thời, cô tập trung củng cố kiến thức của mình và lấp đi những lỗ hổng hiểu biết khác. Và cứ thế, mỗi lần Siobhán sử dụng Python, cô càng “pro” hơn.

Có thể bạn muốn xem:

  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ọ?
  Lối đi nào cho newbie IT - Front End, Back End hay Full Stack?

Sau khi khoảng thời gian huấn luyện kết thúc,  Siobhán được săn đón bởi nhiều công ty khác nhau. Cũng qua việc chỉ dạy Siobhán, tôi cũng nghiệm ra được nhiều điều:

Hãy thể hiện 1 thuật toán bằng ý tưởng

Như đã nói, cách dễ nhất để miêu tả một thuật toán là dưới dạng của một ý tưởng. Khi bạn gặp khó khăn trong việc viết một dòng code, hãy thử miêu tả nó bằng ngôn ngữ của bạn trước chứ không phải chỉ dùng Pseudocode (mã giả) thôi.

Hãy thử tưởng tượng bạn đang kiếm chuỗi palindromic dài nhất từ chuỗi chính. Và nếu chuỗi chính là aabbdcaacd thì chuỗi nhánh palindromic sẽ là dcaacd.

Sau đây là cách mà chúng ta giải quyết vấn đề, bằng ngôn ngữ tiếng Việt :

  • Bắt đầu bằng việc xác định chuỗi palindromic! Bởi chúng luôn là đối xứng đều, chúng ta có thể bắt đầu việc tìm kiếm từ vị trí trung tâm của đoạn chuỗi chính. Nói cách khác, là cái “hạt nhân” của chuỗi palindromic trong chuỗi chính.
  • Khi tìm được “hạt nhân” rùi thì ta cứ việc mở rộng ra hai bên cho đến khi nó không còn cân xứng đều với nhau nữa.
  • Dựa theo nguyên lí đó, ta có thể thấy một số chuỗi palindromic ngắn là aaaba
  • Các chuỗi palindromic có thể trùng lên nhau. Ví dụ với chuỗi là aabaaba. Thì chuỗi palindromic aabaa xếp chồng lên nhau với chuỗi palindromic baababa

Sau khi có thể dùng ngôn ngữ giao tiếp hằng ngày để miêu tả hướng giải quyết vấn đề của bạn. Hãy lặp lại quá trình đó nhưng lần này là dùng Pseudocode. Bạn sẽ nhận ra rằng chúng sẽ trở nên đơn giản hơn. Quá trình trên cũng sẽ giúp bạn dễ nhớ và học lập trình tốt hơn.

Học cách nhìn code

Học lập trình không chỉ đơn giản là viết code, nó còn về khả năng nhìn một phần mềm về mặt cấu trúc , cách vận hành cũng như lỗi. Nói cách khác, đừng chỉ đọc code như mặt chữ, mà phải nhìn.

Lúc đầu, bạn sẽ chỉ đơn giản là cố gắng hiểu được cú pháp của những dòng code. Khi đã quen dần, bạn sẽ nhận ra những lỗi trong các đoạn code. Và sau một thời gian, bạn sẽ có khả năng nhận ra có gì đó “sai sai” dù chỉ nhìn sơ qua. Và trước cả khi bạn nhận ra, các lỗi và bug trong code sẽ tự động hiện ra trước mắt bạn.

Kĩ thuật rút ngắn code

Là một kĩ thuật được nói tới bởi nhà lập trình Sandi Metz. Theo cô, các đoạn code cần có sự chú ý về mặt hình dáng, màu sắc nhằm xác định có cần phải rút ngắn hay không. Với những dòng code mà trông cứ như là một dãi loằng ngoằng bậc thang; nhiều màu sắc thì chúng sẽ cần ta sửa lại bằng kĩ thuật trên.

Bắt đầu bằng việc viết thành thạo 50 dòng code

Theo tôi, khi các bạn học lập trình thì mốc then chốt ban đầu là phải lập trình được một phần mềm đơn giản với 50 dòng code. Bởi trong giai đoạn này, bạn sẽ học về cách tạo các khối dữ liệu, loop cũng như là các dòng code điều kiện thế nên việc lập trình ngắn gọn là cần thiết.

Nếu bạn thành thục được kĩ năng trên, thì việc thành pro sẽ trở nên rất dễ dàng. Bạn có thể thực tập bằng cách giải các thử thách lập trình được tạo ra trên Leetcode và Cracking Coding Interview.

Sau một thời gian thuần thục với việc lập trình cho những phần mềm đơn giản thì bạn đã sẵn sàng bước tiếp vào level cao hơn.

Giữ cho những đoạn code của phần mềm đơn giản và dễ hiểu

Về lý thuyết, nếu đến được bước này thì bạn đã có thể lập trình được bất kì ứng dụng nào. Có khi bạn lại còn thấy lập trình dễ hẳn ra.

Khi trình độ của bạn đã đi lên thì tiêu chuẩn đặt ra cũng cao hơn. Bạn sẽ bắt đầu lập trình nhiều phần mềm phức tạp và cần sử dụng nhiều kĩ thuật khác nhau. Rõ ràng là bạn sẽ muốn đơn giản hóa đi các dòng code nên bạn sẽ bắt đầu phải tinh tế hơn, trừu tượng và rút gọn đi nhằm giữ cho các đoạn code được đơn giản mà ngắn gọn. Bạn sẽ dành nhiều thời gian hơn trong việc testing cũng như việc bạn đặt tên trong lập trình.

“Đơn giản là hiện thân của sự chắc chắn” – Edsger W.Dijkstra

Hãy tập thói quen viết test

Viết test cần skill cao nhưng nó cũng dễ dàng để học được. Viết test sẽ tạo cho bạn thói quen kĩ lưỡng, thường xuyên test.

Bắt đầu bằng việc lập trình bài test cho một thử thách bất kì. Sau đó bạn thử thay đổi thông số (0 hoặc 1 hoặc để trống) nhằm xem bài test bạn tạo ra có hoạt động tốt không.

Nhớ ghi note đầy đủ

Các developer nên mang theo bên mình một bản note để ghi chép. Bởi khi bạn đang lập trình, sẽ có rất nhiều thứ bạn gặp phải mà không tiện giải quyết ngay. Vì thế khi có bất cứ vấn đề, thắc mắc mà bạn muốn tìm hiểu sau thì hãy ghi ra. Sau đây là những đoạn note của Siobhán:

  • Tại sao đoạn code Python luôn bị sai khi mình Paste nó vào VIM!
  • if __name__ == '__main__': là cái gì vậy? Nó để làm gì?
  • Tại sao cứ phải xác định Class cho unittest?

Lời kết

Điều quan trọng nhất đối với Siobhán là lập trình hàng ngày bởi chúng tôi vẫn còn vài tuần nữa trước khi cô ấy bắt đầu tìm kiếm việc làm full time. Tất nhiên là Siobhán vẫn sẽ phải tập viết lập trình liên tục kể cả khi cô ấy đã kiếm được việc. Tuy vậy, khi thấy Siobhán hạnh phúc vì sự tiến bộ của mình, tôi cũng vui lây. Sau vài tháng chỉ dạy cho cô ấy, tôi cũng tìm thấy lại sự phấn khích trong việc lập trình. Một công việc thật tuyệt vời.

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

  Cách mà một dòng code đã thay đổi cuộc đời tôi!
  Hot trend AI, không hề "gắt" như bạn nghĩ

Làm sao để Lập trình viên tìm được lối đi riêng cho mình?

lam-sao-de-lap-trinh-vien-tim-duoc-loi-di-rieng-cho-minh

Đi tổng quát hay đi chuyên sâu?

Tôi đã làm việc trong ngành phát triển phần mềm và công nghệ được khoảng 5 năm. Trước đây tôi theo ngành Environmental Engineering. Tôi chuyển sang học Software Developer cùng lúc chỉ cần thêm một vài môn vì tôi đã từng học GIS trước kia.

Và đó là khi tôi bước vào một chân trời mới. Vừa có kiến thức thực tiễn, lại vừa khao khát được học thêm về một ngách riêng hấp dẫn trong ngành lập trình. Công việc hiện tại của tôi là một lập trình viên GIS Web.

Liệu tôi có làm việc với GIS và web nhiều hơn không? Chắc chắn là có rồi. Tôi có biết cách xử lý front-end và back-end cho mấy cái ứng dụng của mình không? Có, và theo một cách nào đó, bạn có thể gọi tôi là một lập trình viên full-stack. Nhưng nó có nghĩa là tôi “cái gì cũng biết thật ra lại không biết cái gì” không?

Không! Tôi có thể nói rằng tôi đủ vững trong lĩnh vực công nghệ, nhưng cũng có thể thoải mái “quẩy” trong một số lĩnh vực khác. Bỏ qua cái mác công việc một bên, một cách nào đó tôi cảm thấy thoải mái hơn khi làm việc trong môi trường back-end cùng bộ dữ liệu khổng lồ. Tuy nhiên bài viết này tôi sẽ nói về một vấn đề khác.

  Roadmap Frontend Developer - "Con đường tắt" để trở thành cao thủ Frontend Developer
  Phân Biệt Frontend, Backend, Fullstack - so sánh chi tiết

Tôi làm lập trình web, vì đúng là tôi có kiến thức về công nghệ web, nhưng tôi cũng có kiến thức chuyên ngành nhất định về GIS. Tôi hiểu được sự khác biệt giữa hình chiếu và hệ toạ độ.

Tôi làm khá nhiều với các hệ thống xây dựng dựa trên ArcGIS cho máy chủ và Công cụ cơ sở dữ liệu không gian ArcGIS của ESRI. Tôi không chỉ đủ khả năng nhận được một công việc nào đó, mà còn có thể nhận được công việc với mức lương rất cạnh tranh.

Tôi thấy không có nhiều lập trình viên có thêm chuyên môn “ngách” này, và điều này làm tôi có giá trị hơn trong mắt những nhà tuyển dụng đang tìm kiếm ứng viên có chuyên môn khác biệt như vậy.

Hãy tìm lối đi riêng cho mình

Tôi không nói các bạn đọc bài viết này đi tìm hiểu về GIS. Điều tôi muốn nói ở đây là việc bạn nên tìm hiểu những kiến thức đặc biệt hoặc khác biệt trong ngành nghề của mình. Đơn giản như trở thành một Dotnet Core REST API, hay có thể phát triển hệ thống tích hợp nếu bạn thực sự thích, hoặc cũng có thể tìm hiểu về blockchain,…

Mấu chốt ở đây là tìm ra thứ có thể giúp bạn khác biệt với những người khác và tập trung vào nó, và học những thứ bạn cần trong khi vẫn theo lĩnh vực chính của mình. Tôi nghĩ là hầu hết các công ty đang tìm kiếm người mà khi họ đưa bảng mô tả công việc, người đó không chỉ có thể làm hết tất cả mọi thứ trong cái mô tả công việc đó. Họ đang tìm kiếm người có thể giải quyết những vấn đề cụ thể nào đó. Và đó là cách mà bạn “bán thân”.

Có thể bạn sẽ không đồng ý với tôi về việc bạn đang “bán thân”, nhưng thực tế thì bạn đang đổi phần lớn tài nguyên có giá trị của mình (ở đây là thời gian) để lấy tiền. Vậy nên bạn cũng có thể đầu tư tối đa cho quỹ thời gian của mình để chuyển thành “đô la”.

Tìm cái gì đó mà bạn đam mê, nhưng cũng phải “bán” được. Tìm những vấn đề khác biệt và cụ thể và bắt đầu tập trung vào những gì giúp bạn giải quyết các vấn đề đó. Có thể là bảo mật ứng dụng web, hoặc là chuyển ứng dụng sang công nghệ không có máy chủ trên AWS? Hoặc có thể là về React/Redux và SPA’s,… tôi không biết, nhưng đừng tìm hiểu chung chung.

Tìm hiểu chung chung cũng được, nhưng bạn nên tìm một kỹ thuật đặc biệt nào đó rồi phát triển theo. Tôi có thể yêu cầu một mức lương cao hơn nhiều ở vị trí hiện tại vì tôi có thể giải quyết một vài vấn đề đặc thù liên quan đến GIS một cách nhanh chóng mà không cần phải tìm hiểu gì nữa.

Làm lập trình theo mô hình “chữ T”

niche

Một góc nhìn khác mà tôi muốn nói đến có liên quan đến phương pháp “chữ T”. Bạn có thể có bề rộng về kiến thức, nhưng phải có sự chuyên sâu cho một lĩnh vực đặc thù nào đó, giống cái hình tôi vẽ ở trên. Bạn phải hiểu là công việc của bạn dù là front-end hay back-end thì cũng không ảnh hưởng gì đến những lĩnh vực khác trong lập trình.

Cách để sống chuẩn chữ T

Tôi nghĩ là phương pháp này không chỉ áp dụng được rất nhiều cho ngành lập trình mà còn có thể áp dụng trong đời sống, và đây là một số cách để đạt được phương pháp “chữ T”:

  • Luôn học hỏi, kiên trì và không ngừng theo đuổi kiến thức.
  • Luôn chớp lấy cơ hội để phát triển, kể cả nếu bạn nghĩ là mình không đủ tiêu chuẩn.
  • Tìm nguồn động lực cho mình hoặc những điều gì có thể thôi thúc bạn tập trung.

Phản trực quan để tìm trọng tâm

Nghe có vẻ khá bất bình thường lúc đầu, nhưng bạn nên suy nghĩ về nó. Có những vấn đề đặc thù nào mà bạn có thể giải quyết bằng lập trình hoặc công nghệ không? Đó cũng sẽ là cách để bạn sử dụng thời gian và năng lượng hiệu quả nhất.

Tìm hiểu tổng quát để tìm được điều mà bạn thật sự đam mê, mặc dù nghe không vui lắm, nhưng hãy tìm kiếm thứ mà bạn đam mê và đắm chìm trong nó. Tôi đã từng đọc được là nếu bạn dành 5 tiếng một ngày đọc về một môn học cụ thể nào đó, chỉ sau 2 năm bạn có thể trở thành chuyên gia ở môn đó.

Nói một cách khác, có thể ngay lúc này bạn chưa nhận được gì, nhưng nó sẽ tích luỹ dần theo thời gian và sau một giai đoạn ngắn, bạn sẽ bắt đầu nhận ra được nhiều thứ hơn bạn tưởng.

  Quy tắc 24x3 cho sáng tạo trong lập trình!
  Những góc khuất "đeo bám" người làm nghề lập trình

Xem ngay những tin đăng tuyển dụng IT mới nhất trên TopDev

Top các Plugin jQuery tạo Lightbox free đẹp nhất cho website

Để showcase được sản phẩm/ dịch vụ của công ty thì bạn cần những hình ảnh/ video bắt mắt nhất mới nổi bật được. Ví dụ, dịch vụ của bạn là Khách sạn, thì cách tốt nhất để hút khách là bạn phải show ra nhiều hình ảnh đa dạng nhiều phòng, hồ bơi và các dịch vụ khác mà bạn cung cấp. Chứ một biển chữ thông tin sẽ không mảy may giúp ích được gì đâu!

Vì thế việc up thật nhiều ảnh là một chiến thuật tốt để “khoe khoang” về sản phẩm, tuy nhiên sẽ dễ sa vào tình trạng bị “nhiễu” – overload. Ảnh lẻ và một số element có thể sẽ không được tốt như kỳ vọng vì nó cũng cạnh tranh với hàng loạt các nhóm ảnh và các element khác trên trang web nữa.

Lúc này mới thấy Lightbox đóng vai trò khá quan trọng. Nó giúp tập trung sự chú ý của web visitor vào một ảnh/ một phần nhất định trong một gallery và portfolio trồi lên giữa page và làm mờ đi phần còn lại cho đến user thực hiện thao tác.

Vấn đề còn lại lúc này vẫn còn cả ngàn lightbox plugin ngoài kia, và khá khó để chọn ra cái nào hợp nhất cho page của bạn.

Bài viết này sẽ tổng hợp hết cho bạn Top 5 plugin lightbox cho năm 2022. Bài post sẽ cover tất cả các feature để bạn dễ chọn lựa cái thích hợp nhất cho page của mình.

1. LC Lightbox

Plugin đầu tiên chắc chắn là LC Lightbox. Nó có đầy đủ các feature bạn cần cho một lightbox plugin và nhiều tính năng khác nữa.

LC Lightbox

Một số feature nổi bật nhất gồm có:

  • Bạn có thể tạo slideshow cho bộ ảnh. Slideshow này có thể hiện tự động hoặc tuỳ chỉnh thủ công.
  • Bạn có thể đặt tiêu đề, description và tác giả riêng cho từng hình hoặc từng element.
  • Nó cũng đi với hệ thống định vị thumbnail và khả năng chia sẻ social.

Hầu như mọi lightbox plugin đều support các feature trên. Nhưng cái làm cho LC Lightbox đặc biệt là các feature phụ của nó, ví dụ như:

  • Khả năng kết hợp các loại content như ảnh và video từ YouTube, Vimeo, Dailymotion và iframe or other HTML elements,..
  • Nó cung cấp nút download trực tiếp mà không dựa trên các script server-side. Nó rất hữu ích nếu bạn muốn visitor download bất kí ảnh nào họ muốn
  • Nó support cả chuột – cũng như định vị bằng bằng keyboard.
  • Plugin đã được phát triển bằng các thiết bị cảm ứng. User sẽ có thể thao tác kéo thả (swipe và pinch) để dùng lightbox plugin trên smartphone.

Nếu như nhiêu đó vẫn chưa đủ ấn tượng thì các feature dưới đây đảm bảo sẽ “endgame” ngay:

  • Bạn có thể tạo cho từng item trong lightbox một link direct riêng
  • Visitor có thể zoom ảnh bất kì bằng cách double-click hoặc thao tác đơn giản là túm.
  • Bạn thậm chí còn có thể tích hợp comment vào tất cả các element chỉ bằng Facebook và Disqus!

List này thật sự còn rất dài, tôi tóm lại những điểm nổi bật chỉ để bạn hiểu nó khủng cỡ nào. Bạn có thể xem chi tiết hơn tất tần tật feature của nó tại Preview Page của LC Lightbox.

2. Responsive Bootstrap Portfolio và Lightbox

Nếu bạn đang chạy một website trên Bootstrap framework, plugin này sẽ là sự lựa chọn tốt nhất để tích hợp lightbox.

Bootstrap Portfolio and LightboxNó tận dụng tính năng sẵn có trong Bootstrap để plugin nhẹ hơn và nhiều tính năng hơn một thể. Nó sẽ tương thích với cả Bootstrap 3 và Bootstrap 4.

Dưới đây là một số feature khiến nó trở thành sự lựa chọn hàng đầu cho Bootstrap:

  • Plugin cho phép bạn dàn trải các element như ảnh và videos trong 1 hệ thống lưới từ 2, 3, 4, 5 đến 6 cột.
  • Nó tận dụng cả built-in carousel để ứng dụng vào chính nó. Bạn có thể xem nó live trên preview page này.
  • Độ responsive của Bootstrap cũng bao gồm trong plugin này. Nên lightbox trông sẽ đẹp hơn trên mobile và tablet cũng như desktop.

Một số feature khác bổ sung độ kul cho plugin này còn có:

  • 6 carousel khác nhau cho các content từ ảnh và video đến các post về eCommerce và blog post
  • Các layout mẫu độc đáo sẵn sàng giúp bạn chạy nhanh nhất có thể
  • Hệ màu có thể kết hợp để đảm bảo màu của lightbox hài hoà với những phần còn lại trên website
  • Các video nhúng từ YouTube hoặc Vimeo, hoặc self-host

Hiện tại tất cả các review của Responsive Bootstrap Portfolio và Lightbox đều là 5 sao. Đừng quên check các bản demos và tự trải nghiệm để hiểu thêm tại sao nó lại được yêu thích như vậy.

3. JQuery Thumbnail Gallery với LightBox

Plugin này mang đến cho bạn lightbox gồm bộ ảnh thumbnail rất nổi bật. Bạn sẽ dễ dàng add thêm ảnh và video ở nhiều định dạng/ tỉ lệ trong gallery, và plugin sẽ xử lý nó rất nhẹ nhàng trơn tru.

Một số feature điểm hình mà bạn sẽ thích:

  • Plugin cực kì dễ set up. Bạn sẽ sở hữu một bộ lightbox gallery full tính năng trong nháy mắt.
  • Bạn có thể chọn giữa layout theo grid hoặc theo line cho ảnh và video.
  • Việc kéo thả giữa nhiều gallery item khác nhau có thể bằng kéo thả đơn giản hoặc bằng các nút kéo.
  • Bạn còn có thể đồng bộ các thumbnail hiển thị trong lightbox theo hàng dọc hoặc hàng ngang.

Ngoài ra cũng có một số feature có thể cải thiện tối đa tính năng của plugin này:

  • Bộ định vị theo Keyboard giúp bạn dễ định vị các element khi nút navigation bị di chuyển “tứ phía” khi thay đổi kích thước hoặc tỉ lệ của ảnh và video.  
  • Bạn còn access được vào các public method khác nhau và callback để gút lại phần slideshow ở trong, các thao tác trên event như di chuột lên và khỏi, v.v….

Khi thử các demo khác, bạn sẽ để ý rằng plugin này offer các style tối giản cho gallery hoặc lightbox. Nếu bạn vẫn muốn kiểm soát phần style và đảm bảo rằng có gì bị mus thì hoàn hảo qua rồi.

Có thể bạn muốn xem:

  Những Plugin không thể thiếu cho VSCode
  Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 1)

4. Boxaroo Adaptive Lightbox

Plugin Boxaroo Adaptive Lightbox cũng offer rất nhiều feature thú vị. Nếu bạn muốn add thêm các animation vui nhộn và hiệu ứng mới cho trang nổi hơn, đây chắc chắn là plugin của bạn.

Boxaroo Lightbox

Dưới đây là một list các feature:

  • Animation là phần cứng sẽ tận dụng hết GPU và giúp bạn đạt năng suất tối đa.
  • Các lightbox mà bạn dễ dàng tạo nên nhiều loại content, từ Vimeo video đến các Flash game interactive.
  • Plugin phụ trách hoàn toàn và được thiết kế theo cách này để scale đúng chuẩn theo tuỳ device.
  • Plugin cũng “từ tốn” và các feature khác cũng giúp cho lightbox tương thích với các browser cũ mèm như IE7.

Ngoài ra, có một số feature làm Boxaroo đặc biệt hơn gồm có:

  • Nó có đến 70 GraphicRiver item khác nhau, đáng giá $287! Nó bao gồm các background và arrow làm Boxaroo trông rất chuyên nghiệp.
  • The plugin support các kiểu elements độc lập như caption, animation, hiển thị, scaling, và vị trí.
  • Bạn có thể tự kiểm soát các nút trước, sau cho mỗi lightbox.
  • Bạn có thể tạo background cho lightbox dùng ảnh, các tile, và các màu sắc mới.
  • Các shadows và highlights, gồm cả color, radius,… đều do bạn kiểm soát.

Hãy hãy xem thử bản demo có sẵn trên website của plugin, không phí thời gian đâu!

5. ModuloBox: NextGen Lightbox JavaScript Plugin

ModuloBox là một responsive lightbox plugin tập trung vào năng suất cũng như các tính năng.

ModuloBox NextGen Lightbox

Dưới đây là các feature làm cho plugin trở nên tuyệt vời:

  • Bên cạnh hình ảnh, bạn có thể add cả video, iframes, và các HTML5 content khác.
  • Nó đi kèm với các thao tác support gồm có double-tap và pinching. Visitor di động vẫn sẽ có được trải nghiệm tốt nhất.
  • Bạn còn có thể navigate qua lightbox bằng keyboard hoặc mouse.
  • Nó có hỗ trợ nhiều gallery trên cùng một page.
  • Bạn có thể navigate vào gallery với hỗ trợ của các thumbnail. Nó còn đi kèm với fullscreen mode với trải nghiệm mới lạ và một slideshow mode tự động kéo qua tất cả các ảnh.
  • Plugin cũng support RTL layout, đảo ngược hướng animation và caption.

ModuloBox offer nhiều thứ, tất cả các feature có tại product page.

Kết luận

Mỗi lightbox plugin mà chúng ta đã list tại đây có những feature riêng phù hợp cho những trường hợp riêng.

  • Nếu bạn muốn một plugin có feature lớn từ thumbnail navigation đến tích hợp comment, bạn có thể cân nhắc LC Lightbox.
  • Nếu website của bạn dựa trên Bootstrap framework, sử dụng một plugin như Responsive Bootstrap Portfolio và Lightbox có thể giúp bạn tận dụng tất cả các feature của framework.
  • Nếu bạn tìm cái gì đó dễ customize thì chỉ cần dùng plugin jQuery Thumbnail Gallery bằng Lightbox.
  • Cho những ai bay bổng thích animations và hiệu ứng trong lightbox, Boxaroo là sự lựa chọn hoàn hảo nhất.
  • Cuối cùng, ModuloBox sẽ cung cấp RTL support cho lightbox của bạn.

Bạn có thể xem thêm một số feature khác mà các plugin khác offer tại Envato Market nếu không có plugin nào trên đây hợp với project của bạn.

TopDev via Tut+

  Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 1)
  Responsive HTML bằng một dòng CSS

Tổng hợp Cheat Sheets cho AI, Neural Networks, Machine Learning, Deep Learning và Big Data

Tổng hợp Cheat Sheets cho AI, Neural Networks, Machine Learning, Deep Learning và Big Data

Tác giả: Stefan Kojouharov

Trong vài tháng qua, tôi đã bắt đầu sưu tập Cheat Sheet AI. Đôi khi tôi chia sẻ chúng với bạn bè và đồng nghiệp và gần đây tôi đã được hỏi rất nhiều, vì vậy tôi quyết định chia sẻ toàn bộ chúng cho cộng đồng. Để làm cho mọi thứ trở nên thú vị hơn và dẽ hiểu hơn, tôi đã thêm các mô tả và /hoặc trích đoạn cho mỗi chủ đề chính.

Đây là danh sách đầy đủ nhất về AI và Big-O:

Neural Networks

Neural Networks Graphs

Machine Learning Overview

Machine Learning: thuật toán Scikit-learn

Machine learning cheat sheet sẽ giúp bạn tìm được các estimatorphù hợp cho công việc, đó là phần khó nhất. Flowchart sẽ giúp bạn kiểm tra tài liệu và hướng dẫn sơ bộ của từng estimator sẽ giúp bạn biết thêm về các vấn đề và cách giải quyết nó.

Scikit-Learn

Scikit-learn (trước đây là scikits.learn) là một thư viện Machine learning miễn phí dành cho ngôn ngữ lập trình Python. Nó có các thuật toán phân loại, hồi quyphân cụm khác nhau bao gồm các vector machine hỗ trợ, random forests, gradient boosting, k-means và DBSCAN được thiết kế để tương tác với Python và thư viện khoa học NumPy và SciPy.

Machine learning: Cheat sheet thuật toán

Cheat sheet machine learning  này từ Microsoft Azure sẽ giúp bạn chọn các thuật toán machine learning thích hợp cho giải pháp phân tích tiên đoán của bạn. Thứ nhất, cheat sheet sẽ hỏi bạn về tính chất dữ liệu và sau đó đề xuất các thuật toán tốt nhất cho công việc của bạn.

Python for Data Science

TensorFlow

Google đã công bố thế hệ thứ hai của TPU, cũng như TPU sẵn có trong Google Compute Engine. [12] Các TPU thế hệ thứ hai cung cấp đến 180 teraflop hiệu suất, và khi được tổ chức thành các nhóm 64 TPUs cung cấp lên đến 11,5 petaflops.

Keras

Năm 2017, nhóm TensorFlow của Google đã quyết định hỗ trợ Keras thư viện lõi của TensorFlow. Chollet giải thích rằng Keras là một interface hơn là end-to-end machine-learning framework. Nó trình bày một tập các phép tính trừu tượng cấp cao, trực quan hơn giúp dễ dàng cấu hình neural networks bất kể thư viện backend.

Numpy

NumPy nhắm mục tiêu thực hiện tham chiếu CPython của Python, đó là một giao diện non-optimizing bytecode. Các thuật toán được viết cho phiên bản này của Python thường chạy chậm hơn nhiều so với các trình biên dịch tương đương. NumPy giải quyết vấn đề xử lý chậm bằng cách cung cấp mảng đa chiều, các hàm và toán tử hoạt động hiệu quả trên các mảng, đòi hỏi phải viết lại một số code, chủ yếu là inner loops sử dụng NumPy.

Pandas

Tên ‘Pandas’ bắt nguồn từ thuật ngữ ““panel data “, đây là thuật ngữ dùng cho bộ dữ liệu có cấu trúc đa chiều.

Data Wrongling

Thuật ngữ “data wrangler ” bắt đầu từ nền văn hoá nhạc pop. Trong bộ phim Kong 2017: Skull Island, nhân vật được đóng bởi nam diễn viên Marc Evan Jackson được giới thiệu là “Steve Woodward, người viết dữ liệu của chúng tôi”.

Data Wrangling với dplyr và tidyr

Scipy

SciPy được xây dựng trên đối tượng mảng NumPy và là một phần của stack NumPy bao gồm các công cụ như Matplotlib, pandas và SymPy, và một tập hợp các scientific computing libraries mở rộng. Stack NumPy này có những người dùng tương tự với các ứng dụng khác như MATLAB, GNU Octave, và Scilab. Stack NumPy cũng đôi khi được gọi là stack SciPy. [3]

Matplotlib

Matplotlib là một thư viện cho ngôn ngữ lập trình Python và các phép toán mở rộng của NumPy. Nó cung cấp một API hướng đối tượng để nhúng các mảnh vào các ứng dụng sử dụng các bộ dụng cụ GUI chung như Tkinter, wxPython, Qt, hoặc GTK +. Ngoài ra còn có một thủ tục gọi lf “pylab” interface dựa trên tuyên bố machine (như OpenGL), được thiết kế để gần giống như của MATLAB, mặc dù việc sử dụng nó là nản lòng SciPy sử dụng matplotlib.

Pyplot là một mô-đun matplotlib cung cấp một interface  giống như MATLAB. [6] Matplotlib được thiết kế để có thể sử dụng được như MATLAB, với khả năng sử dụng Python, với lợi thế là nó miễn phí.

Data Visualization

PySpark

Big-O

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

Có thể bạn muốn xem:

  Bí kíp chinh phục tất cả nhà tuyển dụng IT trong vòng phỏng vấn (Phần 1)

  5G & IoT hứa hẹn điều gì trong tương lai?

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

  Đừng nghi ngờ nữa, 8 xu hướng Fintech này sẽ thống trị thế giới năm 2022

Đừng nghi ngờ nữa, 8 xu hướng Fintech này sẽ thống trị thế giới năm 2022

“Tương lai đã mở ra khi chúng ta còn chờ đợi” Câu nói trên được chứng minh là hoàn toàn đúng trong sự phát triển của ngành tài chính. Fintech ở thế kỉ 21 đã chứng kiến những thay đổi chóng mặt về cách mạng hóa các quy trình, kiến thức và dịch vụ tài chính.

Dưới đây là 8 xu hướng Fintech đang chiếm lĩnh thế giới và nhất định sẽ tiếp tục phát triển hơn vào năm 2022.

1. Trợ lý kỹ thuật số nhân tạo (Artificial Digital Assistant)

Artificial intelligence for voice (tức là trợ lý điều khiển bằng giọng nói), chúng ta đã thấy sự phát triển của nó từ các video games cho đến trợ lý giọng nói từ các ứng dụng của Google hoặc sử dụng trợ lý giọng nói để đọc sách.

Bạn đã bao giờ gọi cho ngân hàng để điều tra hoặc để xử lý một vấn đề và cuối cùng không được hỗ trợ hoặc mất quá nhiều thời gian để trả lời? Giọng nói trí thông minh nhân tạo được thiết lập để giải quyết vấn đề trên. Call centers sẽ sử dụng bots để gọi trực tiếp nhanh hơn và hiệu quả hơn.

Trên thực tế, trợ lý giọng nói đang được phát triển để xử lý các hoạt động của ngân hàng. Ngân hàng OCBC gần đây đã hợp tác với Google để ra mắt dịch vụ ngân hàng thoại AI đầu tiên tại Singapore.

Công nghệ cho phép khách hàng trò chuyện về các dịch vụ ngân hàng bao gồm tính lãi vay, lập kế hoạch tiết kiệm trong tương lai, cập nhật thị trường tài chính mới nhất và tìm kiếm các chi nhánh hoặc ATM gần đó.

banking

Chatbots cũng đã trở nên phổ biến bằng cách cho phép khách hàng trò chuyện thuận tiện với robot trong thời gian thực và nhận được câu trả lời chính xác. Bots cũng đang được sử dụng để phát hiện gian lận.

Hiệu quả và tiện lợi!

2. Ngân hàng kỹ thuật số (Digital-only Banks)

Phép thuật có xu hướng làm cho mọi thứ biến mất hoặc xuất hiện từ hư không. Theo truyền thống, ngân hàng là các tổ chức hữu hình cung cấp dịch vụ tài chính. Tuy nhiên, với sự phát triển của Fintech, vẫn là những tổ chức cung cấp dịch vụ tài chính, nhưng bạn lại không không thể thấy họ trực tiếp ngoài đời.

Họ không tồn tại hữu hình do đó sẽ không có các chi nhánh ngân hàng.

Các ngân hàng kỹ thuật số đang ngày càng trở nên phổ biến vì họ có thể cung cấp được các dịch vụ tại nhà hoặc văn phòng của khách hàng mà không cần phải đến ngân hàng, từ giờ khách hàng có thể truy cập vào ngân hàng qua các trang web và ứng dụng.

Fintech đang lan rộng như một cuộc cháy rừng và vì vậy việc đi đến các chi nhánh ngân hàng truyền thống dự kiến sẽ giảm 36% trong giai đoạn 2017-2022, trong khi các giao dịch di động dự kiến sẽ tăng 121% trong cùng kỳ.

Một ví dụ về ngân hàng kỹ thuật số Revolut, đơn vị cung cấp ứng dụng tài chính cho phép trao đổi cả tiền tệ và tiền điện tử. Người dùng kiểm soát tài chính của họ ở đầu ngón tay bằng ứng dụng này. Nó cũng phân loại các khoản thanh toán để người dùng có thể thấy chi tiêu của họ một cách chi tiết.

Tính đến năm 2018, Revolut có hơn 2 triệu người dùng và có từ 6.000 đến 8.000 khách hàng mới mỗi ngày.

Xem thêm các công ty ngành ngân hàng tại Topdev

3. Sự sụp đổ của tiền giấy

Fintech cứu lấy cây xanh bằng cách giảm nhu cầu về tiền giấy (chỉ đùa thôi). Đã qua rồi cái thời người ta cần mang theo một chiếc ví đầy tiền để mua hàng.

Các giải pháp thanh toán hiện nay rất nhiều, đặc biệt là với sự gia tăng của tiền điện tử. Các cá nhân, cũng như các công ty đang dần thay thế các các hệ thống ngân hàng truyền thống nhằm giảm thiểu hoặc tránh những hạn chế về rủi ro.

Nghị viện châu Âu đã nâng tiền điện tử lên vị trí cao hơn, bằng cách đưa ra một chỉ thị về dịch vụ thanh toán thứ hai cho phép tất cả các doanh nghiệp có thể lựa chọn để sử dụng thay thế ngân hàng. Ngoài ra, chỉ thị cho phép thanh toán với bên thứ ba đối với các tài khoản được lưu trữ bởi các ngân hàng.

4. Công nghệ sinh trắc học (Biometric technologies)

Thời đại kỹ thuật số mang lại nhiều ưu điểm nhưng cũng mang lại những khuyết điểm đi kèm. Fintech bị thách thức bởi các cuộc tấn công mạng và bảo mật nói chung. Lĩnh vực tài chính là một lĩnh vực quan trọng do đó an ninh là ưu tiên hàng đầu của Fintech.

Do đó công nghệ sinh trắc học được áp dụng để hạn chế các rủi ro xảy ra. Ngoài ra, việc sử dụng sinh trắc học để xác thực đã trở thành cứu cánh cho khách hàng vì sự tiện lợi của nó. Bạn không còn cần phải nhớ mật khẩu hoặc lo lắng rằng bạn đã quên chúng.

Một số ngân hàng đã bắt đầu đầu tư vào xác thực dựa trên sinh trắc học, sử dụng máy ảnh smartphone để quét con ngươi và vân tay có sẵn từ điện thoại.

Do đó, sự lo lắng về bảo mật đã giảm đi rất nhiều vì mỗi dấu vân tay là duy nhất, không ai có thể tấn công bảo mật tài khoản của bạn.

5. Blockchain: Ông chủ của cuộc cách mạng Fintech

Một trong những cuộc cách mạng Fintech vĩ đại nhất đã quét sạch mọi thứ khỏi chân của nó là blockchain. Tiền điện tử đã thay đổi đáng kể giao dịch tiền tệ và lĩnh vực tài chính.

blockchain

Blockchain đã và đang chiếm lĩnh hệ thống ngân hàng truyền thống từ từ theo thời gian. Tại sao? Một trong những lý do là giảm bớt giấy tờ vì nó cập nhật dựa vào kỹ thuật số trong thời gian thực trong khi các ngân hàng lưu trữ tất cả các hồ sơ theo một cách không thay đổi.

Phí chuyển khoản và chuyển khoản được giảm bằng cách sử dụng bitcoin, thanh toán bù trừ và thanh toán ngay lập tức, các khoản vay và ứng dụng tín dụng có thể được truy cập tại chỗ và người tiêu dùng có quyền truy cập ngay vào số tiền họ cần và câu trả lời họ yêu cầu.

“Phong trào Blockchain” mạnh mẽ đến mức khoảng 90% các ngân hàng lớn ở Bắc Mỹ và Châu Âu đang thực hiện blockchain để thanh toán. Theo một nghiên cứu của IBM, dự kiến khoảng 65% ngân hàng sẽ áp dụng công nghệ blockchain vào năm 2022.

Tham khảo thêm các vị trí tuyển dụng Blockchain lương cao cho bạn

6. Hợp tác thông minh (Smart Collaborations)

Thay đổi là không thể tránh khỏi. Trong lĩnh vực tài chính, người ta phải theo kịp sự thay đổi để duy trì sự phù hợp trên thị trường. Do đó, khi sức ép đè nặng các ngân hàng lớn phải đổi mới, và các công ty khởi nghiệp tiếp tục phấn đấu để thu hút cũng như giữ chân khách hàng, quan hệ giữa hai bên là sự hợp tác công bằng.

MasterCard’s Start Path là một ví dụ tuyệt vời. MasterCard chọn các công ty khởi nghiệp có tiềm năng thông qua chương trình sáu tháng, sau đó họ hợp tác để cung cấp dịch vụ tốt hơn và thu được lợi nhuận cùng có lợi.

Chương trình bắt đầu với Mobeewave, ngân hàng thanh toán trực tuyến với Revolut và thanh toán trong các mạng xã hội từ PayKey.

Những người thành công nói rằng, hợp tác là một hình thức quan trọng nhất để cung cấp các công nghệ tập trung vào khách hàng một cách nhanh chóng và hiệu quả.

7. Sức mạnh của tự động hóa

Tự động hóa mang đến nỗi sợ hãi cho nhiều nhân viên. Tuy nhiên, Trí tuệ nhân tạo đã được các ngân hàng sử dụng để tăng hiệu quả. Trên thực tế, theo McKinsey, làn sóng tự động hóa thứ hai và AI sẽ xảy ra trong vài năm tới và máy móc sẽ thực hiện 10 đến 25% công việc của ngân hàng.

Điều này, tất nhiên, sẽ giúp tăng hiệu quả và giảm các lỗi liên quan đến con người. Ngoài ra, nó sẽ giúp cho nhân viên trong lĩnh vực tài chính một cơ hội để tập trung vào các nhiệm vụ đòi hỏi sức mạnh não bộ.

Điều này có ý nghĩa gì với khách hàng? Ít thời gian hơn và hiệu quả cao hơn trong các hệ thống ngân hàng.

8. Sự phát triển của việc cho vay dữ liệu

Big data luôn là vấn đề lớn đối với bất kỳ ngành nào và ngành tài chính cũng không ngoại lệ. Cuộc cách mạng Fintech đã tìm cách thay thế điểm tín dụng FICO thông qua việc cho vay dữ liệu.

FICO được xem là đã lỗi thời trong một số năm nay nhưng thông qua việc cho vay dữ liệu, giờ đây các ngân hàng có thể truy cập dữ liệu hữu ích để tạo ra mô hình tín dụng tốt hơn và bằng cách này xác định trình độ và sự phù hợp của khoản vay.

Kết luậnXu hướng Fintech được tạo ra để làm cho lĩnh vực tài chính hiệu quả và thuận tiện hơn bên cạnh giảm sự thiếu chính xác. Công nghệ tiếp tục phát triển và ai biết được Fintech sẽ phát minh ra gì vào ngày mai? Tính đến hiện nay, Startup Fintech Việt Nam mọc lên vô số kể và được dự đoán thị trường fintech Việt Nam có thể đạt 8 tỉ đô la Mỹ năm 2020, Có thể nói dù là doanh nghiệp hay cá nhân thì Fintech vẫn là một lĩnh vực mang lại nhiều cơ hội phát triển nhất tại Việt Nam trong thời điểm hiện nay. Tuy nhiên để trang bị cho mình một lượng kiến thức và các bệ phóng cần thiết để đón đầu xu hướng này thật không dễ dàng. Đến với chuỗi topic FUTURE OF FINTECH & MOBILE PAYMENT tại Vietnam Mobile Day năm thứ 9 do TopDev tổ chức vào tháng 6 tới này!

Bạn sẽ có cơ hội:

  • Networking với những decision maker trong ngành, gặp gỡ với các đối tác cực kỳ tiềm năng.
  • Cập nhật những số liệu nghiên cứu thị trường sát nhất trong ngành Fintech tại Việt Nam.
  • Tham gia các topic nóng nhất liên quan đến các case study thành công tại Việt Nam  “người thật việc thật”.

TopDev Blog via espeo.eu

Tài liệu làm chủ Python trong vòng 4 tuần (Phần 1)

Python là ngôn ngữ lập trình hướng đối tượng, thông dịch, mã nguồn mở, đa mục đích và là ngôn ngữ lập trình được dùng khá phổ biến trên thế giới hiện nay. Là một ngôn ngữ có danh tiếng rất tốt trong giới lập trình, đã được sử dụng để viết nhiều chương trình phổ biến như Youtube, DropBox, Google, Instagram, và Spotify.

Tuyển dụng python các công ty hot nhất

Hai lợi thế chính của Python nằm ở sự đơn giản và linh hoạt của ngôn ngữ. Với cú pháp đơn giản của nó giúp các developer dễ dàng tìm hiểu, đọc và chia sẻ. Theo một báo cáo, có tới 145.000 custom-built software package đã được tải lên cho online repository. Chúng trải dài từ nhiều lĩnh vực bao gồm từ phát triển trò chơi đến thiên văn học, và có thể được cài đặt và thêm vào một Python program chỉ trong tích tắc. Sự linh hoạt này này có nghĩa là những cơ quan tình báo có thể sử dụng nó cho hacking, Google cho thu thập dữ liệu các trang web, Pixar để tạo phim và Spotify để giới thiệu các bài hát. Một trong số các gói phổ biến nhất là “machine learning”, được dùng cho những task với các gói data số lượng lớn mà vốn sẽ bất khả thi nếu dùng sức người.

Nhằm tạo điều kiện nghiên cứu cho các bạn mới bắt đầu nắm bắt xu hướng, tiếp xúc với Python, TopDev giới thiệu đến bạn series video “LÀM CHỦ PYTHON TRONG VÒNG 4 TUẦN”

TopDev mời bạn tiếp tục phần tiếp theo– khi bạn đã “tinh thông” Phần 1 nhé!

Tham khảo các vị trí lập trình Python (All levels) tại TopDev

  Tài liệu làm chủ Python trong vòng 4 tuần (Phần 2)

Những việc “tối kị” mà lập trình viên không bao giờ nên làm!

nhung-viec-toi-ki-ma-lap-trinh-vien-khong-bao-gio-nen-lam

Người viết: Joel Spolsky

Cuối cùng thì bản dùng thử public đầu tiên của Netscape 6.0 cũng đã được tung ra, trong khi chưa từng có bản 5.0 nào cả. Phiên bản lớn gần nhất của trình duyệt này, version 4.0, đã được xuất bản từ gần 3 năm trước. Ba năm là khoảng thời gian dài khủng khiếp trong thế giới Internet. Trong quãng thời gian này, Netscape chỉ có thể ngồi nhìn thị phần của họ tụt giảm mạnh, một cách bất lực.

Tôi có chút thái quá khi chỉ trích họ về việc chờ đợi quá lâu giữa các kỳ xuất bản. Họ không cố tình làm như vậy, đúng không?

Có đấy. Cố tình đấy. Họ mắc phải một sai lầm chiến lược tồi tệ nhất mà một công ty phần mềm có thể đưa ra:

Họ quyết định code lại toàn bộ từ đầu.

Netscape không phải là công ty đầu tiên mắc phải sai lầm này. Borland cũng đã từng, đó là khi họ mua Arago và cố gắng biến nó thành dBase dành cho Windows, một dự án suy đồi kéo dài quá lâu, và để cho Microsoft Access “cướp miếng ăn” của họ trong lĩnh vực này. Sau đó, họ lại phạm sai lầm tương tự khi viết lại Quattro Pro từ đầu và làm người ta sững sờ về số tính năng ít ỏi mà nó cung cấp. Microsoft cũng suýt mắc phải lỗi đó, họ cố viết lại từ đầu Word cho Windows trong một dự án thất bại tên là Pyramid – dự án đã bị đóng cửa, quăng ra ngoài đường, dọn dẹp không còn chút tàn tích. Vẫn may cho Microsoft, họ chưa bao giờ dừng bảo trì bộ khung code cũ, họ vẫn có sản phẩm để deliver, vậy nên cho dự án kia “chỉ” gây ra một thảm họa tài chính thay vì một thảm họa chiến lược.

Chúng ta là những lập trình viên. Lập trình viên thì có bản năng của kiến trúc sư, và việc đầu tiên họ muốn làm khi được đưa tới một công trình là ủi phẳng chỗ đó để xây lên một cái gì đó thật đẹp. Chúng ta không thấy kích thích bởi những việc như: tu sửa căn nhà, cải tạo sân vườn, trồng thêm mấy chậu hoa.

Có một lý do làm cho các lập trình viên luôn luôn muốn đập bỏ source code cũ đi và làm lại từ đầu. Lý do đó là: họ nghĩ source code cũ là một đống tạp nham thối hoắc. Và đây là một đánh giá thú vị về việc đó: có lẽ họ đã sai. Nguyên nhân làm họ coi source code cũ như một đống rác rưởi là vì quy luật căn bản và thiết yếu của việc lập trình:

Đọc code thì khó hơn viết code

Đó là lý do vì sao việc tái sử dụng code lại khó như vậy. Nó cũng giải thích nguyên nhân mỗi người trong team bạn dùng một function khác nhau để tách chuỗi thành mảng chứa các chuỗi con. Họ viết function của riêng họ vì nó dễ hơn và tiện hơn việc tìm hiểu cách hoạt động của các function cũ.

Như là hệ quả tất nhiên của tâm lý trên, bạn có thể hỏi gần như mọi lập trình viên về phần code họ đang làm việc.
“Cái source code đấy hả? Nó là một đống bùng nhùng lộn xộn to oành”, họ sẽ kể như vậy.
“Tôi chỉ mong được quăng mẹ nó đi để code lại”.
“Đoạn code này đã làm tôi bị ung thư”.

Tại sao nó lại là một đống tạp nham bốc mùi?

“Mẹ kiếp,”, họ bảo, “nhìn cái function này đi. Nó dài tới 2 trang giấy! Chẳng có dòng nào liên quan đến nghiệp vụ này cả. Tôi không hiểu một nửa số dòng code gọi API này để làm quái gì nữa.”

Trước khi phần mềm xử lý bảng tính mới của Borland ra đời, Philippe Kahn, nhà sáng lập ưa hoa mĩ của Borland, đã rất huênh hoang trong các buổi họp báo về chuyện Quattro Pro sẽ tốt hơn nhiều so với Microsoft Excel, bởi vì nó được code lại từ đầu. Toàn bộ source code đều là mới! Như thể source code để lâu thì sẽ bị rỉ sét vậy.

Có thể bạn muốn xem:

  Bài học tôi rút ra được từ việc "clone" ứng dụng Uber
  Top các khóa học Computer Science, Programming, Data Science MIỄN PHÍ cần học ngay!

Quan niệm code mới tốt hơn code cũ thì hiển nhiên là vô lý. Code cũ là cái đã được sử dụng. Nó đã được test. Nhiều bug đã được phát hiện và đã được fix. Không có vấn đề gì ở đấy cả. Source code đó không tự thâu tóm đống bug bằng việc chỉ nằm im đâu đó trong ổ cứng của bạn đâu nhé. Au contraire, baby! (Nhầm rồi cưng!) Phần mềm máy tính được xem như giống chiếc xe Dodge Dart cũ, sẽ rỉ sét khi nằm mãi trong garage hay sao? Hay là phần mềm giống như con teddy bear, trông sẽ thảm hại nếu không được làm toàn bộ từ những nguyên liệu mới?

Quay lại với cái function dài 2 trang giấy. Vâng, tôi biết, nó chỉ là một function đơn giản để hiển thị một window dialog, nhưng nó có mọc thêm tóc tai lông lá và không ai hiểu tại sao. Ừm, để tôi nói cho bạn lý do: mấy cái đó từ fix bug mà ra. Một trong số chúng để fix bug mà bạn Nancy gặp khi cố install chương trình trên máy tính không có Internet Explorer. Một chỗ khác thì fix bug xảy ra trong điều kiện máy thiếu memory. Chỗ khác thì fix bug về trường hợp file được chứa trong một cái đĩa mềm và người dùng cao hứng rút cái đĩa ra trong lúc đang chạy. Đoạn code gọi LoadLibrary trông xấu tệ hại nhưng nó giúp chương trình hoạt động trên version cũ của Windows 95.

Các bug kể trên đã sống nhiều tuần trời trước khi chúng được phát hiện. Lập trình viên có lẽ đã mất vài ngày tái hiện và fix bug. Nếu chúng giống hầu hết các bug thông thường khác, để fix được có lẽ chỉ cần 1-2 dòng code, hoặc thậm chí là sửa vài ký tự, nhưng rất nhiều công sức và thời gian đã phải bỏ ra để biết được vài ký tự cần sửa đó.

Khi bạn vứt bỏ code cũ để làm lại, bạn đang ném đi tất cả những hiểu biết trên. Tất cả những phần fix bug được tổng hợp lại. Hàng nhiều năm trời công sức lập trình.

Bạn đang ném đi uy thế đứng đầu trong lĩnh vực đã làm. Bạn đang tặng món quà trị giá 2 đến 3 năm cho các đối thủ cạnh tranh, và hãy tin tôi đi, đó là khoảng thời gian rất dài xét theo “năm phần mềm”.

Bạn đang tự đưa mình vào tình thế cực kỳ nguy hiểm khi mà bạn sẽ phải deliver một version code cũ trong vài năm, hoàn toàn không có khả năng đưa ra các thay đổi về chiến lược hoặc đáp ứng những tính năng mới mà thị trường đòi hỏi, bởi vì bạn không có source code để deliver. Bạn thậm chí có thể phải đóng cửa doanh nghiệp trong quãng thời gian đó.

Bạn đang lãng phí một khoản chi phí khó có thể chấp nhận, cho việc viết lại source code vốn đã có sẵn.

Có phương án thay thế nào không? Có vẻ họ ngầm hiểu rằng bộ khung code cũ của Netscape là thực sự tệ hại. Ừm, có thể đúng vậy, nhưng bạn biết điều gì khác về nó không? Nó vẫn hoạt động khá ổn trên một số lượng cực lớn các hệ thống máy tính đang vận hành ngoài kia.

Khi các lập trình viên nói bộ source của họ là đống tạp nham thối hoắc (họ vẫn nói vậy suốt), có 3 yếu tố sai lầm ở đấy:

Đầu tiên, có các vấn đề thuộc về kiến trúc phần mềm. Bộ source không được thiết kế đúng chuẩn. Phần code kết nối mạng tự bật ra một cái popup dialog từ giữa hư không; cái này nên được xử lý ở phần code giao diện mới phải. Những vấn đề kiểu này có thể được giải quyết gọn gàng trong một lần sửa, bằng cách cẩn thận di chuyển cách đoạn code, format lại source, cập nhật phần giao diện. Những việc này có thể được một dev thực hiện một cách cẩn thận và kiểm soát chặt chẽ những đoạn code đã thay đổi, để không làm các phần việc khác bị gián đoạn. Thậm chí các thay đổi tương đối lớn về mặt cấu trúc cũng có thể được thực hiện mà không cần xoá bỏ source code cũ. Hồi làm dự án Juno, có thời điểm chúng tôi trải qua vài tháng để thiết kế lại kiến trúc: chỉ di chuyển các thứ qua chỗ nọ chỗ kia, dọn dẹp gọn gàng, tạo các class base có ý nghĩa, và tạo các interface rõ ràng cho việc giao tiếp giữa các module. Nhưng chúng tôi đã làm rất cẩn trọng, với bộ khung code có sẵn, và không hề gây ra bug mới hay phải bỏ đi các phần code vốn đang hoạt động đúng.

Lý do thứ 2 mà lập trình viên nghĩ code cũ kém chất lượng, đó là về hiệu quả performance thấp. Phần code dựng hình của Netscape được đồn thổi là chạy chậm. Nhưng nó chỉ ảnh hưởng đến một phần nhỏ trong cả dự án, phần mà bạn có thể sửa để tối ưu hoá hoặc thậm chí viết lại. Bạn không cần phải viết lại cả bộ source làm gì cả. Khi thực hiện việc tối ưu hoá, 1% khối lượng source sẽ chiếm 99% hiệu quả performance.

Thứ 3, source code trông xấu đau xấu đớn. Trong một dự án tôi từng làm, thật sự đã có một kiểu dữ liệu được khai báo tên là FuckedString. Một dự án khác thì ban đầu dùng ký tự gạch dưới để khai báo biến class member, nhưng về sau lại dùng cái chuẩn hơn là “m_”. Vậy nên một nửa số function có tên bắt đầu bằng “_” và nửa còn lại bắt đầu bằng “m_”, trông rất xấu và thiếu nhất quán. Thực sự thì kiểu vấn đề này bạn có thể giải quyết bằng một macro trong Emacs chỉ trong 5 phút, không cần phải viết lại từ đầu đống function kia.

Một điều quan trọng là bạn phải nhớ rằng khi phát triển lại toàn bộ hệ thống từ đầu thì TUYỆT ĐỐI KHÔNG CÓ LÝ DO NÀO để tin chắc rằng bạn sẽ làm tốt hơn lần đầu tiên. Trước tiên thì team mới của bạn có lẽ không còn là team phát triển của version đầu, nên thật ra bạn sẽ không có “nhiều kinh nghiệm hơn” trước kia. Có lẽ bạn sẽ lại gặp phải những lỗi cũ một lần nữa, thêm vào đó là phát sinh những vấn đề mới mà version trước không có.

Câu thần chú cổ điển “đập đi làm lại” là rất nguy hiểm khi áp dụng vào các ứng dụng mang tính thương mại có quy mô lớn. Nếu bạn chỉ đang viết code thử nghiệm, có lẽ bạn sẽ muốn xé bỏ cái function viết tuần trước khi bạn nghĩ ra một thuật toán tốt hơn. Cái đó thì ok thôi. Có lẽ bạn sẽ muốn định dạng lại một class nào đó cho dễ sử dụng. Cũng ổn thôi. Nhưng bỏ đi toàn bộ chương trình cũ là một việc dại dột và nguy hiểm, và nếu Netscape thực sự có được bộ máy giám sát chuyên nghiệp giàu kinh nghiệm trong ngành công nghiệp phần mềm, có lẽ họ đã không tự bắn vào chân mình một phát đầy đau đớn như vậy.

TopDev via Reddit Việt Nam

  Quy tắc 24x3 cho sáng tạo trong lập trình!
  Cơ hội nghề nghiệp về CNTT của các doanh nghiệp Nhật

Xem ngay những tin đăng tuyển dụng IT mới nhất trên TopDev

10 dự đoán hàng đầu của ngành IT trên toàn thế giới

Theo báo cáo thứ ba từ International Data Corporation (IDC), đến năm 2023, gần như mọi doanh nghiệp sẽ hoạt động theo cơ chế ‘digital native’ khi nền kinh tế toàn cầu số hóa tiếp tục mở rộng. Tổ chức này đã đưa ra 10 dự đoán cho bối cảnh nền công nghiệp IT chuyển sang năm 2022 và hơn thế nữa, khi các nhà lãnh đạo CNTT và doanh nghiệp tiếp tục trải qua chuyển đổi kỹ thuật số (Digital Transformation).

Các tổ chức đang được xây dựng lại xung quanh các công nghệ nền tảng thứ 3 như Cloud, Mobile, phân tích big data, phương tiện truyền thông xã hội và được kích hoạt thêm bởi các “công cụ tăng tốc đổi mới” như Internet of Things (IoT), trí tuệ nhân tạo (AI) và tăng cường và thực tế ảo (AR / VR). Mặc dù nhiều tổ chức đang trên đường chuyển đổi bằng cách sử dụng các công nghệ này, nhưng chương tiếp theo về đổi mới công nghệ sẽ yêu cầu các công ty mở rộng phạm vi kỹ thuật số, cải thiện trí thông minh, tăng phát triển ứng dụng và dịch vụ cũng như đáp ứng nhu cầu bảo mật và nhu cầu của khách hàng. Còn bây giờ, hãy điểm qua 10 dự đoán hàng đầu của ngành IT trên toàn thế giới của IDC.

  1. Đến năm 2022, hơn 60% GDP toàn cầu sẽ được số hóa với sự tăng trưởng trong mọi ngành được thúc đẩy bởi các dịch vụ, hoạt động và mối quan hệ được tăng cường kỹ thuật số.

Theo báo cáo, các nỗ lực chuyển đổi kỹ thuật số phải dẫn đầu trong danh sách ưu tiên của các nhà lãnh đạo doanh nghiệp cấp cao. Và những người không chuyển đổi hoạt động cũng như dịch vụ của họ sẽ thua trong cuộc cạnh tranh này vì thị trường truyền thống đã bị phá vỡ.

  1. Đến năm 2023, 75% tổng chi tiêu cho CNTT sẽ dành cho các công nghệ platform thứ 3, vì hơn 90% tất cả các doanh nghiệp muốn xây dựng một môi trường CNTT đúng chất “digital native” để phát triển mạnh trong nền kinh tế kỹ thuật số.

digital native

Theo IDC, gần một nửa số doanh nghiệp nói rằng họ “digitally determined”, có nghĩa là họ đã đặt ra để phát triển một chiến lược và kiến trúc kỹ thuật số tích hợp khả năng bắt chước các tổ chức “digital native” (dân cư số). Điều này có nghĩa là họ sẽ sử dụng Cloud, Agile và DevOps, các nền tảng và cộng đồng đổi mới kỹ thuật số và quản lý dữ liệu tích hợp và kiếm tiền.

  1. Đến năm 2022, hơn 40% triển khai Cloud của các tổ chức sẽ bao gồm Điện toán ranh giới (edge computing) và 25% thiết bị và hệ thống điểm cuối sẽ thực hiện các thuật toán AI.

Cơ sở hạ tầng đám mây và các ứng dụng và dịch vụ doanh nghiệp đã chuyển sang Edge Computing để tăng sự kết nối với các thiết bị và nguồn dữ liệu. “Các dịch vụ AI sẽ là một trong những dịch vụ Cloud công cộng đầu tiên và biến đổi nhất, được phân phối trên các rìa biên giới.

  1. Đến năm 2022, 90% tất cả các ứng dụng sẽ có kiến trúc microservice góp phần cải thiện khả năng thiết kế, gỡ lỗi, cập nhật và tận dụng code của bên thứ ba; 35% của tất cả các ứng dụng sản xuất sẽ có nguồn gốc từ Cloud.

Trong nền kinh tế kỹ thuật số, các công ty phải cung cấp các ứng dụng chất lượng cao và đủ nhanh để đáp ứng nhu cầu kinh doanh. Điều này đang thúc đẩy sự chuyển đổi sang “ứng dụng hyperagile” hoặc những ứng dụng có tính mô đun hóa cao, phân tán, cập nhật liên tục và sử dụng các công nghệ dựa trên đám mây như container và máy tính không có máy chủ. Việc kết hợp các ứng dụng này với các phương pháp Agile và DevOps sẽ giúp cho doanh nghiệp có thể tăng tốc khả năng đổi mới so với các phương pháp trước đây.

  1. Đến năm 2024, một thế hệ mới các developer sẽ code mà không cần kịch bản tùy chỉnh, điều này sẽ giúp mở rộng nguồn nhân lực về developer thêm 30%, đẩy nhanh chuyển đổi kỹ thuật số.

low code, no code

Sự gia tăng của các nền tảng phát triển low code, no code và các công cụ phát triển theo mô hình sẽ cung cấp cho các doanh nghiệp tiếp cận đến một lớp các nhà phát triển mới mà ở đó có thể ứng dụng nhiều giải pháp kỹ thuật số hơn. Đến năm 2024, IDC dự đoán các nhà phát triển mới sẽ tăng tổng số developer toàn cầu lên gần một phần ba.

  1. Từ năm 2018 đến năm 2023, với nhiều công cụ/nền tảng mới hơn, nhân lực nhiều hơn, các phương thức agile và cả những lần sử dụng lại code, tất cả sẽ tạo ra hơn 500 triệu ứng dụng logic mới tương đương với số lượng được xây dựng trong hơn 40 năm qua.

Báo cáo lưu ý, việc chuyển sang các công nghệ ứng dụng hyperagile và sự bùng nổ của nhân lực developer nhờ low code và các công cụ không cần code sẽ dẫn đến sự tăng trưởng nhanh chóng trong phát triển ứng dụng và dịch vụ cũng như tốc độ và quy mô triển khai.

“Khả năng tăng tốc khối lượng và tốc độ đổi mới kỹ thuật số sẽ là chuẩn mực mới quan trọng nhất cho các tổ chức cạnh tranh trong nền kinh tế kỹ thuật số”, Gens cho biết trong bản phát hành.

  1. Đến năm 2022, 25% điện toán đám mây công cộng sẽ dựa trên các bộ xử lý không nhất thiết phải là x86; đến năm 2022, các tổ chức sẽ đầu tư nhiều hơn cho các ứng dụng SaaS dọc (đáp ứng nhu cầu của một ngành cụ thể) so với các ứng dụng ngang (tập trung vào một danh mục phần mềm).

Số lượng các trường hợp sử dụng được phục vụ bởi CNTT sẽ tăng đáng kể trong những năm tới, tạo ra nhiều nhu cầu CNTT chuyên biệt. Các yêu cầu xử lý AI đang thúc đẩy nhu cầu về bộ xử lý mạnh hơn và các tổ chức đang chọn Saas dọc nhiều hơn  gần gấp đôi so với các ứng dụng ngang.

VMD2019

  1. Đến năm 2024, giao diện người dùng hỗ trợ AI và tự động hóa quá trình sẽ thay thế một phần ba số lượng screen-based apps ngày nay. Đến năm 2022, 30% doanh nghiệp sẽ sử dụng công nghệ đàm thoại để thu hút khách hàng.

AI sẽ ngày càng được sử dụng làm giao diện người dùng chính cho một số ứng dụng và dịch vụ, đồng thời, tự động hóa quá trình do AI điều khiển sẽ hợp lý hóa và thay thế các nhiệm vụ của con người. Điều này sẽ ngày càng trở thành định mức để tối đa hóa năng suất của nhân viên, theo báo cáo.

  1. Đến năm 2022, 50% máy chủ sẽ mã hóa dữ liệu khi tiến vào trạng thái nghỉ ngơi và cả vận hành; hơn 50% cảnh báo bảo mật sẽ được xử lý bằng tự động hóa do AI cung cấp; và 150 triệu người sẽ có ID kỹ thuật số dựa trên Blockchain.

Vietnam Mobile Day

Các công nghệ mới nổi như mã hóa lan tỏa, blockchain, học máy và phân tích sẽ được sử dụng để cải thiện các biện pháp bảo mật trên toàn doanh nghiệp.

  1. Đến năm 2022, top 4 “megaplatforms” hàng đầu sẽ lưu trữ 80% việc triển khai IaaS/PaaS, đến năm 2024, 90% các tổ chức G1000 sẽ giảm thiểu khóa thông qua các công cụ cũng như các công nghệ đám mây đa nn tảng và hybrid.

Trong những năm tới, các doanh nghiệp sẽ nắm lấy các công cụ và chiến lược tích hợp và đa đám mây, báo cáo cho biết. “Thiếu một chiến lược tích hợp sẽ dẫn đến việc phân bổ nguồn lực dưới mức tối ưu, truy cập hạn chế vào các đổi mới công nghệ có sẵn tốt nhất, thời gian giải quyết và xác định vấn đề dài hơn và giới hạn

TopDev Blog via techrepublic.com

Hoài bão khai phá vùng đất CNTT của VNPT-IT và “miền đất hứa” dành cho Data Engineer

VNPT Topdev

VNPT-IT hoạt động trong lĩnh vực nghiên cứu phát triển, tích hợp các sản phẩm dịch vụ công nghệ thông tin phục vụ nội bộ Tập đoàn Bưu chính Viễn thông Việt Nam (VNPT) và các khách hàng bên ngoài VNPT-IT (bao gồm cả khách hàng Quốc tế).

Là Công ty công nghệ trọng điểm Quốc gia, VNPT-IT tham gia mạnh mẽ vào quá trình chuyển đổi nền kinh tế số của Việt Nam. VNPT-IT cũng sẽ là đơn vị cung cấp dịch vụ, giải pháp để chuyển đổi doanh nghiệp Việt Nam thành doanh nghiệp số và cung cấp các nền tảng để phát triển công nghệ số trong tương lai – “Vì một xã hội văn minh, minh bạch góp phần xây dựng cuộc sống người Việt tốt đẹp hơn”

Sự nghiệp vững vàng, ngập tràn cơ hội việc làm Data Engineer

Từ giấc mơ công nghệ tiến đến hiện tượng toàn quốc, nhân lực tại VNPT-IT chính là chìa khóa thành công

VNPT-IT đặt mục tiêu xây dựng một hệ sinh thái tích hợp trọn gói các sản phẩm, dịch vụ công nghệ thông tin và Internet lớn nhất Việt Nam, từ đó mang sản phẩm – dịch vụ đến với thị trường quốc tế. Để làm được điều này, VNPT-IT đề ra chiến lược phát triển xoay quanh 4 giá trị cốt lõi: Con người là chìa khóa – Khách hàng là trung tâm – Sáng tạo không ngừng – Đối tác đáng tin cậy.

Luôn coi trọng nguồn lực con người là trên hết, bởi đó chính là nhân tố nền tảng trên con đường dẫn đến thành công cho doanh nghiệp. Trong lộ trình ấy, VNPT-IT vẫn đang tiếp tục tìm kiếm những đồng đội, những bạn đồng hành giàu tình yêu và đam mê ở rất nhiều các vị trí công việc khác nhau.

Trong thời gian qua, Công ty chuyên lĩnh vực nhân sự Anphabe và Công ty nghiên cứu thị trường Intage Việt Nam đã công bố kết quả khảo sát “100 nơi làm việc tốt nhất Việt Nam”. Trong đó, Tập đoàn VNPT lọt vào Top 3 thương hiệu nhà tuyển dụng Viễn thông và CNTT tốt nhất Việt Nam bởi môi trường làm việc hiện đại, năng động, chế đội đãi ngộ tốt và cơ hội được học tập, phát triển năng lực cá nhân được hỗ trợ tối đa…Và đó cũng là chiến lược phát triển nguồn nhân lực chung của tất cả các đơn vị trực thuộc VNPT, trong đó có VNPT-IT.

VNPT-IT trở thành “miền đất hứa” dành cho các lập trình viên với những cơ hội đặc biệt

Hơn cả những đãi ngộ xứng đáng, đến với VNPT-IT, các bạn lập trình viên luôn được thỏa chí mài nghề, rèn sức sáng tạo. Đặc biệt ngay tại thời điểm này, vị trí Senior Data Engineer (Java, Scala, Big Data) đang được VNPT-IT săn đón với rất nhiều cơ hội hấp dẫn.

Hãy ứng tuyển Senior Data Engineer (Java, Scala, Big Data) ngay hôm nay để giữ lấy những đặc quyền đặc biệt:

  • Lương thỏa thuận hấp dẫn, về túi 300 – 600 triệu một năm;
  • Thưởng về mỗi dịp lễ đến rồi thưởng thêm cả ngày thành lập ngành;
  • Phụ cấp ăn trưa cùng với phụ cấp độc hại hằng tháng;
  • Phát triển bản thân, lên trình mới khi tham gia các khóa đào tạo chuyên sâu bao “xịn” trong và ngoài nước hàng năm;
  • Thời gian làm việc từ thứ 2 – thứ 6: 8h00 – 17h00, cuối tuần dành trọn bên gia đình, bạn bè.

Mô tả công việc:

  • Quy hoạch, xây dựng và phát triển hệ thống IDG, hệ thống backend xử lý dữ liệu lớn, các dịch vụ khai phá dữ liệu lớn (big data) gồm các công việc:
  • Đọc hiểu các tài liệu thiết kế tổng quan và thiết kế chi tiết của hệ thống
  • Thiết kế, quản trị big data storage, viết và tối ưu các module lưu trữ dữ liệu lớn
  • Lập trình phần backend của hệ thống big data
  • Viết các module tổng hợp báo cáo hoặc các modue khai phá dữ liệu lớn (data-mining)

Yêu cầu chính:

  • Tối thiểu 3 năm kinh nghiệm phát triển các hệ thống big data;
  • Có kinh nghiệm về hệ quản trị dữ liệu quan hệ và không quan hệ như: Database: Oracle, MySQL, Redis, MongoDB, Hadoop, Casandra;
  • Thông thạo ngôn ngữ lập trình cho big data: Java, Scala, (biết NodeJS, Python là một lợi thế);
  • Thông thạo Framework lập trình big data: Spark, Kafka;
  • Có khả năng đọc hiểu các tài liệu thiết kế tổng quan và chi tiết của hệ thống big data;
  • Có khả năng tự thiết kế, xây dựng một hệ thống big data.

Yêu cầu chung:

  • Tốt nghiệp đại học chuyên ngành CNTT hoặc tương đương;
  • Có khả năng lãnh đạo nhóm;
  • Tư duy logic tốt, chăm chỉ và có trách nhiệm trong công việc;
  • Hòa đồng với tập thể, có kỹ năng làm việc nhóm tốt;
  • Tính kỷ luật cao, chấp hành nội quy của đơn vị.

Về chung một nhà cùng VNPT-IT tuyển dụng, Senior Data Engineer đã sẵn sàng?