Home Blog Page 214

Làm thế nào để xây dựng social network bằng Ruby on Rails

Tôi là một Rails fanboy. Theo tôi Ruby on Rails là một trong những framework phát triển web tốt nhất từng được phát triển. Tôi đã sử dụng Rails trong hơn một năm và nó khá thú vị để làm việc. Nhờ đó mà việc phát triển web giúp tôi vui vẻ hơn. Có một thời gian, tôi đã nghĩ đến việc viết một bài blog về Rails  Tôi không viết bài bình thường về “Làm thế nào để phát triển một nền tảng viết blog dưới 5 phút bằng cách sử dụng Rails”.

Tôi muốn xây dựng một cái gì đó tuyệt vời và viết một hướng dẫn về nó. Ý tưởng phát triển một nền tảng mạng xã hội đã luôn luôn làm tôi hứng thú. Vì vậy, tôi sẽ cố gắng và xây dựng một mạng xã hội bằng cách sử dụng Rails.

Start Hacking

Để tạo ra một ứng dụng rails mới, hãy chạy rails new socify. Điều này sẽ tạo cấu trúc ứng dụng và Gemfile chứa các gemset mặc định kèm với Rails.

Đi vào app directory. Điều đầu tiên chúng ta cần làm là thay đổi gemset mặc định. Chỉ cần sử dụng Gemfile này chứa các gems yêu cầu. Để tìm được gems và giải quyết các sự phụ thuộc chúng ta sử dụng bundler. Lưu ý rằng bạn đã cài bundler trong quá trình cài đặt. Nếu không hãy quay lại và cài  bundle install.

Lưu ý: Để kiểm soát phiên bản tôi sử dụng Git. Bạn có thể sử dụng thay thế mặc định .gitignore bằng cái này.

Run Rails:

Các ứng dụng không có gì thay đổi cho đến nay kể từ khi chúng tôi đã không thêm bất cứ điều gì. Hãy thử chạy rails s và ghé thăm localhost:3000 để hiển thị trang landing page mặc định.

Tham khảo các vị trí tuyển ruby on rails lương cao

Asset Pipeline

Rails Asset pipeline nối liền, minify, phục vụ các assets ứng dụng. Chúng ta có thể thêm các tập tin tùy chỉnh css và js vào pipeline. Trước hết đổi tên application.css thành  application.css.scss vì chúng ta sẽ viết trong Sass. Cũng loại bỏ turbolinks từ application.js. Bao gồm các assets được yêu cầu.

@import "bootstrap-sprockets";
@import "bootstrap";
@import "font-awesome";
@import "jquery.datetimepicker";
@import "*";
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require bindWithDelay
//= require jquery.datetimepicker
//= require_tree .

Ứng dụng vẫn trỏ tới welcome board kể từ khi đường dẫn gốc chưa được định cấu hình. Hãy tạo home controller với hành động để làm trang đích. Thêm một Navbar đơn giản.

<nav class="navbar navbar-default navbar-fixed-top">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-top">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <%= link_to "Socify", root_url, class: "navbar-brand" %>
    </div>
    <div class="collapse navbar-collapse" id="navbar-top">
      <ul class="nav navbar-nav navbar-right">
        <% if user_signed_in? %>
          <li><%= link_to('Sign out', destroy_user_session_path, method: :delete) %></li>
        <% else %>
          <li><%= link_to 'Sign up', new_user_registration_path %></li>
          <li><%= link_to 'Sign in', user_session_path %></li>
        <% end %>
      </ul>
    </div>
  </div>
</nav>
rails g controller home front
Rails.application.routes.draw do
  root to: 'home#front'
end

Xác thực

Và một điều nữa, đừng “reinvent the wheel” đừng đi lại lối mòn. Chúng tôi sẽ cố gắng theo dõi điều này trong suốt quá trình phát triển ứng dụng này. Vì vậy, thay vì giải quyết vấn đề đã có một giải pháp tối ưu, chúng ta có thể sử dụng lại giải pháp. Luôn luôn ghi nhớ,

Một giải pháp để xác thực là Devise. Cung cấp một cơ chế xác thực tuyệt vời bằng cách xác thực người dùng, bảo mật và quản lý session. Quá tuyệt! Hãy sử dụng nó.

Chạy rails g devise:install. Xem thêm Getting started guide. để configure sau khi setting devise.

Tạo ra mô hình user bằng cách sử dụng rails g devise user. Hãy thêm một vài cột vào mô hình. Chạy  rake db:migrate để tạo bảng người dùng với các field tương ứng.

class DeviseCreateUsers < ActiveRecord::Migration
  def change
    create_table(:users) do |t|
      t.string :name,               null: false, default: ""
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
      t.string :about
      t.string :avatar
      t.string :cover

      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      t.datetime :remember_created_at

      t.integer  :sign_in_count, default: 0, null: false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

      t.string   :confirmation_token
      t.datetime :confirmed_at
      t.datetime :confirmation_sent_at

      t.timestamps null: false
    end

    add_index :users, :email,                unique: true
    add_index :users, :reset_password_token, unique: true
    add_index :users, :confirmation_token,   unique: true
  end
end

Ngoài việc xác nhận người dùng, xác thực và quản lý phiên làm việc, thì nó cũng sẽ xử lý các thông tin của người dùng. Chỉ cần thêm :confirmable vào user model là được.

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable, :confirmable,
    :recoverable, :rememberable, :trackable, :validatable
end

Lưu ý: Đừng quên thay đổi config.reconfirmable thành false trong config/initializers/devise.rb.

Mọi thứ trong devise làm việc out-of-the-box. Không tin tôi? Hãy thử truy cập vào http://localhost:3000/users/sign_in. Bạn có thể thấy một hình thức tính toán đã tạo ra phía sau. Và đối với người sử dụng sign_up http://localhost:3000/users/sign_up. Nó thật tuyệt vời phải không!

Câu hỏi thực sự bạn có bây giờ là “Chúng ta có thể tùy chỉnh nó?”. Tất nhiên chúng ta có thể. Các  rails g devise:views lượt xem các chế độ xem mặc định và ghi đè lên ứng dụng. Chúng ta có thể sử dụng một số mã boilerplate cho các forms. Bạn có thể kiểm tra nó ở đây.

Vì chúng ta đang thêm các thuộc tính mới để tạo ra các forms, chúng ta cần phải đưa ra các bộ điều khiển mà params cho phép. Đọc thêm về params strong ở đây.

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  before_filter :configure_permitted_parameters, if: :devise_controller?
  protected
  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << [:name, :password_confirmation]
    devise_parameter_sanitizer.for(:sign_in) << [:email, :remember_me]
  end
end

Posts & Event

Người dùng cần một cách để chia sẻ nội dung. Để tạo ra CRUD cơ bản cho bài viết hãy sử dụng scaffolding. Điều này sẽ tạo ra các mô hình, bộ điều khiển, góc nhìn cùng với việc di chuyển cơ sở dữ liệu. Và kể từ khi bài viết người dùng, chúng ta có thể thêm một tham chiếu đến nó để tạo ra các mối quan hệ cần thiết.

rails g scaffold post attachment:string content:text user:references
rake db:migrate

Tạo bài đăng:

Để tạo một bài đăng mới, hãy thêm mẫu sau vào home/index.html.erbposts_controller sẽ xử lý nó.

<%= form_for(@post) do |f| %>
  <div class="form-group">
    <%= f.label 'Update status' %><br>
      <%= f.text_area :content, class: 'form-control', autofocus: true, 
          placeholder: 'What\'s up?' %>
      <%= f.file_field :attachment, class: 'form-control' %>
  </div>
  <%= f.submit :post, class: 'btn btn-primary'%>
<% end %>
def create
  @post = Post.new(post_params) do |post|
    post.user = current_user
  end
  if @post.save
    redirect_to root_path
  else
    redirect_to root_path, notice: @post.errors.full_messages.first
  end
end

Khi chúng ta thực hiện @post.save rails sẽ tự động xác thực đối tượng đăng dựa trên xác nhận hợp lệ mà chúng tôi đã viết bằng post model. Nếu có lỗi, chúng ta sẽ bỏ qua nó trong khi chuyển hướng.

Carrierwave:

Để xử lý tải lên tập tin chúng tôi có thể sử dụng carrierwave. Với tập tin tải lên carrierwave thực sự dễ dàng để xử lý. Tạo một class uploader chứa cấu hình cần thiết để xử lý tệp sau khi tải lên. Bây giờ tất cả chúng ta cần làm là gắn kết người tải lên trong model.

rails g uploader avatar
class Post < ActiveRecord::Base
  mount_uploader :attachment, AvatarUploader
end

Tạo sự kiện:

Tạo sự kiện tương tự như bài đăng. Vì họ có tiêu đề và ngày, chúng ta có thể cần datepicker để chọn ngày và thời gian. Tôi chỉ cần sử dụng plugin jQuery sau đây https://github.com/xdan/datetimepicker. Thêm assets vào thư mục vendor/asset/  bao gồm trong application.js và application.css.scss. Định dạng ngày ở định dạng sau và để Rails chăm sóc phần còn lại.

(document).ready(function(){
  $("#event_when").datetimepicker({
    maxDate:'0',
    format:'Y/m/d H:i'
  });
});

Likes và comments


Vì chúng tôi đang xây dựng một ứng dụng mạng xã hội nên thực sự cần phải thêm những người thích và nhận xét. Tôi sẽ không phí thời gian như đã nêu ở trên. Xem tại acts_as_votableacts_as_commissionable.

Likes:

Sử dụng acts_as_votable nó thực sự dễ dàng để thêm likes/votes cho một model. Các lệnh sau đây sẽ tạo bảng votes để lưu trữ thông tin likes. Chỉ cần thêm acts_as_votable vào một model để làm cho nó vote được.

rails generate acts_as_votable:migration
rake db:migrate

Tạo ra một bộ xử lý để tạo ra hoạt động like/unlike

class LikesController < ApplicationController
  before_action :find_likeable
  before_action :authenticate_user!
  respond_to :js

  def create
    @likeable.liked_by current_user
  end

  def destroy
    @likeable.disliked_by current_user
  end

  private
  def find_likeable
    @likeable_type = params[:likeable_type].classify
    @likeable = @likeable_type.constantize.find(params[:likeable_id])
  end
end

Bình luận:

Acts_as_commentable làm ra một chút khác nhau mặc dù thiết lập là khá nhiều như nhau. Các lệnh sau sẽ tạo ra mô hình nhận xét cùng với việc di chuyển nó.

rails g comment
rake db:migrate

Bây giờ chúng ta đã được thực hiện khá nhiều với like và comment. Chỉ cần thêm các hình thức xem.

class CommentsController < ApplicationController
  before_action :authenticate_user!
  before_action :find_commentable, only: :create
  respond_to :js

  def create
    @comment = @commentable.comments.new do |comment|
      comment.comment = params[:comment_text]
      comment.user = current_user
    end
    @comment.save
  end

  def destroy
    @comment = current_user.comments.find(params[:id])
    @comment_id = params[:id]
    @comment.destroy
  end

  private
  def find_commentable
    @commentable_type = params[:commentable_type].classify
    @commentable = @commentable_type.constantize.find(params[:commentable_id])
  end
end
<%= form_tag comments_path(commentable_type: commentable.class.to_s, commentable_id: commentable.id), method: :post, remote: true do %>
  <div class="form-group">
    <%= text_area_tag :comment_text, nil, placeholder: 'Enter Comment', class: 'form-control' %>
  </div>
  <%= submit_tag :comment, class: 'btn btn-primary' %>
<% end %>

Lưu ý rằng tôi đang sử dụng remote:true, vì vậy các hình thức sẽ được gửi bằng cách sử dụng Ajax. Kiểm tra bài viết này về cách các mẫu từ xa hoạt động bằng cách sử dụng Ajax.

Tìm việc làm Ruby đãi ngộ tốt trên TopDev

Các mối quan hệ

Bây giờ đến phần quan trọng nhất của ứng dụng xã hội, quan hệ. Cho đến phần này, đây chỉ là ứng dụng mà mọi người có thể đăng, thích hoặc nhận xét. Thêm mối quan hệ giữa người dùng làm cho nó trở thành một mạng xã hội. Thêm  acts_as_follower. Oh yeah! Có một ruby gems ​​cho hầu hết mọi thứ. Đó là phần hay nhất của việc sử dụng Rails.

rails generate acts_as_follower
class User < ActiveRecord::Base
  acts_as_follower
  acts_as_followable
end
class FollowsController < ApplicationController
  before_action :authenticate_user!
  respond_to :js

  def create
    @user = User.find(params[:user_id])
    current_user.follow(@user)
  end

  def destroy
    @user = User.find(params[:user_id])
    current_user.stop_following(@user)
  end
end
<div class="follow">
  <% if user.followed_by?(current_user) %>
    <%= form_tag unfollow_path(user_id: user.id), method: :post, remote: true do %>
      <%= button_tag 'unfollow', class: 'btn btn-primary' %>
    <% end %>
  <% else %>
    <%= form_tag follow_path(user_id: user.id), method: :post, remote: true do %>
      <%= button_tag 'follow', class: 'btn btn-success' %>
    <% end %>
  <% end %>
</div>

Vậy là xong. Bây giờ bạn có thể bắt đầu theo dõi bất kỳ người dùng nào.

Public Activity

Ứng dụng xã hội mà chúng ta đang xây dựng cần phải theo dõi nhiều hơn các bài đăng. Nếu bạn nhận thấy facebook’s newsfeed nó cho thấy thích, nhận xét, follows và nhiều hơn nữa. Chúng tôi sẽ theo dõi hồ sơ bằng cách sử dụng public_activity gem. Tham khảo wiki on Github  về các hoạt động cộng đồng để thiết lập và hiển thị các hoạt động.

rails g public_activity:migration
rake db:migrate

Thêm các mục sau vào model bạn muốn theo dõi hoạt động, ví dụ như models/ post.rb. Và kể từ khi người dùng đăng nhập đã tạo ra chúng ta thêm current_user làm chủ sở hữu cho tài nguyên đã theo dõi.

class Post < ActiveRecord::Base
  include PublicActivity::Model
  tracked only: [:create], owner: Proc.new{ |controller, model| controller.current_user }
end

Chúng tôi sẽ tìm nạp tất cả các hoạt động sử dụng  PublicActivity::Activity::all trong hành động chỉ mục ở trang điều khiển. Hiển thị các hoạt động trên chế độ xem sử dụng render_activities(@activities) https://github.com/chaps-io/public_activity#displaying -activities.

class HomeController < ApplicationController
  respond_to :html, :js
  def index
    @activities = PublicActivity::Activity.all
  end
end
<div id="activities">
  <%= render_activities(@activities)%>
<div>

Lưu ý: Cần phải tìm nạp dựa trên việc liệu người dùng có đăng nhập hay không, nhưng ok cho thời gian bắt đầu. Check out đoạn code cuối cùng trên Github.

Cuối cùng, chúng ta cần tạo public_activity/model_name/with views cho mỗi hành động. Check out view/public_activity/ để xem nó được xử lý như thế nào. Chúng ta có thể theo dõi các hoạt động khác như nhận xét và các sự kiện.

NewsFeed

Nội dung NewsFeed sẽ khác dựa trên phiên người dùng. Khi đăng nhập, chúng tôi hiển thị action index được tạo bởi bạn bè của người dùng.

Nhưng, chúng tôi sẽ không hiển thị tất cả cùng một lúc. Điều này sẽ làm tăng page load khi dữ liệu trở nên rất lớn. Chúng ta sẽ paginate các bản ghi bằng cách sử dụng will_paginate.

class HomeController < ApplicationController
  before_action :set_user, except: :front
  respond_to :html, :js

  def index
    @post = Post.new
    @friends = @user.all_following.unshift(@user)
    @activities = PublicActivity::Activity.where(owner_id: @friends).order(created_at: :desc).paginate(page: params[:page], per_page: 10)
  end

  def front
    @activities = PublicActivity::Activity.order(created_at: :desc).paginate(page: params[:page], per_page: 10)
  end

  def find_friends
    @friends = @user.all_following
    @users =  User.where.not(id: @friends.unshift(@user)).paginate(page: params[:page])
  end

  private
  def set_user
    @user = current_user
  end
end

Cuối cùng

Xin chúc mừng! Bạn đã xây dựng một nền tảng mạng xã hội bằng cách sử dụng Ruby on Rails.

Nhưng nhìn vào trang web thiết kế có vẻ xấu. Vì vậy, chúng ta chỉ cần thêm quyền hạn và một số kiểu dáng cơ bản để nó trông đẹp.

Deploy

Triển khai ứng dụng rails trên Heroku rất dễ dàng. Tất cả chúng ta phải làm là thêm một ứng dụng heroku và đẩy nó bằng cách sử dụng Git. Tạo một ứng dụng mới trên heroku, thêm ứng dụng rails và đẩy đến máy chủ của heroku.

heroku login
heroku git:remote -a [appname]
git push heroku master
heroku run rake db:migrate

Vì ứng dụng của chúng ta phải gửi email để xác nhận và khôi phục mật khẩu, chúng ta cần thêm cấu hình smtp config/environment/production.rb. Tôi chỉ sử dụng sendgrid cho điều này. Ngoài ra chúng ta sẽ tải lên phương tiện truyền thông và heroku không lưu trữ nó trên máy chủ. Có một addon gọi là Cloudric mà chúng ta sẽ sử dụng.

Tôi nghĩ rằng nhiêu đây là khá nhiều. Mọi thứ đã triển khai và có vẻ tốt.

Để nạp dữ liệu giả, chúng ta sẽ sử dụng một task rake dưới lib / tasks. Chúng ta sẽ sử dụng fakerpopulator để tạo ra dữ liệu.

rake fill:data

Bạn có thể kiểm tra mã nguồn trên Github và bản demo được triển khai trên Heroku.

Đây là source code tại Github và bản demo trên Heroku

Một số link cần tham khảo

Nguồn: medium.com

Xem thêm các tin tuyển dụng IT mới nhất trên TopDev

“Hãy cứ làm việc bạn thích” – Nghe quen quá phải không? Thực ra đó lại là một lời khuyên cực kỳ tồi tệ!

interiors of an office --- Image by © Royalty-Free/Corbis

“Hãy làm công việc bạn yêu thích” là lời khuyên mà mọi sinh viên mới ra trường đều coi như kim chỉ nam cho định hướng sự nghiệp của mình. Thế nhưng Frank Talarico Jr., CEO công ty Goodwill lại cho rằng giới trẻ hãy ngừng tin vào điều đó.

“Hãy làm công việc bạn yêu thích” là lời khuyên mà mọi sinh viên mới ra trường đều coi như kim chỉ nam cho định hướng sự nghiệp của mình. Thế nhưng Frank Talarico Jr., CEO công ty Goodwill lại cho rằng giới trẻ hãy ngừng tin vào điều đó.

Hãy cùng lắng nghe những chia sẻ của Frank Talarico để có thể hiểu được tại sao ông lại khuyên giới trẻ như vậy:

Sau 20 năm kinh nghiệm với cương vị là một nhà quản lý, tôi hiếm khi thấy ai thành công và hạnh phúc khi theo đuổi một công việc chỉ vì họ “thích” công việc đó. Việc bạn chỉ làm điều mình yêu thích không có nghĩa lý gì cả. Sự thật là nếu sáng mai bạn tỉnh dậy đi làm một công việc khiến bạn “không cảm thấy giống công việc” thì rất có thể bạn sẽ tiếp tục lãng phí 20 năm và sau đó sẽ tự hỏi vì sao mình lại có thể bỏ phí những năm tháng đầy năng lượng nhất trong đời mình như vậy.

Đừng làm việc bạn yêu thích. Hãy chỉ yêu kết quả của việc bạn làm.

Hãy yêu những thành quả mà bạn tạo ra trong lĩnh vực của mình, yêu những cống hiến bạn đóng góp cho cộng đồng, xã hội, và cả (nếu đây cũng là điều bạn mong mỏi) cho túi tiền của bạn.

Hãy yêu cái cảm giác rằng sức lao động chăm chỉ của mình đang tạo ra sự thay đổi tích cực đối với những người cần nó. Đúng vậy, đam mê cá nhân của bạn cần phải cân bằng với lợi ích chung của xã hội. Một công việc chỉ thỏa mãn riêng sở thích cá nhân mà không tạo thêm lợi ích nào cho cộng đồng hay việc làm tốt giúp ích cho thế giới mà lại không khiến bạn hứng thú đều không phải điều mà bạn cần. Hãy tìm ra đâu là điểm mà đam mê của riêng bạn và những điều khiến thế giới tốt đẹp hơn giao nhau?

Đó là câu hỏi mà tôi tin rằng thế hệ ngày nay sẽ trả lời được.

Trong giai đoạn trưởng thành của tôi, thế hệ tiền bối luôn nói là tôi có thể thay đổi cả tương lai. Có lẽ cảm nhận của bạn về lời nói đó lúc này cũng giống như tôi lúc ấy: chúng sáo rỗng và hão huyền như những lời chúc được in trên tấm thiệp bà nội tôi gửi đến mỗi dịp lễ.

Nhưng hãy tin là điều đó có thể trở thành hiện thực. Bởi vì khả năng của con người là vô tận và sức trẻ thì vô biên.

Các bạn vô cùng may mắn khi đang sống trong một thời đại chưa từng có trước đây, nơi mà những doanh nghiệp tử tế sẽ giúp thế giới tốt lên mỗi ngày. Chúng ta có thể lấy ví dụ như gần đây, top 30 tập đoàn lớn của Mỹ đã gửi một bức thư mở đề nghị tổng thống Trump tiếp tục để Mỹ tham gia Hiệp định Paris về chống biến đổi khí hậu. Những công ty này – cũng như nhiều thành phố – thậm chí còn quan tâm và nghiêm túc thực hiện mục tiêu giảm khí thải carbon ngay cả khi chính quyền quốc gia đã rút khỏi nó.

Đó là cách các doanh nghiệp hiện nay vận hành: chỉ cần làm việc tử tế và chăm chỉ, doanh nghiệp đó sẽ phát triển tốt. Tôi nhận thấy rõ ràng điều này khi hằng ngày làm việc của mình ở vị trí CEO của Goodwill. Goodwill là một doanh nghiệp lớn phức tạp với hàng ngàn nhân viên, 24 cửa hàng bán lẻ, một hội đồng quản trị và tất cả các loại vấn đề rắc rối mà tôi thực sự hứng thú khi được giải quyết. Chúng tôi sử dụng những từ như “sáng kiến”, “đế chế” và “doanh nhân” thay vì “ý tưởng”, “công ty” hay “người buôn bán”. Chúng tôi là một doanh nghiệp lớn. Chúng tôi loại bỏ những rào cản để người khuyết tật hay có những người có tiền án có cơ hội việc làm bình đẳng với mọi người. Chúng tôi làm việc để thay đổi suy nghĩ của cộng đồng về việc nên để những cựu binh quay trở lại làm việc.

Tôi yêu kết quả của công việc mình làm: tìm kiếm ra giải pháp cho những vấn đề dường như không thể giải quyết được và tạo nên thay đổi tích cực một cách mạnh mẽ hơn nữa để giúp đỡ cộng đồng.

Trong thế giới hôm nay, bạn không còn phải lựa chọn giữa làm công việc tốt cho xã hội hay việc tốt cho bản thân mình. Tương lai thế giới rõ ràng rất cần những giải pháp đột phá để giải quyết hàng loạt vấn đề toàn cầu hiện nay. Đây chính là một chìa khóa đem lại cho bạn những công việc vô cùng hấp dẫn và xứng đáng.

Vậy nên khi bạn đang bước những bước đi đầu tiên trên con đường sự nghiệp của mình, hãy nhớ rằng: Đừng làm việc bạn thích. Hãy thích hiệu quả công việc của mọi thứ bạn làm.

Nguồn: Applancer Careers

500 khóa học Online Programming & Computer Science miễn phí nên học ngay trong tháng 9

500 courses

Tác giả đã lọc ra từ 8000 khóa học của Class Central & chia thành 3 cấp bậc: Beginner, Intermediate, Advanced. Với mỗi khóa học, tác giả lại đánh dấu rating để người học dễ theo dõi.

BEGINNER (118)

An Introduction to Interactive Programming in Python (Part 1)
Rice University via Coursera

Introduction to Computer Science and Programming Using Python
Massachusetts Institute of Technology via edX

Introduction to Computer Science and Programming Using Python
Massachusetts Institute of Technology via edX

Learn to Program: The Fundamentals
University of Toronto via Coursera

Intro to Computer Science
University of Virginia via Udacity

Introduction to Computer Science
Harvard University via edX

Ruby on Rails: An Introduction
Johns Hopkins University via Coursera

An Introduction to Interactive Programming in Python (Part 2)
Rice University via Coursera

How to Use Git and GitHub
via Udacity

Introduction to HTML5
University of Michigan via Coursera

Introduction to Linux
Linux Foundation via edX

Coding in your Classroom, Now!
University of Urbino via EMMA

Internet History, Technology, and Security
University of Michigan via Coursera

Intro to HTML and CSS
via Udacity

Introduction to VBA/Excel Programming
Cal Poly Pomona via Open Education by Blackboard

[New] Network Protocols and Architecture
Cisco via Coursera

[New] Introduction to Cisco Networking
Cisco via Coursera

[New] Home Networking Basics
Cisco via Coursera

[New] Internet Connection: How to Get Online?
Cisco via Coursera

[New] Object-oriented programming in Python: create your own adventure game
Raspberry Pi Foundation via FutureLearn

[New] Introduction to TCP/IP
Yonsei University via Coursera

[New] Data Communications and Network Services
Cisco via Coursera

Intro to Java Programming
San Jose State University via Udacity

Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course)
Hebrew University of Jerusalem via Coursera

JavaScript Basics – via Udacity

CS101: Computer Science 101 – Stanford University via Stanford OpenEdx

Programming Basics
Indian Institute of Technology Bombay via edX

Programming Basics
Indian Institute of Technology Bombay via edX

Introduction to CSS3
University of Michigan via Coursera

Programming Foundations with Python
via Udacity

DB: Introduction to Databases
Stanford University via Stanford OpenEdx

HTML, CSS, and Javascript for Web Developers
Johns Hopkins University via Coursera

Creative Programming for Digital Media & Mobile Apps
University of London International Programmes via Coursera

Networking: Introduction to Computer Networking
Stanford University via Stanford OpenEdx

Usable Security
University of Maryland, College Park via Coursera

HTML5 Coding Essentials and Best Practices
World Wide Web Consortium (W3C) via edX

Introduction to the Internet of Things and Embedded Systems
University of California, Irvine via Coursera

HTML5 Coding Essentials and Best Practices
World Wide Web Consortium (W3C) via edX

Introduction to Bootstrap — A Tutorial
Microsoft via edX

Programming Foundations with JavaScript, HTML and CSS
Duke University via Coursera

Code Yourself! An Introduction to Programming
University of Edinburgh via Coursera

Begin Programming: Build Your First Mobile Game
University of Reading via FutureLearn

Learn to Program: Crafting Quality Code
University of Toronto via Coursera

Introduction to Cloud Computing – IEEE via edX

Intro to Relational Databases – via Udacity

HTML5 and CSS Fundamentals
World Wide Web Consortium (W3C) via edX

Python for Everybody — Exploring Information
via Independent

Introduction to Programming for the Visual Arts with p5.js
University of California, Los Angeles via Kadenze

Introduction to jQuery – Microsoft via edX

Linux Command Line Basics – via Udacity

Introduction to jQuery – Microsoft via edX

Introduction to Java Programming — Part 1
The Hong Kong University of Science and Technology via edX

Python Programming: A Concise Introduction
Wesleyan University via Coursera

Paradigms of Computer Programming — Fundamentals
Université catholique de Louvain via edX

Programming in Scratch
Harvey Mudd College via edX

Introduction to Programming with Java: Starting to code in Java
Universidad Carlos iii de Madrid via edX

Introduction to Java Programming — Part 1
The Hong Kong University of Science and Technology via edX

Introduction to Programming with Java: Starting to code in Java
Universidad Carlos iii de Madrid via edX

Paradigms of Computer Programming — Fundamentals
Université catholique de Louvain via edX

Paradigms of Computer Programming — Abstraction and Concurrency
Université catholique de Louvain via edX

How To Create a Website in a Weekend! (Project-Centered Course)
State University of New York via Coursera

CS For All: Introduction to Computer Science and Python Programming
Harvey Mudd College via edX

Object-Oriented Programming
Indian Institute of Technology Bombay via edX

Object-Oriented Programming
Indian Institute of Technology Bombay via edX

The Computing Technology Inside Your Smartphone
Cornell University via edX

Learn to Program Using Python
University of Texas Arlington via edX

Introduction to HTML and JavaScript
Microsoft via edX

Think. Create. Code
University of Adelaide via edX

Intro to JavaScript – via Udacity

Java Programming Basics  – via Udacity

Introduction to Data Storage and Management Technologies
IEEE via edX

Programming for the Web with JavaScript
University of Pennsylvania via edX

Introduction to Computing using Python
Georgia Institute of Technology via edX

Android for Beginners
via Udacity

Android App Development for Beginners
Galileo University via edX

MyCS: Computer Science for Beginners
Harvey Mudd College via edX

Computing: Art, Magic, Science
ETH Zurich via edX

Networks: Friends, Money, and Bytes
Princeton University via Coursera

Learn to Program in Java
Microsoft via edX

Android Basics: Make Your First App
Google via Udacity

Web Applications for Everybody
via Independent

How to Code: Simple Data
The University of British Columbia via edX

Cyber Security: Safety at Home, Online, in Life
Newcastle University via FutureLearn

Web Coding Fundamentals for Artists
National University of Singapore via Kadenze

Introduction to Data Storage and Management Technologies
IEEE via edX

Android App Development for Beginners
Galileo University via edX

CODAPPS: Coding mobile apps for entrepreneurs
EMLYON Business School via Coursera

The Unix Workbench
Johns Hopkins University via Coursera

Monetize Android Apps with Business Models
Galileo University via edX

Introduction to Java Programming — Part 2
The Hong Kong University of Science and Technology via edX

AP Computer Science A: Java Programming Classes and Objects
Purdue University via edX

Swift for Beginners
via Udacity

AP Computer Science A: Java Programming Polymorphism and Advanced Data Structures
Purdue University via edX

Cyber Security Basics: A Hands-on Approach
Universidad Carlos iii de Madrid via edX

Introduction to Python: Absolute Beginner  – Microsoft via edX

HTTP & Web Servers – via Udacity

Introduction to Programming with Java: Writing Good Code
Universidad Carlos iii de Madrid via edX

AP Computer Science A: Java Programming Loops and Data Structures
Purdue University via edX

Learn Swift Programming Syntax – via Udacity

Mobile Web Development – Google via Udacity

Computing: Art, Magic, Science — Part II
ETH Zurich via edX

Web Accessibility – Google via Udacity

Introduction to Virtual Reality – via Udacity

GitHub & Collaboration – via Udacity

ES6 — JavaScript Improved – via Udacity

Java Fundamentals for Android Development
Galileo University via edX

Introduction to ReactJS
Microsoft via edX

Introduction to Java Programming — Part 2
The Hong Kong University of Science and Technology via edX

CSS Basics – Microsoft via edX

Java Fundamentals for Android Development
Galileo University via edX

Object Oriented Programming in Java – Microsoft via edX

Introduction to Python: Fundamentals – Microsoft via edX

Software Engineering Essentials
Technische Universität München (Technical University of Munich) via edX

Introduction to Python – via Udacity

JavaScript Introduction – World Wide Web Consortium (W3C) via edX

Logic and Computational Thinking – Microsoft via edX

Introduction to Cybersecurity – University of Washington via edX

Introduction to Web Development – University of California, Davis via Coursera

Nguồn: medium.freecodecamp.org

Nên trả lời phỏng vấn qua điện thoại như thế nào?

Nếu được lựa chọn phỏng vấn qua điện thoại hay phỏng vấn trực tiếp, phần lớn ứng viên thường chọn cách đầu tiên vì cho rằng hình thức này khiến họ “dễ thở” hơn là mặt đối mặt với nhà tuyển dụng. Tuy nhiên trong cái dễ lại có cái khó, “khó” ở đây là không phải ai cũng có khả năng “để lại vấn vương” cho nhà tuyển dụng. Đừng lo, đã có cách
Sự chuẩn bị không bao giờ là thừa

Dù là phỏng vấn qua điện thoại hay trực tiếp gặp nhà tuyển dụng, tìm hiểu về công ty, về công việc mà mình muốn ứng tuyển là điều bất cứ ai cũng phải làm nếu không muốn bị loại từ “vòng gửi xe”. Tiếp đến, hãy tìm kiếm, liệt kê, đưa ra phương án, luyện tập cách trả lời sao cho ấn tượng những câu hỏi mà bạn có nguy cơ “bị hỏi”. Ngoài ra, trong một số trường hợp, bạn có thể sẽ biết được ai sẽ là người phỏng vấn mình trong lần phỏng vấn chính thức. Còn chần chờ gì mà không nhanh chóng “truy lùng” người này qua mạng xã hội, người quen trong công ty…để hiểu hơn về họ để tìm cách trả lời phỏng vấn sao cho phù hợp.

Luôn trong tư thế sẵn sàng

Thông thường thì bạn sẽ được hẹn giờ phỏng vấn, tuy nhiên cũng có lúc bạn bị gọi bất thình lình do đó hãy chắc chắn là mình luôn trong tư thế sẵn sàng “ra trận” nha! Phỏng vấn qua điện thoại thì yếu tố không gian thật sự rất quan trọng, ví dụ như âm thanh xung quanh, bạn đang ở đâu,…Tốt nhất là hãy luôn nhắc nhở bản thân về cuộc gọi “thần thánh” sắp tới để đảm bảo là mình có thể nhấc máy ngay lập tức, phỏng vấn trong không gian yên ắng, thoải mái nhất và không có vấn đề nào diễn ra làm ảnh hưởng tới cuộc điện thoại.
Chuyên nghiệp trong mọi hoàn cảnh

Chính vì không phải đối diện trực tiếp với nhà tuyển dụng nên chúng ta không đặt mức độ quan trọng của cuộc phỏng vấn này lên hàng đầu. Trả lời phỏng vấn của nhà tuyển dụng trong tư thế nằm giải trí, quần áo xộc xệch,…tất nhiên, họ sẽ không thể thấy được bạn đang làm gì, mặc gì, nhưng tác phong sẽ ảnh hưởng trực tiếp tới thần thái, giọng điệu, cách trả lời qua điện thoại của bạn. Liệu bạn có thể giao tiếp qua điện thoại một cách chuyên nghiệp nếu như bạn đang nằm ườn trên ghế sofa không nhỉ?
Ngại gì không “mở”

Phỏng vấn qua điện thoại giống như một bài kiểm tra “đề mở”, và bạn có quyền mở tài liệu! Tài liệu ở đây là những ghi chú mà bạn thực hiện trong quá trình chuẩn bị như thông tin về công ty, cách trả lời câu hỏi sao cho “vừa lòng” nhà tuyển dụng mà bạn đã cất công tìm hiểu mấy ngày liền, những thắc mắc hay đề bạt mà bạn muốn gửi gắm đền nhà tuyển dụng,…Điều quan trọng là hãy “mở” một cách chuyên nghiệp qua việc để những “tài liệu” này ở nơi dễ nhìn nhất, lật “tài liệu” sao cho nhanh-gọn-lẹ mà không để nhà tuyển dụng phát hiện,…Chà, nghe thú vị quá bạn nhỉ!

Ghi chú những lưu ý

Trong suốt quá trình tuyển dụng, hãy ghi lại những điều mà bạn thấy cần thiết cũng như những thắc mắc của bản thân để nhờ sự giải đáp của nhà tuyển dụng ở cuối cuộc gọi. Một số ứng viên do quá hăng say phỏng vấn, hoặc chủ quan không ghi chú mà đã để lỡ khá nhiều thông tin quan trọng, gây ảnh hưởng không tốt đến kết quả tuyển dụng của bản thân về sau.

Gửi lời cảm ơn chân thành

Sau khi kết thúc cuộc phỏng vấn, trong vòng 48 giờ, một e-mail cảm ơn đến nhà tuyển dụng là cách đơn giản nhằm để lại ấn tượng tốt đẹp về bạn cho nhà tuyển dụng. Ngoài ra, đây còn là cơ hội để chúng ta “thủ thỉ” tâm sự, bày tỏ sự hào hứng, đam mê của mình đối với công việc mà mình muốn ứng tuyển cũng như cho họ thấy mình là người phù hợp với vị trí đó. Cuối cùng, nếu còn thắc mắc về vấn đề nào, hãy mạnh dạn xin họ lời giải đáp bạn nhé!

Tạo CV Online hấp dẫn cho dân IT tại đây

Nguồn: Applancer Careers via HR Insider

3 sự kiện lập trình bạn nên tham gia ngay cuối tháng 9 này!

Làm thế nào để lập trình giỏi hơn? – Câu hỏi đã gây không ít nhức nhối đối với các developer, đặc biệt là các bạn còn đang chập chững những bước đầu tiên. Thực tế đã có rất nhiều câu trả lời cho câu hỏi kinh điển này theo nhiều hướng phân tích đa dạng cùng những chia sẻ kinh nghiệm khác nhau.

Bạn có thể tự mình trao dồi kĩ năng code nhờ công việc, tự mình nghiên cứu đọc tài liệu. thay đổi 1 số thói quen, nguyên tắc khi lập trình.

Và đừng quên, bạn có thể học từ code của người khác. Tất nhiên, việc học từ kinh nghiệm của các Techlead, các Senior dev đi trước trong ngành sẽ tiết kiệm kha khá thời gian, đặc biệt nếu đó là những buổi Meetup chuyên sâu vào 1 kĩ năng, 1 công cụ nào đó mà bạn đang mơ hồ, chưa nắm vững.

Topdev giới thiệu đến bạn 3 sự kiện công nghệ nên tham gia ngay trong tháng 9 này, đảm bảo giúp bạn tiến thêm 1 bước nhanh hơn nữa trên con đường chinh phục sự nghiệp lập trình của mình.

1/ Bắt đầu GraphQL. Giải pháp vấn đề phát sinh quá nhiều API

GraphQL bao gồm 3 điểm đặc trưng sau: cho phép client xác định chính xác những dữ liệu cần, hỗ trợ quá trình tổng hợp dữ liệu từ nhiều nguồn dễ dàng hơn và sử dụng 1 type system để mô tả dữ liệu.

Lấy Facebook làm ví dụ. Facebook phải quản lí vô số data source và API clients mà REST API lại lộ khuyết điểm thiếu linh hoạt do tính chất dựa trên tài nguyên cố định, dẫn đến trường hợp “nghẽn cổ chai” thường thấy. Chính vì vậy, thay vì có đến hàng tá “endpoint” dư thừa, Facebook đã nghĩ đến giải pháp chỉ dùng một “endpoint” thông minh với khả năng tiếp thu những Query phức tạp rồi đưa ra output data với loại type tùy theo yêu cầu của client. Nói đơn giản hơn, đây là truy vấn hướng client, cấu trúc dữ liệu không khô cứng 1 khuôn mẫu từ server (REST API) mà thay đổi theo từng ngữ cảnh sao cho hiệu quả nhất đối với client Ngoài ra, GraphQL hoàn toàn có thể create, update, delete, nhưng với cấu trúc sáng sủa và cấu trúc phân tầng nên lại càng thuận lợi cho lập trình viên phía client.

 
Nhìn chung, nếu có định hướng phát triển nhiều dòng sản phẩm, nhiều client thì đây là cơ hội có 1-0-2 để tìm hiểu GraphQL tại buổi GRAPHQL – GIẢI PHÁP CHO VẤN ĐỀ PHÁT SINH QUÁ NHIỀU API với những nội dung chia sẻ cơ bản nhất diễn ra trong 180 phút đến từ diễn giả TRẦN TRỌNG THANH – CTO của Nâu Studio!

2/ Bắt đầu nghiên cứu Big Data từ đâu & như thế nào?

Năm 2005, Amazon từng sở hữu ba cơ sở dữ liệu Linux lớn nhất thế giới với dung lượng là 7, 8TB, 18, 5TB và 24, 7TB để xử lí hàng triệu hoạt động mỗi ngày cũng như những yêu cầu từ khoảng nửa triệu đối tác bán hàng.

Tương tự, Facebook cũng phải quản lí 50 tỉ bức ảnh từ người dùng tải lên. YouTube hay Google thì phải lưu lại hết các lượt truy vấn và video của người dùng cùng nhiều loại thông tin khác có liên quan.

Như vậy, Big Data đang dần trở thành từ khóa công nghệ được tìm kiếm nhiều nhất trong những năm gần đây. Nhưng liệu bạn đã hiểu rõ những công nghệ, nền tảng thực sự nào đứng sau Big Data?

Với buổi chia sẻ BẮT ĐẦU NGHIÊN CỨU BIG DATA TỪ ĐÂU & NHƯ THẾ NÀO, bạn sẽ nắm rõ những kiến thức, kĩ năng nào để nghiên cứu, thực hành Big Data nhờ sự hướng dẫn chi tiết của chuyên gia kinh nghiệm trong suốt 180 phút của buổi học.

3/ How Tiki Made Dzựt Cô Hồn?

Cứ mỗi tháng 7 hằng năm, sự kiện Dzựt Cô Hồn của Tiki lại thu hút sự chú ý của đông đảo cư dân mạng. Người dùng than thở vì canh mãi mà dzựt không được, nhưng đứng trên phương diện lập trình, liệu có dev nào đã từng thắc mắc Tiki sử dụng công nghệ, ngôn ngữ nào để xây dựng tạo nên 1 trong những chương trình rầm rộ nhất của mình?

Chưa dừng lại ở đó, hàng loạt vấn đề khác mà dân lập trình không thể làm ngơ: Từ framework, CSDL đến quá trình đảm bảo server, domain, cloud… chạy ổn định và cả những chiêu thức nhằm loại bỏ những khách hàng gian lận, hack, dùng Bot để can thiệp vào hệ thống.

Tất cả sẽ được tiết lộ tại buổi Meetup HOW TIKI MADE DZỰT CÔ HỒN với những chia sẻ chuyên sâu của chuyên gia, qua đây giúp bạn nắm vững cách giải quyết, xử lý “mượt mà” bài toán có hàng trăm ngàn request truy cập chỉ trong 3 giờ của buổi Meetup. Đây chắc chắn là 1 case study kinh điển và bài học kinh nghiệm quý giá dành cho các bạn Web dev, Tech team và Tech leaders.

Nguồn: Techtalk tổng hợp

Làm sao để chuyển đổi từ Graphic Design sang UX Design? (phần 1)

Graphic design

Nếu có một nghề 100% liên quan tới ý tưởng của mọi người về thiết kế là gì thì đó chính là thiết kế đồ họa (Graphic Design). Từ hình ảnh logo quen thuộc của MC Donald cho đến kiểu chữ và màu sắc của 1 poster film, thiết kế đồ họa đã tạo ra nhiều thiết kế mang tính biểu tượng và phổ biến quanh chúng ta hiện nay.

Vậy tại sao 1 Graphic Designer lại muốn chuyển sang UX Design? Đầu tiên phải nói về sự thỏa mãn và thành tựu bắt nguồn từ việc đi sâu vào chi tiết của sản phẩm bạn đang làm thay vì làm việc bên ngoài. Hơn thế nữa, theo PayScale, lương trung bình của Graphic Design ở United State là $41.000 nhưng lương cho UX Design lại lên tới $47.000.

Cho dù lí do chuyển đổi là gì đi nữa, rõ ràng đây cũng là một điều rất đáng khen ngợi. Nhưng làm thế nào để chuyển từ Graphic Design sang UX Design? Cùng tìm hiểu nhé.

Xem thêm: việc làm ui ux designer chất nhất cho bạn

Trải nghiệm người dùng (User Experience) và Thiết kế trải nghiệm người dùng là gì?

Trải nghiệm người dùng (User experience – UX) là các trải nghiệm người dùng cảm nhận được trong quá trình sử dụng 1 sản phẩm nhất định. Vì vậy nên công việc của 1 UX Design là tạo ra 1 sản phẩm cung cấp các trải nghiệm khả thi tốt nhất cho người sử dụng. Vậy làm cách nào?

Tất nhiên việc này sẽ bắt đầu từ việc thực hiện rất nhiều nghiên cứu. Bạn không thể tạo ra bất cứ giá trị nào cho khách hàng trừ khi bạn hiểu họ đang gặp phải vấn đề gì và bạn có thể giải quyết vấn đề đó giúp họ như thế nào, vậy đó chính là điều mà người sử dụng muốn hay đúng hơn là cần giải pháp của bạn. Bạn chỉ có thể hiểu được khách hàng bằng cách tương tác với họ.

Từ hình bên dưới có thể thấy được, UX Design dường như quan tâm tới 3 yếu tố căn bản sau: Hình dáng của sản phẩm, cảm xúc của sản phẩm và độ hữu dụng của sản phẩm đó.

Hình dáng của 1 sản phẩm là tạo ra 1 sản phẩm có vẻ ngoài thu hút, đặc biệt hòa hợp với giá trị của khách hàng và bắt được tinh thần mà sản phẩm mong muốn. Nói cách khác, hình dáng không nhất thiết phải đẹp nhưng nó nhất định phải đúng. Để làm vậy, phải hình thành một sợi dây liên kết tin tưởng và tín nhiệm giữa sản phẩm và người dùng.

Tiếp theo là cảm xúc, đó là việc phát triển sản phẩm tạo ra cảm giác vui vẻ khi sử dụng. Kể cả khi bạn tương tác hay phản ứng với sản phẩm, chúng đều nên tạo ra một trải nghiệm thoải mái chứ không chỉ thể hiện chức năng không.

Cuối cùng, độ hữu dụng chính là nền tảng của trải nghiệm người dùng. Nếu sản phẩm không hữu dụng, sự trải nghiệm khi sử dụng nó sẽ không bao giờ hoàn hảo. UX Design muốn tạo ra những sản phẩm có thể được thiết kế riêng để đáp ứng các nhu cầu đặc biệt của người sử dụng nhưng cũng phải cung cấp đủ các chức năng có thể được tiên đoán trước.

Vậy Graphic Design và UX Design có điểm chung gì?

Thiết kế theo cảm xúc

Graphic Designer là việc giao tiếp có cảm xúc thông qua kiểu chữ, màu sắc và hình ảnh. Kiểu chữ Serif và các màu tối, đậm sẽ gợi lên cảm giác lo lắng, nghiêm trọng, trong khi kiểu chữ San-serif và màu sáng dường như sẽ đem lại cảm giác vui vẻ hay phấn khích. Graphic Designer thường là những người rất giàu cảm xúc sẽ gợi lên những phản ứng từ phía người dùng. UX Design cũng quan tâm tới việc định hình cảm xúc của người sử dụng, mặc dù có thể ở phạm vi rộng hơn là bức tranh toàn cảnh của toàn bộ trải nghiệm người dùng với sản phẩm. Hơn cả việc tập trung vào kiểu chữ và màu sắc đúng đắn, UX Design cũng quan tâm  tới thiết kế chuyển động, giọng điệu của content, kiến trúc của thông tin hơn những thứ khác.

Suy nghĩ sáng tạo

Cả Graphic design và UX Design đều có kĩ năng về suy nghĩ sáng tạo. Đối với Graphic Designers, tạo ra các hình ảnh tuân thủ các quy ước (và do đó truyền đạt hiệu quả) trong khi vẫn giữ được một cảm giác độc đáo (nổi bật trong số các đối thủ cạnh tranh) đòi hỏi một vài suy nghĩ sáng tạo và quan trọng.

UX design cũng giống vậy, họ phải tạo ra các sản phẩm giải quyết vấn đề của người sử dụng, và thỉnh thoảng các giải pháp thông thường không phải lúc nào cũng tốt nhất hay thích hợp nhất.

Bản mẫu giả lập (Prototype)

Graphic Design thường tạo ra các Prototypevà wireframes cho thiết kế của họ trước khi chuyển giao một thiết kế hoàn chỉnh. Điều này cho phép khách hàng có thể feedback trên thiết kế của họ để cải thiện mà không cần phải vẽ lại từ đầu. UX Design cũng tạo ra các bản mẫu giả lập và sản phẩm mẫu, nhưng ít tập trung vào phần hình dáng mà tập trung vào cảm giác của nó. Prototype có tác dụng không? Nó có hữu dụng không? Có đáng giá không? Đây đều là những câu hỏi mà một UX design muốn trả lời.

Sự khác biệt giữa Graphic Design và UX Design

Tập trung vào người dùng vs Tập trung vào ảnh

Graphic Designer dường như theo đuổi sự hoàn hảo về việc lấy nét tự động trong các thiết kế của mình. Họ phải đảm bảo rằng các dòng chữ có khoảng cách và màu sắc phù hợp với các yêu cầu từ thương hiệu – luôn chiếm một phần quan trọng trong công việc của người Graphic Design.

UX Design lại tập trung vào người sử dụng. Họ nghiên cứu các giao diện giữa sản phẩm và người sử dụng, tìm cách để đảm bảo sản phẩm có thể đáp ứng được với các nhu cầu của người dùng. Để làm được vậy họ phải thực hiện nhiều nghiên cứu bằng cách nói chuyện và quan sát người sử dụng, tạo ra cá tính và câu chuyện cho người dùng, kiểm tra khả năng của người sử dụng và nhiều hơn nữa. Graphic Designer nếu muốn chuyển con đường sự nghiệp sẽ cần phải làm rất nhiều thứ để tìm ra cách thức hiện khảo sát người sử dụng.

Giải quyết các vấn đề lặp lại

UX Design có quá trình giải quyết các vấn đề lặp lại nhiều lần và có thể rất khác với khi bạn là Graphic Design. Bắt đầu với việc xác nhận vấn đề – thường được tìm thấy thông qua nghiên cứu và nếu không phải thì thường được xác nhận thông qua khảo sát người dùng. Không có điểm nào trong quá trình giải quyết vấn đề mà người sử dụng không quan tâm; nếu họ sẽ không trả tiền để giải quyết các vấn đề đó và điều đó nghĩa là công ty bạn sẽ không nhận được tiền.

Từ bước xác nhận vấn đề, các nghiên cứu sẽ tiếp tục được thực hiện để tìm cách giải quyết mà khách hàng cảm thấy tốt nhất – thường thông qua quan sát, bảng khảo sát, nghiên cứu dân tộc học, v.v…

Những khảo sát này sẽ thông tin đến bản thiết kế của sản phẩm. Designer sau đó sẽ kiểm tra với người sử dụng để xem liệu khảo sát đó có dẫn tới giải pháp đúng đắn hay không. Những bản thiết kế này chắc chắn sẽ lặp lại cho đến khi các bản khảo sát xác nhận rằng chúng đã đủ tốt.

Khi điều này xảy ra chứng tỏ sản phẩm đã sẵn sàng để ra mắt, nhưng quy trình thiết kế vẫn chưa kết thúc. Các bản thiết kế sẽ tiếp tục được kiểm tra và thực hiện các bản khảo sát người sử dụng, sau đó lại bắt đầu 1 vòng mới của việc khảo sát người dử dụng. Các cải tiến cho thiết kế sau này đều sẽ dựa trên những phản hồi này.

Đa môn và chuyên ngành

Graphic Design có những quy luật nhất định, có tay nghề chắc chắn và các kĩ năng đặc biệt (như kiến thức về kiểu chữ và màu sắc) nhằm tạo ra các hình ảnh tuyệt vời.

Ngược lại UX Design đa ngành hơn và liên quan đến nhiều kiến thức từ các ngành khác nhau. UX Design nhất định phải học về tâm lí con người, thiết kế tương tác, kiến trúc thông tin và kĩ năng khảo sát … để tạo ra các giải pháp đúng đắn đối với các vấn đề của người sử dụng. Don Norman, người tạo ra cụm từ “User Experience” (Trải nghiệm người dùng) – giải thích rằng trải nghiệm người dùng “bao gồm tất cả các khía cạnh trải nghiệm của 1 người dùng với hệ thống kể cả thiết kế công nghiệp, giao diện, tương tác vật lí và cách sử dụng”.

(còn tiếp)

Nguồn: topdev.vn via interaction-design.org

Học ngôn ngữ gì cho Data Science?

Học ngôn ngữ gì cho Data Science?

Data Science là một lĩnh vực vô cùng thú vị, kết hợp giữa thống kê nâng cao, phân tích số liệu và khả năng lập trình. Có rất nhiều ngôn ngữ lập trình thích hợp để dùng cho Data Science.

Tuy sẽ không có câu trả lời chính xác nhưng để thành công trong Data Science, bạn sẽ cần chú ý đến những điều sau:

Specificity – Chuyên biệt

Khi nói đến Data Science, bạn sẽ cần phải thuần thục tất cả các package và module khác nhau có trong ngôn ngữ lập trình bản thân chọn.

Generality – Tổng quát

Data scientist phải có kĩ năng tốt trong lập trình cũng như khả năng phân tích số liệu. Bởi phần lớn công việc hàng ngày của Data science là lọc và clean dữ liệu. Đây là một task mà không có bất kì machine learning packages nào có thể làm thay được.

Productivity – Năng suất

Với việc mọi thứ càng trở nên năng động hơn trong thế giới kinh doanh hiện nay, năng suất đóng cũng đóng vai trò rất quan trọng. Tuy vậy, nó đồng nghĩa với việc khả năng xuất hiện lỗi cũng nhiều hơn cũng như đòi hỏi kĩ năng cao từ các Data scientist.

Performance – Hiệu năng

Trong một số trường hợp, việc cải thiện hiệu năng cho code được ưu tiên hàng đầu, đặc biệt là khi ta có một lượng lớn các data quan trọng. Ngôn ngữ Compiled thường nhanh hơn so với loại interpreted, cũng như statically typed languages thì ít bị “fail” hơn khi so với loại dynamically. Tất nhiên bù lại thì hiệu năng của nó thấp hơn.

Đây là 4 tiêu chí mà bạn sẽ dùng để xếp hạng các loại ngôn ngữ lập trình cho Data Science. Giờ thì chúng ta cùng xem qua những ngôn ngữ nổi bật thường được dùng. Chúng sẽ được xếp hạng theo độ nổi tiếng cũng như dựa theo quan điểm và trải nghiệm của chính tôi:

R

Điều mà bạn cần biết

Được tung ra vào năm 1995 với tư cách là truyền nhân của ngôn ngữ lập trình S. R đã có những bước phát triển và cải thiện mình. Hiện project đang được hỗ trợ bởi R Foundation for Statistical Computing.

License

Hoàn toàn miễn phí!!

Điểm mạnh

Chất lượng tuyệt hảo, domain chi tiết và open source packages. R gần như có mọi package cho từng thể loại app khác nhau. Có thể kể đến là neural networks, non-linear regression, phylogenetics, advanced plotting, v.v…

Phần mềm cài đặt đã có tích hợp sẵn các function và phương pháp thông kê nâng cao. R cũng không gặp phải vấn đề gì với ma trận đại số.

Data visualization cực kì mạnh mẽ với các libraries như ggplot2.

Điểm yếu

Hiệu năng. Không có gì để bào chữa, R không phải là một ngôn ngữ nhanh nhẹn.

Chỉ thích hợp cho một số mục đích nhất định. R cực kì tuyệt vời về thông số và data science nhưng thua những đứa em khác khi bạn chỉ muốn lập trình chung chung thôi.

Quái. R có một số tính năng hơi quái khi đi ngược với các ngôn ngữ lập trình khác như: index bắt đầu từ 1, sử dụng nhiều assignment operators, cấu trúc dữ liệu lạ lẫm.

Kết luận – Tuyệt vời cho mục đích của nó

R là một ngôn ngữ vô cùng mãnh mẽ khi nói về thông số và data visualization, và cũng như việc là open source cho phép cộng đồng đóng góp cải thiện R. Gần đây, nó càng ngày nổi tiếng vì quá xuất sắc tại lĩnh vực của mình.

Python

Điều mà bạn cần biết

Học ngôn ngữ gì cho Data Science?

Guido van Rossum giới thiệu Python vào năm 1991. Kể từ đó, nó trở nên rất nổi tiếng bởi sự đa năng của mình và được dùng rộng rãi trong cộng đồng data science. Hai phiên bản chính hiện nay là 3.6 2.7.

License

Hoàn toàn miễn phí!!

Điểm mạnh

Python rất nổi tiếng, được xem là ngôn ngữ lập trình mainstream, thích hợp cho nhiều mục đích khác nhau. Nó có modules  được tạo ra nhằm mở rộng tính năng của mình cũng như sự trợ giúp đến từ cộng đồng. Có nhiều dịch vụ online còn cung cấp cả một Python API.

Python  rất dễ học bởi nó đơn giản. Do đó mà thường được các lập trình viên chọn ngôn ngữ đầu tiên để học.

Với những package như pandas, scikit-learn và Tensorflow khiến cho Python trở thành một lựa chọn khá tốt cho những app có áp dụng machine learning ở level cao.

Điểm yếu

Python là ngôn ngữ thuộc dạng dynamical, nên bạn sẽ phải rất quan tâm đến nó. Bởi các Type errors sẽ xuất hiện thường xuyên.

Với một số tình huống phân tích dữ liệu và thống kê, R sẽ vượt trội hơn so với Python. Còn nếu chỉ là đơn giản học chung chung thì lại có những lựa chọn khác tốt hơn Python.

Kết luận – Cân bằng mọi mặt

Python là một lựa chọn khá tuyệt vời cho data science. Đa phần bởi quá trình của data science nằm ở ETL process nên Python cũng rất được chú ý bởi sự thích hợp của nó.

SQL

Điều mà bạn cần biết

Học ngôn ngữ gì cho Data Science?

SQL (‘Structured Query Language’) defines, quản lí và queries databases. Xuất hiện từ 1974, trải qua nhiều thay đổi nhưng giá trị cốt lỗi vẫn được giữ nguyên.

License

Tùy thuộc – một số implementations miễn phí và số khác là tính phí.

Điểm mạnh

Cực kì hiệu quả với querying, update cũng như kiểm soát databases.

Declarative syntax giúp cho SQL trở thành một ngôn ngữ dễ đọc. Chẳng có gì khó hiểu với  SELECT name FROM users WHERE age > 18  cả.

SQL được dùng bởi rất nhiều ứng dụng khác nhau nên sẽ có ích khi bạn biết về nó. Các Modules  như SQLAlchemy giúp việc việc integrate SQL với các ngôn ngữ khác trở nên dễ dàng và nahnh chóng.

Điểm yếu

Khả năng phân tích của SQL khá hạn chế – ngoài tổng hợp, cộng, đếm và tính số trung bình cho data thì bạn không có nhiều lựa chọn lắm.

Programmer đôi khi sẽ thấy rằng SQL’s declarative syntax khá khó học

Có rất nhiều implementations cho SQL như PostgreSQL, SQLite, MariaDB. Điều quan trọng là chúng quá khác nhau đến mức việc bạn phải học từng cái đã rất đau đầu.

Kết luận – Hiệu quả và bền bỉ

SQL là ngôn ngữ thích hợp với việc xử lí data hơn là dùng để phân tích nó. Tuy vậy vẫn có nhiều quá trình data science dựa vào ETL, cũng như sự bền bỉ và hiệu quả của SQL đã chứng minh rõ sự mạnh mẽ của mình.  

Java

Điều mà bạn cần biết

Học ngôn ngữ gì cho Data Science?

Java là một ngôn ngữ lâp trình cực kì nổi tiếng, chạy trên (JVM) Java Virtual Machine. Nó cho phép tính di động giữa các platform và hiện đang được phát triển bởi Oracle.

License

Version 8 —  hoàn toàn miễn phí

Điểm mạnh

Ở khắp mọi nơi. Rất nhiều hệ thống và app ngày nay được tạo ra trên Java back-end. Tính năng tích hợp data science vào thẳng codebase quả thật cực kì mạnh mẽ.

Java bảo đảm bạn không phải lo về lỗi type. Đối với những big data applications, đây như là một thiên đường vậy.

Java là một ngôn ngữ compile với hiệu suất rất cao. Nhờ đó mà nó thích hợp cho việc tạo ra những ETL production code hiệu quả cũng như các thuật toán machine learning phức tạp.

Điểm yếu

Với những app tập trung về phân tích thông số thì Java sẽ không phải là lựa chọn đầu tiên bởi sự vượt trội của R và Python.

Không như R, Java không có nhiều libraries cho các phương thức thông kê nâng cao.  

Kết luận – Một ứng viên đầy tiềm năng cho Data Science

Có rất nhiều nguyên nhân để chọn Java làm ngôn ngữ data science. Rất nhiều công ty sẽ quí trọng khả năng tích hợp data science production code trực tiếp vào codebase, cũng như là hiệu năng cao và ít lỗi type của Java. Tuy vậy nếu như bạn chỉ tập trung thuần túy vào việc phân tích và thống kê thì ngoài Java ra vẫn có R và Python.

Scala

Điều mà bạn cần biết

Học ngôn ngữ gì cho Data Science?

Phát triển bởi Martin Odersky và được tung ra vào 2004, Scala là một ngôn ngữ chạy trên JVM. Nó là một mô hinh đa ngôn ngữ, cho phép sử dụng cả 2 phương thức object-oriented và functional. Framework Apache Spark cũng được được bằng Scala.

License

Miễn phí!

Điểm mạnh

Scala + Spark = cluster computing với năng suất cực cao. Scala là một lựa chọn lí tưởng khi làm với những data sets với qui mô lớn.

Đa mô hình: Scala programmers được hưởng tất cả những thứ tốt nhất. Cả hai mô hình object-oriented và functional đều có thể dùng được.

Scala được compiled vào Java bytecode và chạy trên JVM. Nhờ đó cho phép khả năng tương tác Java. Nhờ đó mà Scale là môt ngôn ngữ khá mạnh mẽ, phù hợp cho nhiều mục đích khác nhau.

Điểm yếu

Scala không phải là ngôn ngữ dễ cho bạn chọn đầu tiên để học. Cách tốt nhất là download sbt và set-up một IDE như Eclipse hay IntelliJ với Scala plug-in.

Syntax và type system rất phức tạp nên sẽ khiến nó không hấp dẫn bằng Python.

Kết luận – Hoàn hảo cho big data

Khi nói về cluster computing với Big Data, Scala + Spark là một sự kết hợp hoàn hảo cho bạn. Nếu đã từng dùng qua Java hoặc các ngôn ngữ thuộc statically typed, bạn sẽ thấy rằng các tính năng của Scala rất mạnh mẽ. Tuy nhiên nếu không nhắm tới qui mô như vậy thì R và Python sẽ là những lựa chọn phù hợp hơn.

Julia

Điều mà bạn cần biết

Học ngôn ngữ gì cho Data Science?

 

Với tuổi đời chỉ mới 5 năm, Julia đã gây được ấn tượng mạnh với cộng đồng lập trình. Nó được biết tới nhanh chóng nhờ vào việc nhiều ông lớn đã chấp nhận sử dụng Julia ngay từ thời điểm nó mới được tung ra.

License

Miễn phí

Điểm mạnh

Julia là một JIT (‘just-in-time’) compiled language với hiệu năng rất cao. Nó cũng có dynamic-typing cùng khả năng scripting như một interpreted language (Python chẳng hạn).

Julia được tạo ra nhằm để phân tích số liệu.

Code của Julia rất dễ đọc.

Điểm yếu

Do tuổi đời còn trẻ nên Julia vẫn chưa được ổn định khi dùng các packages khác nhau.

Mặt khác, số lượng của package vẫn còn rất hạn chế và không được phong phú đa dạng như các ngôn ngữ khác ở trên.

Kết luận – Dành cho tương lai

Vấn đề mà Julia  gặp phải là sự non trẻ của mình. Do đó hiện tại Python và R vẫn là những lựa chọn tốt hơn. Tuy vậy, nếu bạn muốn thử sự mới lạ cũng như có đủ kiên nhẫn thì Julia sẽ không làm bạn thất vọng.

MATLAB

Điều mà bạn cần biết

MATLAB là một ngôn ngữ chuyên về số liệu được dùng bởi nhiều đại học và công ty khác nhau. Được phát triển bởi MathWorks, một công ty chuyên về phần mềm số hóa.

License

Trả phí

Điểm mạnh

Dành cho việc thống kê và phân tích số liệu. MATLAB rất phù hợp cho những app chuyên về số cùng với áp dụng toán học nâng cao như signal processing, Fourier transforms, matrix algebra và image processing.

Data Visualization.

MATLAB được dùng rộng rãi từ toán học cho tới vật lí, Engineer.

Điểm yếu

Phải trả phí.

MATLAB không đa năng như các ngôn ngữ khác.

Kết luận – Là lựa chọn đầu tiên cho các app nặng về toán học

MATLAB với khả năng ưu việt của nó về phân tích và thống kê số liệu được xem là lựa chọn hoàn hảo cho data science.

Một số các ngôn ngữ khác

Vẫn có một số ngôn ngữ “mainstream” khác mà data scientists vẫn có thể dùng.

C++

C++ không phải là một lựa chọn thường thấy cho data science, dù nó cực kì nhanh cũng như rất nổi tiếng. Vấn đề đơn giản là nằm ở năng suất của nó.  

Thật sự mà nói, C++ vẫn có thể giúp ta tạo ra những machine learning feature ở level thấp, tuy vậy, những ngôn ngữ ở trên đều có thể làm được vậy và thậm chí là còn tốt hơn.

Kết luận – Không dành cho dùng hàng ngày nhưng nếu bạn thật sự chú trọng tới tốc độ xử lí.

JavaScript

Với sự phát triển của Node.js, JavaScript đang dần phát triển theo hướng server-side language. Tuy vậy, trong lĩnh vực data science và machine learning vẫn bị hạn chế rất nhiều. Nguyên nhân là bởi:

  • Kẻ sau đến muộn (Node.js chỉ mới có 8 năm tuổi)
  • Libraries và modules cho data science cực kì ít.
  • Dù Node.js nhanh nhưng JavaScript vẫn còn nhiều điểm yếu

Kết luận – Vẫn còn quá nhiều thứ cần phải cải thiện trước khi JavaScript thật sự được dùng cho Data Science.

Perl

Perl được xem như là dao thụy sĩ của giới lập trình bởi sự đa năng, phù hợp cho nhiều mục đích khác nhau. Chia sẻ nhiều điểm giống với Python nhưng lại có số phận khá lèo bèo và không có nhiều thành công trong data science như Python.

Kết luận – Một ngôn ngữ đa năng cho nhiều mục đích khác nhau nhưng không hề có điểm mạnh nào trong lĩnh vực Data science.

Ruby

Cũng là một ngôn ngữ nổi bật khác bởi sự đa năng của nó. Tuy nhiên cũng như Perl, khi so sánh với Python thì nó tỏ ra kém cạnh rất nhiều trong lĩnh vực Data Science.

Tuy hiện tại cũng có SciRuby project nhằm giúp Ruby phát triển thêm trong Data Science nhưng hiện tại thì Python vẫn là người dẫn đầu cuộc đua.

Kết luận – Không phải là một lựa chọn tốt nhưng cũng không quá tồi

Tổng Kết

Tôi thường dùng R, Python và SQL cho task hằng ngày, vốn tập trung vào việc phát triển data pipeline và ETL.

Tuy vậy với những project qui mô cũng như có liên quan tới Big Data thì Java và Scala là những lựa chọn tuyệt vời.

Còn nếu bạn muốn khám phá thì Julia project sẽ là một điểm tới hấp dẫn.

Nguồn: via Medium

 

 

10+ tools và extensions tuyệt vời cho GraphQL APIs

10+ tools và extensions tuyệt vời cho GraphQL APIs

Với sự quan tâm ngày càng lớn dành cho GraphQL, một hệ sinh thái mới sôi động của phần mềm hỗ trợ đã nhanh chóng nổi lên. Cộng đồng mã nguồn mở, startups cũng xác nhận các trường hợp sử dụng GraphQL mới, hạn chế những khó khăn khi phát triển GraphQL, cho phép nhiều nhà phát triển áp dụng GraphQL ươn và giảm chi phí cùng với các công cụ tuyệt vời.

Đây là một tin tuyệt vời với các ngôn ngữ truy vấn, vì Lee Byron, một designer của GraphQL tại Facebook, gần đây đã lưu ý rằng để GraphQL phát triển phổ biến, các hệ sinh thái rất cần bổ sung thêm các công cụ:

Cho dù các công cụ xử lý phân tích hiệu suất của các dịch vụ đồ hoạ, đã được xây dựng trước tại GraphQL server, hoặc cung cấp IDEs để khám phá  GraphQL schemas, vẫn còn rất nhiều việc cần làm để cải thiện khả năng sử dụng và áp dụng GraphQL.

Trong bài viết này, chúng tôi sẽ giới thiệu một loạt các công cụ để khám phá các mối quan hệ của GraphQL, tài liệu về GraphQL API, tối ưu hoá và theo dõi GraphQL API, chuyển từ REST API thành GraphQL, hoặc nếu bạn đang có một kế hoạch khác, bạn có thể muốn coi qua các extensions dưới đây để bổ sung chp API stack của mình.

GraphiQL

Một IDE trong trình duyệt giúp khám pháp GraphQL APIs

Nhưng chúng ta đã thảo luận trước, nhiều GraphQL APIs sử dụng giao diện điều khiển mã nguồn mở này interactive API playground. GraphiQL là một môi trường phát triển tích hợp (IDE) để tương tác với các API GraphQL calls, cho phép các dev truy vấn dữ liệu và thực hiện mutations.

IDE này tương đối dễ thực hiện; cho các máy chủ Node.js, express-GraphQL có thể tự động tạo ra GraphiQL. Vì nó được xây dựng dựa trên React, GraphiQL cũng có thể được nối với CSS cho việc xây dựng tùy chỉnh.

Cột GraphiQL bên trái để nhập truy vấn với sytax editor để tìm kiếm lược đồ có liên quan bằng cách sử dụng tính năng autocomplete. Khi yêu cầu được chạy, phản hồi sẽ được hiển thị ở cột bên phải.

Sự trợ giúp trực quan dưới dạng sandbox API, playground, hoặc các phương tiện tương tác khác là một khía cạnh quan trọng để hỗ trợ API nhằm đáp ứng nhu cầu của các dev.

GraphQL Voyager

Thể hiện GraphQL API dưới dạng biểu đồ tương tác

Nếu bạn hi vọng nhìn thấy mối tương quan giữa các dữ liệu, hãy chạy nó thông qua GraphQL Voyager, nó sẽ cho bạn một trải nghiệm rất ngầu. Voyager lấy một GraphQL API và biến nó thành graph trực quan. Sau khi thiết lập một lược đồ gốc, bạn có thể xem trực quan các field được kết nối như thế nào. Voyager lựa chọn một loại làm nổi bật các field bao gồm, và liên kết đến dữ liệu có liên quan trong đồ thị.

The Star War API (SWAPI) được biểu diễn trực quan bằng GraphQL Voyager

Như Lee Byron, Ivan Goncharov founder của APIs.guru đã nói với Nordic API:

“Tạo ra một công cụ tiên tiến có thể làm việc bất kì GraphQL API nào có thể là một trong những điều quan trọng mà REST API bị thiếu”

GraphQL Voyager cung cấp một cột bên trái mô tả thông tin của fields và một giao diện trực quan cung cấp điều hướng nhanh. Người sử dụng cũng có thể đơn giản hóa các đồ thị bằng cách loại bỏ các lớp wrapper Relay. Ngoài việc thể hiện các hình ảnh mềm mại, Voyager có thể giúp các công ty hình dung mô hình dữ liệu của họ, tạo ra các cuộc hội thoại trên các quan hệ dữ liệu,… Cuối cùng, chúng ta có thể xem “graph” phía sau GraphQL.

Graph CMS

Xây dựng một GraphQL Content API trong vài phút

GraphCMS là một hệ thống quản lý nội dung (CMS) API mà gắn liền với GraphQL. Nó cho phép bạn lưu trữ một hosted GraphQL hỗ trợ cho các ứng dụng web, cung cấp công cụ để quản lý nội dung. Người dùng xác định cấu trúc dữ liệu, xác nhận chúng trong bảng điều khiển, và có thể xem trình bày ở giao diện người dùng, tất cả đều nằm trong cùng một nền tảng.

Mặc dù GraphCMS không phù hợp với nền tảng API hiện tại nhưng nó thích hợp cho blog, ứng dụng web, hoặc các cấu trúc nội dung khác đòi hỏi khả năng chia sẻ dữ liệu theo chương trình. Một CMS dựa trên GraphQL sẽ là một thay thế thú vị cho các CMS truyền thồng như WordPress hoặc Drupal, sẽ cho phép một framework quản lý trong tương lai được trang bị API và nó có thể quản lý linh hoạt hơn cho giao diện người dùng cuối.

GraphQL Docs

Tài liệu ngắn gọn dễ hiểu cho GraphQL API

Cần một tài liệu tĩnh cho giản đồ GraphQL API? Còn lựa chọn nào tốt hơn GraphQL Docs. Trang web sẽ tạo ra các tài liệu chức năng đơn giản trong 10 giây, cho GraphQL điểm đích là URL. Người dùng có thể chọn công khai danh mục tài liệu API của họ, hoặc giữ nó ở chế độ  riêng tư.

Một mã nguồn mở tương đương cho tài liệu tĩnh là graphdoc-fork, nó tự tạo và lưu trữ các tài liệu GraphQL. Đối với cả hai, kết quả trả về la2 một giao diện ngắn gọn, menu tìm kiếm, và liên kết với các lược đồ định nghĩa đối tượng, và nhiều hơn nữa.

GraphQL Faker

Làm giả hoặc mở rộng API GraphQL với dữ liệu fake

Nếu bạn đang làm giả một gốc API, tại sao không thêm một số dữ liệu lorem ipsum để kiểm tra mọi thứ? Với GraphQL Faker, các nhà phát triển API GraphQL có thể chèn dữ liệu thực tế để bắt chước kết quả thực. Nó được hỗ trợ với fake.js, cho phép nhà phát triển mô phỏng trên 60 loại dữ liệu thực tế, như địa chỉ – đường phố, tên và họ, avatar và nhiều hơn thế. Tất cả những gì bạn cần là viết một IDL GraphQL, GraphQL Faker cung cấp một số ví dụ để bắt đầu soạn thảo IDL. Nó rất đơn giản:

type Person {
  name: String @fake(type: firstName)
  gender: String @examples(values: ["male", "female"])
}

Swagger GraphQL

Chuyển từ REST sang GraphQL trong 5 phút

Đối với các nhà cung cấp API cố thủ với mô hình truyền thống REST, họ sẽ không quan tâm việc dùng thử GraphQL. Mô hình này chỉ cần đưa Swagger lược đồ, và nó sẽ tự động chuyển sang GraphQL.

GraphQL IDE

Một IDE rộng lớn để khám phá GraphQL API

Môi trường phát triển tích hợp, hoặc IDE thường là một trình soạn thảo mã nguồn tối đa hoá năng suất của nhà phát triển với những tính năng như debug, hoàn thành code, compiling và giải thích. GraphQL IDE là một thay thế cho GraphiQL, nhưng sự khác biệt là “phổ biến”. Nó cung cấp thêm các tính năng quản lý dự án, tiêu đề tùy chỉnh và năng động, khả năng nhập / xuất, khả năng lưu trữ các truy vấn và xem lịch sử truy vấn.

GraphQL Network

Chrome Devtool cung cấp một “network” kiểu tab để cho phép nhà phát triển debug dễ dàng hơn

Nhiều kỹ thuật viên của chúng tôi là một người dùng mạnh mẽ của Google Chrome, do đó một tab trình duyệt về GraphQL là một điều cần thiết và nghiêm túc. Được gọi là GraphQL Network, tab hữu ích này tương tư như việc xem request network trong Chrome DevTool – đây là một công cụ tuyệt vời để gỡ lỗi các cuộc gọi API RESTful, nhưng ngắn khi làm việc với GraphQL, vì thường “/graphql” được hiển thị dưới dạng điểm cuối.

Tab này hiển thị một danh sách ngắn các yêu cầu GraphQL gần đây, liệt kê tên phương thức HTTP, trạng thái và loại request. Ngoài ra, GraphQL Network cũng cung cấp một cái nhìn thô của chuỗi GraphQL được gửi, cũng như xem một tính toán đang được giải trên máy chủ. Có các mục nhập riêng biệt được đặt ra cũng như có thể xem các đoạn mã có thể đọc được, có thể hữu ích để theo dõi và debug các truy vấn GraphQL.

Graphcool

Back-end hỗ trợ linh hoạt kết hợp GraphQL + AWS Lambda

Với kiến trúc linh hoạt, khả năng mở rộng, không cần máy chủ, có một back-end được hình thành trước là một triển vọng thú vị, đặc biệt là khi nó tương tác với GraphQL out-of-the-box. Graphcool là một nền tảng để hỗ trợ thiết kế lược đồ GraphQL và phát triển back-end ứng dụng, đi kèm với một bảng điều khiển trực quan để thiết kế và chỉnh sửa giản đồ dữ liệu của bạn, với khả năng tạo ra mô hình dữ liệu GraphQL tiên tiến, field tùy chỉnh và quan hệ giữa dữ liệu. tích hợp với công nghệ phổ biến như AWS Lambda, Algolia, và Auth0, Graphcool có vẻ là một công cụ mạnh mẽ để quản lý cơ sở dữ liệu hiện đại.

Optics by Apollo

Nhìn một vòng quanh danh sách các công cụ dành cho GraphQL, cuối cùng nhưng không kém phần quan trọng là Optics, một sản phẩm để theo dõi GraphQL APIs. Optics là một giải pháp phân tích cho các API GraphQL để theo dõi các truy vấn chạy như thế nào, giúp bạn biết những loại truy vấn đang được thực hiện và tần suất của chúng. Như chúng ta đã thảo luận trước đây, chỉ số API rất quan trọng và bất kỳ API web nào cũng có thể có lợi từ việc thêm giải pháp phân tích vào nền tảng của họ.

Xem khối lượng yêu cầu được hiển thị trực quan cũng như nắm bắt tốt hơn về các điểm nghẽn như các vấn đề về độ trễ là cần thiết để tối ưu hóa hiệu suất và cải thiện thời gian tải trang.

Optics được phát triển bởi Apollo, những người đóng góp lớn vào hệ sinh thái của GraphQL – Apollo Client là một ứng dụng GraphQL chuẩn bị cho ứng dụng React và native app, và Apollo cũng tổ chức các sự kiện để truyền bá kiến ​​thức GraphQL.

Lời kết

Các công cụ quan trọng khác bao gồm Thunder, một máy chủ GraphQL cho Go, Join Monster, một gói NPM để phân xử các vấn đề giữa cơ sở dữ liệu GraphQL và SQL, hoặc Dgraph, một cơ sở dữ liệu nhanh làm việc với GraphQL.

“Những công cụ tuyệt vời sẽ làm cho GraphQL trở nên phổ biến”
– Lee Byron, GraphQL / Facebook

Có rất nhiều thứ dường như đang nổi lên hàng ngày, và hy vọng với sự ra đời của các công cụ như những cái được đề cập trong bài viết này, nhiều nhà cung cấp có thể gặt hái được những lợi ích của GraphQL và tăng khả năng mở rộng nói chung và tốn ít nỗ lực.

Nguồn: nordicapis.com

Firebase & 5 nhầm lẫn tai hại thường gặp

Gần đây tôi đã đọc được khá nhiều lời bình luận online về Firebase. Đa phần chúng đều từ những developer vốn dĩ ghét Firebase.

“Queries thì sao mà phức tạp được!”

“Data model của nó thiệt là ngu”

“Mọi thứ đều phải là về phía client”

Nhiều khi bạn còn có thể thấy cả khói đang xì ra từ đầu của họ.

Cũng không có gì là khó hiểu bởi đó đều là những vấn đề bế tắc mà họ gặp phải khi dùng Firebase. Tuy nhiên, đôi khi chúng xuất phát từ việc họ hiểu sai về Firebase cũng như chức năng của nó.

Sau khi làm quen với Firebase được vài tháng, chúng tôi dùng nó để tạo ra một project planning tool gọi là Min. Có rất nhiều lầm tưởng tai hại mà mọi người mắc phải khi nói về backend-as-a-service(BaaS) solution này. Vì thế tôi mong bài viết này sẽ giúp gỡ những khúc mắc này cho các bạn.

Sai lầm 1: Firebase chỉ về client-side thôi

Chỉ mới gần đây thôi, Firebase vẫn còn là công nghệ client-side. Tuy vậy nó vẫn cho phép lưu trữ và querying. Tuy vậy đa phần mọi thứ đều được thực hiện tại phần client. Đối với các developers thì đây thật sự là điều quá khó nuốt bởi có web application nào mà lại không cần đến back-end?

Firebase team sau đó đã lắng nghe phản ánh từ cộng đồng người dùng. Vào tháng 3 2017, nhóm đã giới thiệu Cloud Functions dành cho Firebase. Với cloud functions, bạn có thể save các đoạn mã code lên Google Cloud. Những code này sẽ chạy khi có một Firebase events hay HTTP requests xuất hiện. Ví dụ như bạn muốn thực hiện data processing khi đang lưu dữ liệu trong database thì giờ bạn đã có thể làm được với Firebase.

Nếu bạn muốn biết thêm thì tôi khuyên bạn hãy vào đọc bài viết sau Cloud Function for Firebase docs.

Sai lầm 2: Firebase là nguyên nhân cho các đoạn code dài lê thê

Có một câu ngạn ngữ rằng “Người dở luôn đổ lỗi”, với kinh nghiệm dùng Firebase của tôi thì nó không hề khiến bạn viết ra những “cọng” code dài ngoằng. Bởi Firebase phần lớn thuộc về bên client, thế nên backend logic của bạn cũng sẽ nhắm tới cho client. Do đó nếu bạn không cẩn thận thì rất dễ cho ra code xấu và rối rắm.

Trong giai đoạn đầu phát triển của Min, chúng tôi dành rất nhiều thời gian để lên kế hoạch cho app như Data sẽ được modeling như thế nào, database sẽ có cấu trúc ra sao và cách tốt nhất để tương tác với dữ liệu là gì? Nhóm quyết định tạo ra một connector để kết nối với Firebase. Nó có toàn bộ code dành cho CRUD operations cũng như tương tác với Firebase. Ngoài ra, chúng tôi còn tập hợp list các class để xử lí dữ liệu của object dựa theo cấu trúc của Firebase database. Nhờ đó mà mọi thứ luôn rõ ràng và giúp cho code dễ bảo trì và fix hơn.

Sai lầm 3: data modelling dở / có quá nhiều duplication

Như chính thành viên của Firebase đã nói, Firebase database chỉ là một JSON tree khổng lồ. Data được lưu trữ như các cặp key-value và có thể có giá trị tùy theo ý bạn. Có rất nhiều cách để lưu trữ chúng vì thế nên bạn phải rất cẩn thận nếu không muốn bị gặp nhiều rắc rối.

Giả dụ như bạn muốn tạo ra một project management application đơn giản. Bạn có users và tasks. Tasks có thể được chỉ định Users. Bạn sẽ muốn lưu trữ tất cả thông tin của task trong một database của tasks node:

tasks : {
    "001" : {
        name         : "Development Round 1"
        description  : "Lorem ipsum dolor sit amet elit..."
        startDate    : "20170101"
        endDate      : "20170201"
        loggedHours  : {
            "20170101" : "1.66"
            "20170102" : "7"
            "20170103" : "5.5"
        }
        assignedStaff : "Cathryn"
    }
    "002" : {
        name : "Development Round 2"
        description : "Mauris quis turpis ut ante..."
        startDate   : "20170206"
        endDate     : "20170228"
        loggedHours  : {
            "20170206" : "3"
            "20170207" : "1"
            "20170208" : "4.75"
        }
        assignedStaff : "Sam"
    }
    "003" : {
        name : "Browser Testing"
        description : "Vivamus nec ligula et nulla blandit..."
        startDate   : "20170301"
        endDate     : "20170303"
        loggedHours  : {
            "20170301" : "1"
            "20170301" : "3"
        }
        assignedStaff : "Cathryn"
    }
}

Giờ nếu bạn muốn hiện tên của tất cả các task của Cathryn. Để làm được điều đó, bạn có thể query database để trả về các tasks “assignedStaff” có giá trị là “Cathryn”.

firebase
.database().ref(“tasks/”)
.orderByValue(“assignedStaff”).equalTo(“Cathryn”).once(“value”);

Vấn đề là nó sẽ trả tất cả mọi task được chỉ định với Cathryn, chứ không chỉ là task name. Nói cách khác có quá nhiều data thừa thãi.

Để khắc phục tình trạng trên, Firebase khuyến khích bạn denormalize data. Denormalization là thuật ngữ ám chỉ lưu trữ các phiên bản copy của dữ liệu trong database, nhằm cải thiện quá trình xử lí và đọc.

tasksByUser : {
    "Cathryn" : {
        "001" : "Development Round 1"
        "003" : "Browser Testing"
    }
    "Sam" : {
        "002" : "Development Round 2"
    }
}

Giờ nếu chúng ta lấy tên các task được chỉ định tới Cathryn, chúng ta sẽ chỉ đơn giản đọc từ một vị trí trong database:

firebase
.database().ref(“/tasksByUser/Cathryn”)
.once(“value”);

So với query ở trên thì nó sẽ xử lí nhanh hơn rất nhiều.

Denormalization nghe có vẻ như hack. Nhưng nó bắc buộc phải có để thiết kế một Firebase database cho web application với qui mô lớn và phức tạp. Đòi hỏi bạn phải rất am hiểu về data mà bạn muốn lưu trữ cũng như cách dùng chúng.

Trước khi nhảy vào tạo Firebase database, hãy bỏ thời gian học về denormalization, cách tạo cấu trúc cho data,  cũng như cách bảo trì chúng.

Sai lầm 4: Firebase có thể dẫn tới tình trạng dữ liệu không nhất quán

Nếu bạn thiết kế Firebase database đúng cách thì rất có thể data từ khắp database của bạn đã được denormalized. Và nếu dữ liệu của bạn được lưu trữ ở nhiều vị trí khác nhau thì hẳn bạn sẽ tự hỏi rằng “Làm cách nào để giữ cho data được nhất quán?”.

Bình thường, khi gửi data đến Firebase, bạn chỉ định một database path cũng như là loại data mà bạn muốn lưu trữ. Trở về với ví dụ, để update một task name (trước khi dùng denormalization), tôi sẽ làm như sau:

firebase
.database().ref(“tasks/001/name”)
.set(“Here’s the new name”);

Giờ với denormalization, tôi có thể update một task’s name bằng hai operations:

firebase
.database().ref(“tasks/001/name”)
.set(“Here’s the new name”);
firebase
.database().ref(“tasksByUser/Cathryn/001”)
.set(“Here’s the new name”);

Tuy vậy nó sẽ dễ bị dữ liệu không được nhất quán. Lỡ đâu một operation bị fail trong khi cái còn lại thành công thì sao? Vì thế mà ta cần một write operation tự động để cho phép tạo ra các database paths cùng lúc. Do đó, Firebase đã cung cấp multipath updates nhằm giải quyết vấn đề trên. Bạn có thể xem cách dùng chúng tại đây. Giờ thì update một task name sẽ chỉ cần làm như sau:

firebase
.database().ref()
.update({
    “tasks/001/name” : “Here’s the new name”,
    “tasksByUser/Cathryn/001” : “Here’s the new name”
});

Sai lầm 5: Khả năng querying rất hạn chế

Firebase thật sự rất hạn chế khi nói về query. Bạn có thể sắp xếp data theo keys hoặc giá trị và filter data.

Dựa theo ví dụ trên, ta có thể tạo một query để lấy tasks bắt đầu từ, trước hoặc sau 20170601. Tuy vậy, ta sẽ không thể lọc ra bằng nhiều giá trị và keys. Nói cách khác, việc query để thu hồi tasks được chỉ định tới Cathryn và bắt đầu sau 20170601 là điều không thể.

Dĩ nhiên là việc như vầy luôn là chủ đề phàn nàn của nhiều developer. Tuy vậy, mọi thứ đều có nguyên do của nó, Firebase là một real-time database và được thiết kế với mục tiêu xử lí thật nhanh. Vì thể để có được một query phức tạp thì sẽ đòi hỏi việc bạn thiết kế database của mình cho đúng.

Ví dụ như bạn muốn làm một query thu hồi các tasks được chỉ định tới Cathryn và bắt đầu từ 20170201. Tôi có thể thêm một “staff_startDate” property vào tasks của mình:

tasks : {
    "001" : {
        ...
        startDate       : "20170101"
        assignedStaff   : "Cathryn"
        staff_startDate : “Cathryn_20170101”
        ...
    }
    ...
}

Như vậy, khi cần ta sẽ chỉ phải query như sau:

firebase
.database().ref(“/tasks/”)
.orderByChild(“staff_startDate”)
.equalTo(“Cathryn_20170101”);

Tôi khuyến khích bạn xem qua Common SQL Queries converted for the Firebase DatabaseFirebase Database Querying 101. Khi bạn đã hiểu rõ về cấu trúc cũng như query data thì bạn sẽ có khả năng làm được nhiều queries phức tạp hơn.

Nguồn: Medium

Hãy viết thư xin việc theo cách “kì quái” này, bạn sẽ tìm được công việc mình muốn!

Mẫu CV

Là biên tập viên chuyên trang tuyển dụng The Daily Muse, Lisa Siva đã viết một bài chia sẻ bí quyết viết thư xin việc giúp tăng tỷ lệ được trả lời từ 0 lên 55%.

Bạn đã từng trải qua cảm giác viết thư xin việc, gửi đi trong háo hức nhưng mãi mãi không nhận được hồi đáp? Bài viết này có thể sẽ giúp bạn cải thiện tỉ lệ thành công của mình gấp bội!

Lisa Siva là biên tập viên của chuyên trang tuyển dụng The Daily Muse. Mới đây cô đã viết một bài chia sẻ “bí quyết” viết thư ứng tuyển đã giúp cô tăng tỉ lệ được trả lời từ 0 lên tới 55% trên Business Insider.

Khi mới chuyển tới New York, tôi đã từng là một cái máy viết thư xin việc (cover letter). Tôi đã từng viết thư cho tất cả các nhà tuyển dụng và thể hiện tình cảm với những vị trí mà trong thâm tâm cảm thấy chẳng chút hứng thú. Tôi tâng bốc những công ty trước giờ bản thân không hề biết tới sự tồn tại. Tỉ lệ thành công của tôi? Chỉ là số 0 tròn trĩnh.

Sau khoảng 10 lần không được hồi đáp, tôi bắt đầu cảm thấy mọi thứ gần như sụp đổ. Thậm chí, khi ngồi lướt tin tuyển dụng ở Starbucks, đã có những thời điểm tôi không thể kìm nén nổi và phải tự khóa mình trong phòng tắm khóc một mình.

Thế nhưng những trải nghiệm tồi tệ đó đã dạy cho tôi một bài học: Trên đời này không có gì là quá giới hạn. Tôi đã cho phép bản thân được thử nghiệm mọi kỹ thuật trong (và cả ngoài) các cuốn cẩm nang dạy viết thư giới thiệu, từ chèn thêm ảnh GIF Beyoncé cho tới giả vờ như mình và người quản lý là bạn bè thân thiết. Cuối cùng thì, sau 103 bức thư được gửi đi, tôi đã tìm ra công thức để thành công.

Chỉ trong vòng 1 giờ, tôi đã nhận được email hẹn phỏng vấn – hết cái này tới cái khác. Tỉ lệ thành công của tôi nhanh chóng tăng vọt từ 0 lên tới 55%, với những buổi phỏng vấn được lên lịch với Vogue, InStyle hay Rolling Stone. Nói cách khác, bức thư giới thiệu áp dụng một phương pháp viết đã có từ rất lâu rồi mà tôi sắp chia sẻ thực sự là đã thay đổi cuộc đời tôi theo hướng tích cực nhất.

Ngày hôm nay, tôi sẽ hé lộ công thức bí mật gồm 3 bước này cho các bạn.

1. Xác định vấn đề

55% nhà tuyển dụng không đọc thư ứng tuyển của ứng viên. Tại sao họ phải đọc khi ai cũng viết như Oliver Twists thời hiện đại, cầu xin họ “Làm ơn, hãy cho tôi một công việc”?

Sự thực là, nhà tuyển dụng không ở đó để biến giấc mơ của bạn thành hiện thực. Họ làm việc vì chính mình. Nghe thì có vẻ khắc nghiệt, nhưng đó là thực tế: họ muốn tìm kiếm những ứng viên tài năng giúp bộ phận (hoặc công ty) của mình phát triển hiệu quả và thành công hơn. Họ muốn tìm người giải quyết được các vấn đề thách thức của họ.

Chẳng hạn, khi được một người bạn giới thiệu cho một công việc tại tạp chí thời trang tôi đã là một fan ruột kể từ thời còn đi học, thay vì tỏ ra quá hào hứng, tôi đã bắt đầu thư xin việc của mình bằng câu:

“Là một cựu nhân viên Details.com và Vs. Magazine, tôi đã chứng kiến và hiểu rõ sự điên rồ và khối lượng công việc khủng khiếp trong các tháng thời trang.”

Chỉ với một câu ngắn thế này thôi, tôi đã gửi tới nhà tuyển dụng hai thông điệp: Tôi hiểu vấn đề anh/chị đang giải quyết và tôi đã từng trải qua vấn đề tương tự. Bí quyết ở đây là gì? Tìm ra và tập trung vào đúng vấn đề – thứ gần như không bao giờ xuất hiện trong bản mô tả công việc.

Khi bạn viết thư ứng tuyển của mình, hãy bắt đầu với danh sách các đầu việc nhà tuyển dụng yêu cầu và tự hỏi bản thân “Tại sao nhiệm vụ này lại quan trọng với công ty mình đang ứng tuyển?”. Hãy đào sâu hết mức có thể, thường thì nhu cầu thực sự của họ sẽ chỉ xuất hiện sau hàng loạt các câu hỏi tại sao.

2. Nhấn mạnh vấn đề

Sau khi đã xác định được vấn đề, phần tiếp theo mới hết sức thú vị.

Bởi lẽ không một nhà tuyển dụng nào nói rằng: “Tôi thích trả cho nhân viên hàng ngàn đô-la mỗi năm”, việc bạn cần làm là nhấn mạnh sự nhức nhối của vấn đề họ đang gặp phải, đồng thời chỉ ra giá trị mà giải pháp bạn có thể cung cấp mang lại. Đừng ngại nói quá lên một chút, giống như tôi đã làm trong đoạn thứ 2 thư ứng tuyển của mình:

“Nếu anh/chị đang tìm kiếm một người không chỉ có khả năng theo kịp tiến độ, mà còn có thể làm những bài slideshow dài 75 trang, chuẩn SEO và có phong cách như bài trên website 5 phút trước…”

Lưu ý rằng tôi không nói những thứ chung chung như “Nếu anh chị đang tìm một ai đó có thể xoay chuyển tình thế của các dự án một cách nhanh chóng…”. Tôi đưa nhưng ví dụ cụ thể nhằm thể hiện năng lực bản thân phù hợp cho vị trí biên tập viên mình đang ứng tuyển.
Còn nếu ngành hoặc vị trí bạn muốn ứng tuyển hoàn toàn mới lạ? Hãy hỏi. Tìm một ai đó trong công ty bạn đang muốn gia nhập, hỏi và chú ý lắng nghe cách họ đề cập tới các thách thức công ty đang gặp phải.

Trong giao tiếp, con người thường vô thức tin tưởng những người bắt chước ngôn ngữ cơ thể của bản thân. Chính vì vậy, hãy tranh thủ “bắt” những ẩn ý hay cụm từ cụ thể xuất hiện trong các cuộc trao đổi với nhân viên công ty và “bắt chước” ngôn ngữ nói của họ trong thư ứng tuyển của mình.

3. Đề xuất giải pháp

Tới thời điểm này, bạn đã bắt đầu khiến nhà tuyển dụng “đứng ngồi không yên” và muốn tìm hiểu thêm. Giờ là lúc đưa ra giải pháp. Và giải pháp đó chính là bạn.

Hãy nghĩ về thứ khiến bạn cực kỳ phù hợp để giải quyết vấn đề mới đặt ra. Trong trường hợp của tôi, tôi muốn nhà tuyển dụng nghĩ về mình và nói: “Lisa? Ồ, cô ấy giỏi về lập trình hệ thống và rất có năng lực.”

Và đây là cách tôi viết trong thư ứng tuyển để biến điều đó thành sự thực:

“Vì tôi rất thông thạo TeamSite (một nền tảng quản lý nội dung), tôi có thể làm quen và thành thục công việc mới rất nhanh chóng – từ sản xuất hàng tá bài viết blogs trong ngày cho tới liên tục làm mới trang chủ với những thông tin mới nhất về thời trang, tôi đã từng làm tất cả những việc như vậy. Quan trọng là, anh/chị sẽ không bao giờ thấy tôi kêu ca “Đây không phải việc của tôi!”

4. Chốt lại đầy tự tin

Sau khi hoàn thiện tất cả các bước trên, đừng kết thúc bằng những câu như “Hy vọng sớm nhận được phản hồi từ anh/chị”. Thay vào đó, hãy chốt lại bằng một câu văn thể hiện sự tự tin, năng lực và hứng thú với công ty bạn đang ứng tuyển:

“Tôi rất mong sẽ được biết thêm nhu cầu sản xuất tin tức của anh/chị và cách tôi có thể giúp đỡ mọi người!”

Boom. Bạn đã hoàn thành một bức thư ứng tuyển ấn tượng rồi đấy.

Dĩ nhiên, sẽ cần một chút dũng cảm để “dám” gửi đi những bức thư ứng tuyển thế này – trong lần đầu tiên, tôi đã sợ tới mức phải nhờ bạn trai ấn nút Gửi hộ mình.

Tuy nhiên, hãy nhìn mọi thứ theo cách này: Tất cả những người khác sẽ tìm mọi cách nhồi nhét đủ lời thề thốt thể hiện sự quyết tâm, đam mê, chăm chỉ của họ. Còn bạn thì sao? Bạn đã chứng tỏ bản thân từ chính thư ứng tuyển của mình, một cách hoàn toàn khác biệt.

Tạo CV Online miễn phí

Nguồn: Applancer Careers via Her Spiderum theo Trí Thức Trẻ/BI

Phân biệt Thực tế ảo (VR) vs Thực tế tăng cường (AR)

Một trong những sự nhầm lẫn lớn nhất trong thế giới thực tế tăng cường (AR) là sự khác biệt giữa Thực tế tăng cường và Thực tế ảo. Cả 2 đều nhận được rất nhiều sự chú ý từ truyền thông và hứa hẹn sẽ có sự tăng trưởng đáng kinh ngạc. Vậy sự khác biệt giữa thực tế ảo và thực tế tăng cường là gì?

Thực tế ảo là gì?

Thực tế ảo (VR) là một mô phỏng máy tính nhân tạo hoặc tái tạo một môi trường sống thật hay tình huống. Nó làm người sử dụng đắm chìm vào cảnh vật xung quanh bằng cách làm cho họ cảm thấy như họ đang trải qua những thực tế mô phỏng trực tiếp, chủ yếu bằng cách kích thích thị giác và thính giác của họ.

VR được sử dụng bằng cách đội 1 headset giống như Oculus của Facebook và sử dụng theo 2 cách nổi bật sau:

  • Tạo ra và tăng cường thực tế ảo để chơi game, giải trí và chơi ( Như video và computer game, phim 3D và màn hình hiển thị gắn trên đầu( Head mounted display))
  • Tăng cường đào tạo cho các tình huống thực tế bằng cách tạo ra các tình huống giả lập thực tế nơi con người có thể luyện tập trước ( Như việc giả lập các chuyến bay cho phi công)

VR được tạo ra thông qua ngôn ngữ lập trình VRML (Virtual Reality Modeling Language). Ngôn ngữ này có thể tạo ra hàng loạt hình ảnh và chỉ định các dạng tương tác khả dụng cho các hình ảnh đó

Thực tế tăng cường là gì?

Tăng cường thực tế (AR) là một công nghệ cải tiến các lớp máy tính tạo ra trên đỉnh một thực tế đang tồn tại để làm cho nó có ý nghĩa hơn thông qua khả năng tương tác với nó. AR được phát triển thành ứng dụng và sử dụng trên thiết bị di động để pha trộn các thành phần kỹ thuật số vào thế giới thực theo cách tăng cường lẫn nhau, nhưng cũng có thể tách ra một cách dễ dàng.

Công nghệ AR đang nhanh chóng trở thành xu hiện chính hiện này. Nó được sử dụng để hiển thị lớp phủ số điểm trên các trò chơi thể thao được truyền hình và bật ra email 3D, hình ảnh hoặc tin nhắn văn bản trên thiết bị di động. Các leaders trong ngành công nghiệp công nghệ cũng đang sử dụng AR để làm những điều tuyệt vời và mang tính cách mạng với hình ảnh ba chiều và các lệnh chuyển động kích hoạt.

Thực tế ảo và thực tế tăng cường

Thực tế tăng cường và thực tế ảo có phản xạ nghịch đảo của một trong 1 nhóm khác nhau với những gì mỗi công nghệ đang tìm kiếm để thực hiện và cung cấp cho người dùng. Thực tế ảo cung cấp một sự tái tạo kĩ thuật số của cuộc sống thực tế, trong khi thực tế tăng cường cung cấp các yếu tố ảo như một lớp phủ với thế giới thực.

AR và VR giống nhau như thế nào?

Công nghệ

AR và VR đều thúc đẩy các dạng công nghệ tương tự và chúng tồn tại để nâng cao và làm đa dạng trải nghiệm người dùng.

Giải trí

Cả 2 công nghệ này đều cho phép những trải nghiệm giải trí sẽ trở nên phổ biến và được ưa chuộng hơn. Trong khi đó trong quá khứ nhiều người cho rằng đó chỉ là một điều bịa đặt của khoa học viễn tưởng, thế giới nhân tạo mới đi vào cuộc sống dưới sự kiểm soát của người dùng, và các lớp sâu hơn của sự tương tác với thế giới thực cũng có thể đạt được. Các “ông trùm” công nghệ hàng đầu đang đầu tư và phát triển thích nghi mới, cải tiến và phát hành ngày càng có nhiều sản phẩm và các ứng dụng có hỗ trợ các công nghệ này cho người sử dụng ngày càng hiểu biết.

Khoa học và Y Dược

Thêm vào đó, cả AR và VR đều có tiềm năng lớn lao trong việc thay đổi cảnh quan của lĩnh vực Y Dược  bằng cách biến những thứ như phẫu thuật từ xa trở thành sự thực. Các công nghệ này thực tế đã được sử dụng để điều trị và chữa lành các điều kiện tâm lý như Rối loạn stress sau chấn thương (PTSD)

AR và VR khác nhau như thế nào?

Mục Đích

AR tăng cường trải nghiệm bằng cách thêm vào các yếu tố ảo như là hình ảnh kĩ thuật số, đồ họa, hoặc là các cảnh vật như là một layer mới trong việc tương tác với thế giới thực. Ngược lại, thế giới thực của VR hoàn toàn được tạo ra và điều khiển bởi máy tính.

Phương thức vận chuyển

VR thường được vận chuyển tới người sử dụng thông qua thiết bị điều khiển gắn vào đầu hoặc cầm tay. Thiết bị này cho phép kết nối con người với thực tế ảo và cho phép họ kiểm soát và định vị hành động của mình trong môi trường mô phỏng thế giới thực

AR ngày càng được sử dụng nhiều trong các thiết bị di động như latop, smartphone và tablet để thay đổi cách Thế giới thực và các hình ảnh kĩ thuật số, đồ họa giao nhau và tương tác lẫn nhau

Vậy làm thế nào để chúng làm việc cùng nhau?

Không phải lúc nào cũng là AR vs VR – không phải lúc nào chúng cũng hoạt động tách biệt với nhau mà thực chất thường kết hợp với nhau nhằm tạo ra trải nghiệm thậm chí còn tốt hơn cho người dùng. Ví dụ, haptic feedback là các chấn động và cảm giác được thêm vào sự tương tác với đồ họa lại được coi là một sự tăng cường. Tuy nhiên, nó thường được sử dụng cùng với thực tế ảo để tăng trải nghiệm người dùng thông qua các cảm nhận.

AR và VR đều là những ví dụ tuyệt vời của các trải nghiệm và tương tác người dùng nhằm tạo ra một vùng đất mô phỏng để giải trí và vui chơi hoặc để thêm một chiều hướng mới trong sự tương tác giữa thiết bị kĩ thuật số và thế giới thực. Cho dù là một mình hay kết hợp với nhau, chúng đều không ngần ngại mở ra thế giới thực và ảo như nhau.

Nguồn: augment.com

9 cách thể hiện cảm xúc khôn ngoan trong công việc

9 cách thể hiện cảm xúc khôn ngoan trong công việc
Success in business-group of excited people

Một trong những thách thức lớn mà bất cứ ai cũng phải đối mặt ở mọi nơi là học cách xử sự­ với đồng nghiệp ở nơi làm việc và tìm ra cách giải quyết tốt nhất có lợi cho tất cả những người liên quan.

Thông qua chỉ số IQ của một người chỉ thể hiện được kiến ​​thức và kỹ năng người đó có được trải qua giáo dục và kinh nghiệm, nhưng có thể sẽ đánh giá thiếu sót trong lĩnh vực khác, đó chính là EQ hay chỉ số thông minh cảm xúc.

Chỉ những ai có thể cân bằng chỉ số IQ và EQ ở nơi làm việc mới thực sự trở thành những người thành công như họ muốn. Sau đây là những bước để cải thiện chỉ số EQ của bạn để có thể bằng hoặc vượt chỉ số IQ.

1. Hiểu rõ nguồn cơn, đừng động vào chúng

Để nâng cao EQ, trước tiên phải hiểu về bản thân mình. Những điều gì thường làm bạn nóng giận hoặc là nguyên nhân gây ra những hành động phi lý của bạn hoặc làm bạn quá xúc động?

Nguyên nhân gì gây ra những cảm xúc, làm bạn thất vọng, giận dữ, khó chịu hoặc vô số cảm xúc khác? Một khi bạn biết nguyên nhân gây ra những điều đó, hãy nắm bắt chúng trước khi chúng xảy ra hoặc bắt đầu vượt ra khỏi tầm kiểm soát.

2. Biết cách kiểm soát

Con người ai cũng có cảm xúc. Có người bộc lộ cảm xúc ra ngoài, có những người không bao giờ biểu lộ cảm xúc. Những người có chỉ số EQ cao hiểu rõ cảm xúc của mình, nhận biết được cảm xúc và kiểm soát được khi nào và ở đâu nên bộc lộ ra ngoài. Họ giữ được bình tĩnh trong môi trường và những tình huống căng thẳng. Họ suy nghĩ có lý trí và làm việc có hiệu quả khi không để cảm xúc lấn át trong quyết định và phán quyết của mình.

3. Biết cách trở thành người giải quyết vấn đề

Nếu bạn muốn tăng chỉ số EQ, bạn phải học cách để giải quyết vấn đề một cách hiệu quả. Điều này có nghĩa là không vội vàng dùng cảm xúc để đưa ra quyết định mà nên suy nghĩ mang tính xây dựng thông qua các công cụ đưa ra quyết định như Delphi, Stepladder và 6 Lối Suy nghĩ để cân nhắc suy nghĩ và lựa chọn nhằm đưa ra những quyết định tốt hơn.

4. Biết cách dẫn dắt ý nghĩ

Để đi ngược lại suy nghĩ và những gì đang diễn ra trong đầu, một người có chỉ số EQ cao sẽ thường sắp xếp lại những suy nghĩ của mình để nhìn sự việc theo cách khác đi. Những tình huống căng thẳng sẽ không thể làm vô hiệu hóa họ mà sẽ trở thành thử thách đối với họ và họ sẽ phản hồi một cách khôn ngoan.

Một người có chỉ số EQ cao sẽ không rập khuôn hoặc lập tức nghe theo lời khuyên hay đề nghị của người khác. Họ sẽ cởi mở với những lời gợi ý và sẵn sàng nghe người khác chia sẻ ý kiến.

5. Biết khi nào nên bỏ đi

Nếu bạn muốn tăng chỉ số EQ, bạn phải học cách khi nào nên bỏ đi. Nếu bạn đang trong cuộc tranh cãi hay thảo luận và bầu không khí đang trở nên hết sức căng thẳng khi mọi người đều đang khăng khăng bảo vệ quan điểm của mình, bạn nên học cách bỏ đi. Một người trưởng thành khôn ngoan sẽ biết đưa ra lý do để xin một vài phút hoặc vài ngày xem xét lại vấn đề.

6. Biết cách tôn trọng tất cả mọi người

Khi tiếp xúc với người khác, bạn sẽ muốn đối xử tôn trọng với tất cả mọi người bất kể bạn cảm thấy họ là người ra sao. Đừng bao giờ để cảm xúc của bạn đối với một người hoặc nhóm người nào đó làm ảnh hưởng đến sự tôn trọng của bạn đối với họ. Hãy đối xử tôn trọng với họ như nhau trong mọi tình huống.

7. Biết và bày tỏ sự cảm thông, chia sẻ

Một kỹ năng của EQ cần phát triển đó là học cách bày tỏ sự cảm thông với người khác trong giao tiếp hằng ngày. Đây là khả năng đặt bạn vào địa vị của người khác. Bạn cần sẵn sàng đứng ở vị trí của người khác để nhìn nhận sự việc. Đây chính là bước cơ bản đầu tiên khi ứng xử với mọi người.

8. Biết cách xử trí những lời phê phán

Những lời phê phán không phải lúc nào cũng dễ nghe, nhưng nếu bạn muốn nâng cao chỉ số EQ, bạn cần học cách chấp nhận nó một cách thoải mái. Sau đó, nếu bạn thấy những lời phê bình đó là đúng, hãy áp dụng lời khuyên đó để tiến bộ hơn.

9. Hiểu rõ bản thân trong bất kì tình huống nào

Nếu bạn muốn tăng chỉ số EQ, bạn cần luôn thoải mái trong mọi tình huống trong xã hội. Bạn nên gây dựng sự tự tin khi nói chuyện với mọi người, ở bất kỳ đâu. Khi chỉ số cảm xúc càng tăng cao, bạn sẽ càng được đánh giá là một người giao tiếp giỏi, người có thể xử lý tốt những tranh chấp và xây dựng các mối quan hệ một cách chủ động.

Một người có năng lực, người có chỉ số IQ và EQ cao sẽ trở thành một người dẫn dắt những người khác và chính họ đến thành công lớn. Hãy dùng những ý kiến này để trở thành một người khôn ngoan trong công việc và gia nhập đội ngũ những người có chỉ số EQ cao.

Nguồn: Applancer Careers

8 tools cần có để tăng workflow khi lập trình web

8 tools cần có để tăng workflow khi lập trình web

Xuất thân từ developer, trước khi chúng ta deploy app hay ngay cả trước khi chọn bên cung cấp dịch vụ điện tử đám mây, ta nên cân nhắc những tools sẽ dùng cho khối lượng công việc hàng ngày. Những tools được liệt kê trong bài viết này sẽ giúp bạn tăng hiệu năng làm việc lên nhiều lần nhưng nếu không dùng đúng cách thì nó sẽ bị phản tác dụng, khiến cho project trở nên rắc rối và phức tạp gấp nhiều lần.

Một trong những phần quan trọng nhất để chúng ta có thể phát triển từ vị trí junior developer lên senior developer đòi hỏi ta phải biết sử dụng nhiều tools khác nhau để đơn giản hóa quá trình quản lí các task, giao tiếp với các team một cách dễ dàng cũng như kết hợp các tool lại với nhau để có được một stack hoàn hảo dành cho bạn và team của mình.

Là một technical startup co-founder, tôi có nhiệm vụ tạo ra một hệ thống làm việc phù hợp với mọi qui mô và dễ làm quen đối với người mới.

Trong bài viết này, tôi sẽ giới thiệu các tool mà các junior web developers thường dùng hàng ngày để quản lí, phân tích và bảo trì sản phẩm của họ. Bạn có thể đã biết qua một số chúng, thế nên tôi sẽ không đơn thuần nói sơ qua mà còn hướng dẫn bạn cách tốt nhất để dùng những tool này thật hiệu quả.

Slack

Mục đích sử dụng

Slack là một platform để giao tiếp giữa các team. Mặc dù ban đầu nó được tạo ra nhầm thay thế cho email mà theo tôi là vẫn chưa làm được, Slack vẫn có nhiều lợi ích khác. Cho dù bạn làm việc một mình đi nữa thì Slack vẫn là một tool rất tuyệt vời.

Slack đưa ra một cách giao tiếp trong nội bộ mới với các thành viên trong nhóm, cập nhật milestones, goals cũng như các vấn đề nổi bật. Nó còn giúp lên thời khóa biểu họp mặt, thậm chí cả việc đặt món ăn cũng được.

Thay vì chỉ có một chat room cho toàn team, Slack chia chúng thành nhiều channel khác nhau. Mỗi channel là một room chat riêng biệt cho từng lĩnh vực của công ty như development, sales, PPC campaigns, UI / UX và nhiều thứ khác.

Slack còn rất đa dạng về tính năng giúp bạn có cuộc nói chuyện tuyệt với những thành viên khác trong nhóm: emojis, chia sẻ hình ảnh, YouTube videos embedding và cả integrations.

Integrations cho bạn khả năng sử dụng 3rd party tools vào Slack. Bạn có thể lấy chúng từ marketplace của Slack hoặc tự mình tạo ra từ Slack API. Tích hợp Slack cho phép bạn lên kế hoạch meeting chỉ với một lần gửi mail, thông báo khi có người đang nhập vào room chat, đặt món ăn hay chỉ đơn giản là để giải trí.

Hệ thống search của Slack cực kì mạnh mẽ. Mọi message đều được indexed thế nên nó cực kì dễ phục hồi message bất kì trong mọi channel.

Ai nên dùng

Slack được tạo ra cho cả team. Nhưng, với tư cách là một developer thường làm các project nhỏ lẻ một mình, tôi khuyến khích bạn tự mở cho mình một Slack group và cứ tìm hiểu các tính năng của Slack. Bạn có thể tăng hiệu năng làm việc của mình bằng cách lên kế hoạch gửi message cho mình để nhắc nhở về meeting và thời khóa biểu làm việc.

Best practices

  • Tìm hiểu về những integration tốt nhất trên marketplace của Slack để tích hợp chúng vào Slack group của bạn
  • Phát triển integrations của riêng mình bằng các thư viện open source sử dụng Slack API.
  • Học các keyboard shortcuts của Slack
  • Luôn kiểm tra BitBucket integration cho Slack
  • Đọc qua All-in-one messenger tool trong phần dưới của bài viết để có thể dùng Slack tốt hơn trên desktop của bạn

Pricing model

Slack’s pricing model cho phép người dùng sử dụng miễn phí phiên bản Slack dành cho team nhỏ với tính năng search và hiển thị 10K messages gần đây nhất. Với Standard và Plus plans, bạn trả theo phí của từng thành viên tham gia và sẽ được cung cấp nhiều tính năng hơn.

Tip dành cho các người dùng lâu năm

Slack không chỉ dùng cho nội bộ của team mà còn có thể cho cộng đồng công cộng. Có hàng ngàn cộng đồng Slack cho bạn tham gia (phần đều miễn phí) để bàn luận và chia sẻ về sản phẩm, design, quá trình phát triển và nhiều nữa. Bạn có thể vào Slack List để tìm hiểu thêm.

Trello

 

Mục đích sử dụng

Trello là công cụ quản lý task vô cùng đơn giản nhưng khá mạnh mẽ. Trello có thể được dùng trong việc quản lý development workflow và tasks, cũng như các dự án marketing , blogs, online businesses.

User interface của Trello rất là tối giản hóa nhưng đầy đủ mọi thứ bạn cần để quản lí một project cho team từ 10 người trở xuống, bao gồm task labeling, attachments, task assignments và task scheduling.

Ai nên dùng

Là một developer với các side project của riêng mình, Trello có thể là câu trả lời hoàn hảo cho việc quản lí tasks và khối lượng công việc của bạn. Với một team 10 thành viên, Trello sẽ cung cấp mọi thứ bạn cần để quản lí project của mình thật hoàn hảo.

Best practices

  • Dùng các bảng khác nhau cho từng project của team. Bạn có thể những bảng dành riêng cho marketing, back-end development, front-end development etc.
  • Mỗi bảng nên có màu khác nhau để cho dễ nhận diện
  • Luôn để mở menu bên trái
  • Chỉ định các tasks cho từng thành viên trong nhóm hoặc xem tasks của riêng bạn bằng cách kéo bỏ hình profile vào menu bên phải cho một task cụ thể.
  • Khi bắt đầu một project, định nghĩa labels bằng cách mở một task và nhấp vào labels. Bạn có thể chỉ định label với các title khác nhau.
  • Sử dụng các cột khác nhau trong bảng để listing tasks hoặc component trong hệ thống của bạn, như listing To do, doing done tasks.

Pricing model

Toàn bộ những tính năng chính của Trello đều được tích hợp trong phiên bản miễn phí. Với integrations, nếu bạn muốn có bảo mật tốt cũng như support thì hãy thử Business and Enterprise plans, nó khá tuyệt vời khi bạn muốn mở rộng qui mô của project lên với nhiều task khác nhau.

Tip dành cho các người dùng lâu năm

Bạn có thể vào xem tại đây.

Redash


Mục đích sử dụng

Redash là một open-source tool tuyệt vời cho visualizing data trong một dashboard tinh tế. Nó cung cấp cho bạn tất cả mọi thứ cần thiết để team có thể query data, visualize và share nó.

Redash cũng tích hợp với tất cả các data sources nổi tiếng nhất như MySQL, PostgreSQL, MongoDB, ElasticSearch và nhiều hơn thế nữa.

Với Redash bạn có thể hiển thị hình ảnh minh họa data nhằm track milestones và giúp bạn cũng như team hiểu rõ hơn về những gì đang diễn ra trong project.

Redash còn có tính năng báo cho bạn biết về những thay đổi diễn ra cũng như ảnh hưởng của nó lên project.

Ai nên dùng

Khi bạn đã hoàn thành sản phẩm và tung ra thị trường, bạn bắt đầu phải thu thập dữ liệu cho database thì đó là lúc nên dùng tới Redash. Nó giúp bạn theo dõi các vấn đề có khả năng xảy ra, theo dõi tiến độ hoàn thành milestones cũng như thu thập insight từ data người dùng.

Best practices

Tích hợp daily metrics của Redash vào Slack giúp nó tự mở và hoạt động hằng ngày mà không phải mất thời gian mở từng phần mềm.

Pricing model

Redash hoàn toàn miễn phí.

Tip dành cho các người dùng lâu năm

Nếu bạn thấy có gì đó bị thiếu, hãy thử áp dụng và cải thiện nó cũng như đóng góp công sức của mình vào trong Github repository..

Zapier

 

Mục đích sử dụng

Đã biết bao nhiêu lần bạn tự nói với bản thân rằng: nếu ta có thể push data từ Facebook ads  vào một Google spreadsheet thì hay biết mấy!

Zapier là một tool để cho trường hợp trên. Nó chỉ cho chúng ta, các developers, rằng ta không cần phải chạy và dùng hết mọi integration thì mới có được kết quả như ý. Không chỉ thế, system càng ít code thì quá trình phát triển càng được rút ngắn, và như thế là tốt nhất.

Zapier tự động di chuyển thông tin giữa các web apps bằng việc tích hợp hơn 750 apps khác nhau. Nó cho phép bạn tạo ra những qui trình hoàn toàn tự động hóa và khối lượng công việc phức tạp chỉ với vài lần bấm nút.

Với Zapier, bạn có thể push mọi issue từ BitBucket lên Slack  chỉ với 2 phút setup hoặc tạo Trello cards từ các câu trả lời trong Google Form.

Ai nên dùng

Đã là developer thì việc phải xử lí APIs đã là chuyện như cơm bữa. Tôi khuyến khích bạn thử kiểm tra xem Zapier có những gì trước khi bạn dùng tới nó. Như vậy sẽ tiết kiệm được rất nhiều thời gian đấy.

Nếu bạn đang sở hữu một công ty của riêng mình, hãy dùng Zapier càng sớm càng tốt nhằm tránh gặp phải việc phát triển project dư thừa, bugs, cũng như dễ bảo trì hơn. 

Best practices

  • Đăng kí với Zapier
  • Vào xem tại đây để hiểu rõ hơn cách sử dụng Zapier

Pricing model

Zapier có phiên bản miễn phí nhưng sẽ bị giới hạn với chỉ 2-step zaps  và integrations. Tuy vậy cũng đủ để cho bạn tiềm hiểu và thử nghiệm rồi. Khi nào bạn cảm thấy chắc chắn cũng như tận dụng được giá trị của Zapier thì hãy chuyển qua hình thức trả phí.

Tip dành cho các người dùng lâu năm

Hãy thử dùng nó với Google Sheets  càng nhiều càng tốt. Nó sẽ giúp mọi thứ dễ dàng hơn rất nhiều.

Draw.io

Mục đích sử dụng

Draw.io là một tool khá tuyệt vời cho prototype, mock-ups và architecture design. Nó có thể được dùng trong nhiều trường hợp khác nhau nhờ vào bộ sưu tập template đồ sộ trong khi mục tiêu chính sử dụng Draw.io là để dành cho designing processes, systems, và views trước khi áp dụng chúng vào code.

Draw.io là một add-on cho Google Drive, thế nên nó phơi bài tất cả sharing và collaboration capabilities mà Google Drive có. Nhờ đó mà bạn có thể hợp tác một cách dễ dàng với các thành viên trong team để thiết kế ra servers architecture chẳng hạn.

Draw.io cung cấp nhiều components khác nhau cho việc chèn dễ dàng vào sketch. Bạn có thể đi từ flow charts cho tới Android, Bootstrap hay iOS screens.

Ai nên dùng

Draw.io là một trong những công cụ sketch tốt nhất mà tôi từng biết, và nó hoàn toàn miễn phí. Tôi khuyến khích bạn thử và dùng nó cho project tiếp theo trong giai đoạn design.

Pricing model

Draw.io hoàn toàn miễn phí

All-in-one messenger

Mục đích sử dụng

Phần lớn chúng ta đều có nhiều hơn một channel cho việc giao tiếp với đồng nghiệp, bạn bè và gia đình. Thường thì, mỗi channel giao tiếp, như WhatsApp, Slack hay Facebook Messenger, đều có web application riêng của nó do đó mà sẽ rất rối rắm cho người dùng.

All-in-one Messenger là một Chrome application tuyệt vời dành cho việc tập trung tất cả các channel giao tiếp vào một chỗ. Nó cho phép bạn mở những tab mới cho từng channel, các channel này đều hoạt động tốt và không bị thay đổi nên sẽ rất tiện dụng cho bạn.

Ai nên dùng

Từ các developer cho đến công ty, All-in-one messenger là một ứng dụng dành cho những người dùng sử dụng nhiều kênh giao tiếp khác nhau hằng ngày.

Best practices

Mặc dù nó không chỉ rõ, nhưng bạn có thể thêm tab vào trong cùng một channel giao tiếp. Ví dụ như nếu bạn là một thành viên của nhiều nhóm Slack khác nhau, bạn có thể chỉ định chúng với từng tab khác nhau và đặt tên theo ý thích.

Pricing model

All-in-one messenger hoàn toàn miễn phí.

Tip dành cho các người dùng lâu năm

Nếu bạn muốn có hiệu quả trong làm việc và không bị mất tập trung thì hãy cancel notifications trong mục setting tab.

BitBucket

Mục đích sử dụng

BitBucket là hệ thống quản lý distributed version nhằm giúp bạn dễ làm việc với nhóm hơn. BitBucket thuộc quyền sở hữu của Atlassian, công ty nắm trong tay Jira, HipChat, và Trello.

BitBucket, khác với Github, cho phép dùng repositories bản quyền nhưng miễn miễn phí cho tới 5 users. BitBucket user-interface cũng rất dễ nhìn và sử dụng. Không những thế integrations mà BitBucket cung cấp cũng rất hữu ích.

Ai nên dùng

Dành cho team các developer, với khả năng quản lí và đồng hóa các phiên bản khác nhau.  Tôi khuyên bạn nên dùng BitBucke để bảo đảm tính tương thích của các phiên bản code, deploy app suôn sẻ, cũng như tích hợp các tool của 3rd party để kiểm tra và nhiều nữa.

Best practices

BitBucket & Slack integration để push notifications từ BitBucket trực tiếp vào channel thuộc Slack group của bạn.

Pricing model

BitBucket cung cấp không giới hạn code repositories bản quyền cho 5 collaborators. Khi bạn muốn mở rộng qui mô của team cũng như project thì sẽ phải đăng kí trả phí.

Postman

Mục đích sử dụng

Các web developers luôn phải tạo API để bày ra backend code đến clients khác nhau như front end apps, mobile apps, và tổ chức bên thứ 3. Tuy vậy khi tạo ra và dùng APIs, nó khá là khó để theo dõi.

Postman là một Chrome application cho phép bạn dễ dàng gửi HTTP requests đến local hoặc global server tùy theo yêu cầu của bạn.

Postman, không như các tool khác, có GUI rất tuyệt vời để define HTTP request và phân tích response.

Ai nên dùng

Từ developer chuyên phát triển và test API của chính họ cho đến các công ty yêu cầu có hoạt động nhóm/team.

Best practices

Hãy luôn mở Postman  khi lập trình web applications, bạn sẽ thấy nó rất là hữu ích đấy.

Pricing model

Nếu bạn chỉ dùng cho bản thân thì Postman phiên bản miễn phí cũng cấp đầy đủ mọi thứ bạn cần nhưng nếu là cho team thì bạn sẽ cần căn nhắc đến việc trả phí.

Nguồn:Hackernoon

Làm sao tăng lương cho ngọt?

mẹo tăng lương

Mẹo tăng lương sao cho ngọt – Một bạn trẻ nhắn tin hỏi, chú ơi làm sao đề nghị tăng lương cho nó “ngọt”!

Đi làm ai lại không muốn được tăng lương, nhưng mở miệng đề nghị với sếp dễ thấy kỳ kỳ khó nói. Chắc rồi, nhất là đối với văn hoá Á Đông chung chung hay văn hoá Việt Nam nói riêng.

Nhưng khó nói cũng phải nói nếu nó làm mình bức bối quá. Vậy thì nói như thế nào cho nó ngọt đây? Dưới đây là những cách xin tăng lương khéo léo dành cho các bạn.

Không biết các chuyên gia về nhân sự nói sao chứ tôi thấy điểm mấu chốt của vấn đề nằm ở chỗ mình có thật sự xứng đáng được tăng lương hay không.

Nghĩa là những cống hiến của mình cho công ty là quá lớn so với đồng lương và vị trí công việc mà mình đảm nhiệm. Mình mà nghỉ việc thì khó mà tìm ra người thay thế. Tóm lại, công ty đang rất cần mình chứ không phải ai khác, chứ không phải chỉ cần có vị trí của mình.

Lúc đó thì nói như thế nào cũng không quá sai, chỉ có “ngọt” hay không ngọt thôi, vì vàng thật thì đâu bao giờ sợ lửa!

Ngược lại, nếu mình không ở trong vị trí “cửa trên” mà công ty đang cần nhiều đến như vậy thì có nói khéo như thế nào đi nữa cũng thấy sai sai. Đã vậy lời đề nghị mà còn được đưa ra sai thời điểm, ví dụ như ngay lúc công ty đang gặp khó khăn thì thôi khỏi nói, trở thành “lời đề nghị khiếm nhã” đúng nghĩa! Không ai duyệt cả, có khi còn mang hoạ vào thân!

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

mẹo tăng lương

Ngay cả trợ lý cận kề những 12 năm cho tỷ phú Elon Musk (chủ hãng xe hơi điện Tesla nổi tiếng thế giới) mà còn bị việt vị khi xin tăng lương. Không phải ông tỷ phú này hà tiện đâu, mà câu chuyện tăng hay không tăng lương có dính liền với sự công nhận mức độ cống hiến của nhân viên thuộc cấp, dính liền với sự công bằng, với mức lương của những người xung quanh nữa. Có khi chỉ làm một người vui thôi mà toàn thể cơ quan còn lại bị buồn và bất mãn, nên cái chi phí bỏ ra trong trường hợp này là quá lớn.

  Sếp nhớ trả lương em gấp 10 nha (phần 1)
  Sếp nhớ trả lương em gấp 10 nha (phần 2) - HĐH Ubuntu

Bởi vậy mà ngay cả ngài tỷ phú Elon Musk cũng phải đắn đo suy nghĩ. Rồi ông quyết định làm một bài test để thử xem vai trò của người trợ lý của mình quan trọng đến như thế nào. Ông cho người này nghỉ xả hơi 2 tuần, và trong thời gian đó không kêu ai thay thế mà tự mình cáng đáng hết công việc để xem sao.

Kết quả sau 2 tuần: ”không có mợ thì chợ vẫn đông”! No problem. Nghĩa là vai trò của nhân viên trợ lý này cũng không có gì là kinh khủng, vì vậy Elon Musk đã quyết định từ chối lời đề nghị tăng lương này. Hơi khô khan, nhưng đúng theo kiểu Mỹ, rất chuyên nghiệp. Dĩ nhiên người trợ lý đã không còn cơ hội để quay lại cái văn phòng mà mình đã gắn bó 12 năm.

Cho nên, không có gì nguy hiểm bằng lời đề nghị tăng lương. Phải bức bách lắm, phải thấy hợp lý hợp tình lắm mới dám mở miệng. Còn nói như thế nào cho nó “ngọt” thì có nhiều cách nói lắm.

Chuyên gia về nhân sự Lynn Taylor, cũng là tác giả của quyển sách “Tame your terrible office tyrant: How to manage childish boss behabior and thrive in your job” từng cho lời khuyên đại loại là, lựa thời điểm thích hợp rồi hỏi thẳng sếp đánh giá khả năng làm việc của mình thế nào, và theo sếp thì lãnh vực nào mình có thể trau dồi thêm để có thể đóng góp nhiều hơn cho công ty.

Theo tôi, mẹo tăng lương là chọn thời điểm thích hợp như thời điểm công ty thì đang làm ăn khấm khá, phát tài, thuận lợi, hanh thông, còn sếp thì lại đang vui vẻ và rõ ràng là đã tỏ vẻ hài lòng với công việc của mình. Coi như thiên thời địa lợi nhân hoà.

Theo lời khuyên của chuyên gia Lynn Taylor thì tuy là hỏi nhưng không phải hỏi, mà là nhắc khéo sếp nếu thấy khả năng em good như vậy thì có lẽ sếp đã quên điều chỉnh lương em rồi.

Cũng là xin tăng lương nhưng nghe tích cực hơn nhiều so với cách mà không ít người thường áp dụng, đó là “nói bóng, nói gió” là sẽ xin nghỉ việc vì đủ thứ lý do. Đặc biệt là lúc công ty đang thiếu người, dầu sôi lửa bỏng.

mẹo tăng lương

Đến khi sếp tra hỏi cho ra lẽ thì không có lý do nào là thuyết phục, ngoại trừ thông điệp là nếu không tăng lương thì tôi sẽ nghỉ việc. Ngay lúc này đây.

Đó là mẹo tăng lương không hay ho chút nào, vì nó giống như cưỡng bức, trấn lột người khác. Sếp có thể miễn cưỡng đồng ý đó, nhưng ấm ức ghim trong bụng và sực nhớ phải tìm người thay thế, dự phòng bất trắc từ ngay bây giờ. Mà cũng đúng, vì không ai muốn giữ chân người có ý định sẽ ra đi bao giờ.

  Bí quyết deal lương giúp bạn “lật bài ngửa” với nhà tuyển dụng

Coi như xong. Tăng lương kiểu này tưởng là “được” nhưng lại là “mất”, mất đi sự gắn bó, tin tưởng, sự thăng tiến tiềm năng, mất tất cả trong ánh mắt của sếp.

Tóm lại, đối đế lắm mới mở lời đề nghị tăng lương. Phải biết người biết ta, biết mình đang ở đâu trong đánh giá của mọi người xung quanh. Liệu khả năng và sự đóng góp của mình có thật sự vượt trội hay không. Liệu thời điểm mình mở lời có thích hợp hay không. Liệu cách mình đặt vấn đề có mang một thông điệp đầy tích cực hay không.

Và có lẽ mẹo tăng lương tốt nhất là phải đi kèm với tăng thêm trách nhiệm, tăng thêm vai trò trong sự thành công của công ty. Khi đó việc tăng lương chỉ là một hệ quả tất yếu.

Nguồn: Lý Quí Trung

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

Xem thêm việc làm IT mức lương lương hấp dẫn nhất thị trường

Vì sao nút Like Facebook chiếm tới 16% lượng code của website

Dựa theo dữ liệu từ BuiltWith.com, 6% của hơn 10,000 site với lượng traffic cao nhất đến từ Facebook’s servers. Đa phần chúng là Facebook’s Javascript SDK, một đoạn code dành cho việc hiển thị các tính năng như nút Like và Facebook comment.

SDK code này có qui mô lớn tới mức nó chiếm tới 16% số lượng JavaScript được dùng trong web page.

Là một trong những software library nổi tiếng, Facebook SDK giúp chúng ta hiểu được vì sao các site ngày nay ngày càng nặng? Cũng như size bao nhiêu thì được xem là tốt nhất với webpage?

Vì sao lại nặng đến thế?

Facebook SDK có đầy đủ các tính năng cũng như tool cần thiết cho các developer sử dụng như: phương pháp thu thập dữ liệu từ các site khác, để xác định trình duyệt nào và thiết bị mà đối tượng đang sử dụng cũng như liên quan tới các yếu tố về UI. Nếu phải phân loại SDK thành những thành phần nhỏ thì chúng ta sẽ có được một bảng thông tin sau:

Trong đó, có 3 tính năng nổi bật nhất là:

 

“Canvas” là Facebook’s system cho app được load ngay trong Facebook page. Tuy vậy, chúng khá nhẹ và chỉ chiếm khoảng 1.5% kích thước của SDK.

Tiếp đó, chúng ta có legacy feature. Nó phản ánh việc một API sẽ tích lũy nhiều

interfaces để thực hiện một feature nhiều lần. Ví dụ như developers có thể viết code dùng để call FB.getLoginStatus() hoặc Auth.getLoginStatus(). Thường thì để ta có thể dùng cả hai thì phải cho ra hai phiên bản riêng biệt SDK, nhưng Facebook lại không muốn như vậy nhằm để đơn giản hóa cho developer cũng như giữ cho sự nhất quán trong loại file các site cùng sử dụng. Vì thế, SDK tốn khoảng 3.5% số code của nó để thực hiện legacy feature.

Ngược lại, Polyfill chiếm tới 15% số lượng code trong SDK. Nó được dùng để hỗ trợ cho các feature từ cũ tới mới, xuất hiện trong các phiên bản của trình duyệt web. Đa phần các Polyfill có trong Facebook SDK là nhằm cho các feature được số đông các internet user dùng ngày nay. Trong khi đó, nó chỉ hỗ trợ được cho khoảng < 1% các trình duyệt cũ như Internet Explorer 8, vốn đã bị nhiều trang web ngừng support.

~80% số lượng code còn lại của SDK bao gồm dành cho nhiều tính năng khác nhau. Thường chúng là những feature nhỏ nhưng kết hợp và hoạt động cùng nhau nhằm để tạo ra một trải nghiệm sử dụng tốt nhất có thể. Do đó, với chỉ một tính năng đơn giản là nút like thì ta cũng sẽ phải thêm những tính năng khác như comments, video embeds, login buttons, etc. Tất nhiên Facebook có thể hạn chế việc có quá nhiều tính năng nhưng theo góc độ kinh doanh, thì hãng luôn muốn người dùng xài càng nhiều sản phẩm từ hãng càng tốt.

Kích cỡ có quan trọng không?

Bởi vì Facebook’s SDK được dùng rộng rãi, lại được update thường xuyên, nhiều user có thể đã download nó về trước cả khi load một website. Nói cách khác, đây cũng là một trong những nguyên nhân Facebook lại cung cấp những file khá bự, thay vì những file nhỏ cho từng tính năng như nút Like. Mặt khác, tốc độ download giữa chúng cũng không có mấy khác biệt.

Tuy vậy, cho dù browser của bạn đã download SDK hay chưa, ta vẫn cần rất nhiều công đoạn để có thể chạy nguyên một khối Javascript code, đặc biệt là trên mobile. Với một Macbook Pro, Facebook’s SDK mất khoảng 50ms (1/20 của 1 giây) để chạy những site như buzzfeed. Không tệ khi mà ta phải load với một đống JS code, Ad cũng như những tính năng nhỏ lớn khác nhau.

Trên smartphone thì thời gian xử lí tăng lên gấp đôi với 1/10 giây:

Dựa vào số liệu thì sự khác biệt rất nhỏ nhưng do ta còn scroll và xem, do đó nên với SDK thì quá trình tương tác với webpage sẽ trở nên khá thô và lag. Đây là một vấn đề khá lớn khi các website ngày nay đều có code được đến từ một nhóm thứ 3.

Có thể nói, với sự tịch hợp các tính năng cũng như dữ liệu từ nhóm thứ 3 sẽ khiến cho việc khối lượng kích thước file sẽ bị tăng cao. Chưa kể, cảm giác khi bạn bỏ công làm ra hàng trăm, ngàn hàng code rồi phải bỏ đi 10% chỉ đơn giản là để bảo đảm hiệu năng, để rồi lại thấy người khác chèn cả đống code vào.

Bạn có nên dùng nó hay không?

Nếu bạn cần phải dùng một feature như Facebook Comments, thì Facebook SDK là điều bắt buộc. Tùy vào cấu trúc cũng site mà bạn có thể hạn chế sự ảnh hưởng của SDK và chỉ dùng nó khi cần.

Nếu bạn muốn xài nút Like, thì hãy ngừng và suy nghĩ lại. Facebook không còn hiển thị Like của một page như trước nữa. Vì thế hãy chuyển qua sài một nút share đơn giản. Nó cũng giúp bạn không phải lo về việc facebook theo dõi cũng như gián đoạn bạn.

Nguồn: blog.topdev.vn via Medium

8 lợi thế khi sử dụng Polymer so với Angular và React

polymer

Vì sao một số người lại không thể thành công?

Vì sao một số người lại không thể thành công

Hôm nay Edward lý giải một cách logic vì sao sẽ có một nhóm người – không thể nào thành công được, ngay cả khi họ rất nỗ lực và cố gắng. Hãy cùng xem xét thông qua việc phân tích dưới góc nhìn tâm lý.

Nhiều bạn trẻ, khi còn ngồi trên ghế nhà trường luôn mơ mộng về một ngày mình sẽ được làm việc trong môi trường chuyên nghiệp, lương cao, công việc nhẹ nhàng, sếp dễ tính, đồng nghiệp thân thiện, nói chung tất tần tật từ A-Z phải chiều theo ý của mình. Và rồi họ cũng hơi chút ảo tưởng về năng lực thực sự cũng như bằng cấp của mình. Thời nay, tấm bằng không đo được năng lực cũng như kinh nghiệm và đẳng cấp của bạn. Kết quả bạn thể hiện trong công việc, thái độ bạn thể hiện với mọi người mới nói lên bạn là ai.

Theo thống kê hơn 300,000 cử nhân thạc sỹ thất nghiệp sau khi ra trường. Con số ấy ngày nay vẫn tiếp tục tăng cao. Và rồi những bạn trẻ ấy quay sang đổ lỗi, than phiền. Họ kêu ca công ty thiếu chuyên nghiệp, sếp bóc lột, đây không phải là công việc theo đúng sứ mệnh mình sinh ra để làm. Theo phản ứng thông thường, nhóm người này bỏ cuộc quá sớm để tìm một công việc mới, hoặc tự tay “làm nên nghiệp lớn”. Và rồi sự thật phũ phàng là việc nào thì cũng khó khăn hết, công việc nào họ cũng chỉ cố làm ở mức hời hợt, theo kiểu làm cho có kinh nghiệm chứ cũng chẳng định gắn bó lâu dài gì cả. Còn chuyện khởi nghiệp, thì 90% doanh nghiệp “chết” tươi ngay sau 1 năm đầu, đó là thống kê. Để rồi khi ra trường vài năm, họ vẫn cứ loanh quanh, luẩn quẩn ở mức lương ba cọc ba đồng, sự nghiệp thì chưa có, kinh nghiệm cũng không, kỹ năng thì hổng chỗ nọ, kém chỗ kia.

KHỦNG HOẢNG TUỔI TRUNG NIÊN

Theo thời gian, họ phải đối mặt thêm với nhiều trách nhiệm và áp lực. Nếu lập gia đình là trách nhiệm với gia đình, nuôi con, mối quan hệ với họ hàng. Kéo theo là áp lực tài chính, áp lực công việc, áp lực với mối quan hệ. Chưa kể áp lực khi đồng trang lứa bạn bè thành công, mà mình nhìn đi nhìn lại vẫn đang chỉ là con số 0. Khi bước qua tuổi 30, có một hiện tượng tâm lý nhóm người này rất dễ mắc vào, đó là “khủng hoảng tuổi trung niên” – tức đánh mất niềm tin vào bản thân. Họ không còn tin mình có thể thành công. Và rồi họ buông xuôi tất cả. Lúc này cuộc sống với họ chỉ đơn thuần là lo chuyện cơm áo gạo tiền, giải quyết mớ trách nhiệm: nào hóa đơn tiền điện, nào hóa đơn tiền nước, nào tiền học phí cho con, sự nghiệp không thể tiến triển, cứ dậm chân tại chỗ, đầu tư cho bản thân cũng chẳng có cơ hội. Và rồi một ngày nào đó, họ chỉ còn biết “Giá như ngày xưa, mình đã làm gì đó khác đi.”

Đây là kịch bản của rất rất nhiều người ngoài kia. Ngày còn trẻ, ai cũng sung sức, ai cũng đầy nhiệt huyết hết. Nhưng khi còn trẻ mà không có nền tảng vững vàng, không làm đúng những bước đầu thì sau này sẽ rất khó, thậm chí là không thể thành công. Giống như trồng cây, bạn không thể nào gieo hạt bưởi mà lại mong khi lớn nên nó sẽ mọc thành cây xoài. Tương tự như vậy, tuổi ngoài 30 là kết quả của 10 năm đầu đời – những gì bạn làm ở tuổi 20s. Cho nên, hóa ra lúc bạn phải nỗ lực nhất, lúc bạn phải làm đúng nhất, lúc bạn phải cày cuốc, khổ ải nhiều nhất, lúc bạn phải học nhiều nhất lại là những năm tháng tuổi 20s – lúc bạn vẫn nghĩ mình là tỉ phú thời gian.

HỌC, LÀM THÌ ÍT – CHƠI THÌ NHIỀU – ĐI LÊN BẰNG CHIÊU TRÒ

Tỉ phú thời gian là câu nói cửa miệng của sinh viên, và cả những người mới đi làm. Nhưng thực sự mọi chuyện không đơn giản như vậy. Giống như cơn sóng thần, nó ập đến một cách rất bất ngờ, và trước đó trời thường quang, mây thường tạnh. Khi ra trường, cùng một lúc đủ mọi áp lực ập đến, là công việc, là gia đình, là môi trường mới,.. Hóa ra, các bạn sinh viên chỉ có một vài năm ngắn ngủi để chuẩn bị cho ti tỉ việc họ sẽ phải làm. Thế nhưng, họ chuẩn bị bằng cách nào? Học, làm thì ít – chơi thì nhiều.

Nói đến học, là kêu chán. Than phiền phòng đào tạo, than phiền cơ chế, giờ học thì ngồi ngủ. Lỗi một phần có thể do giảng viên, nhưng phần còn lại là do các bạn trẻ. Thời gian rảnh họ làm gì? Là con sâu cày phim, cày game, cày youtube. Buổi tối thì là chuyên gia đi nhậu. Mỗi khi sinh nhật, đâu chỉ đi một tăng. Phải đi tăng hai, tăng ba, tăng tư. Mà sinh viên tiền đâu ra, là trợ cấp của cha mẹ chứ đâu, hay đi làm thêm kiếm ít tiền mà đổi lại những cuộc vui chơi tốn kém như thế liệu có đáng? Chưa kể, họ cũng là vua đi chơi. Nay phải đi phượt cung này, mai lại đi phượt cung kia. Nói thẳng ra, thi thoảng đi thì có trải nghiệm sẽ rất vui. Nhưng mà đi liên tục, sinh viên vừa ít tiền, lại ít lựa chọn, chưa kể rủi ro nhiều. Trong khi thời gian đó, cân bằng lại, trải nghiệm vừa phải, đi chơi vừa phải; tập trung sức mạnh cho việc học, học chuyên ngành, học ngoại ngữ, phát triển bản thân, rèn luyện thể chất để đến khi đi làm ngay lập tức tạo ra sự khác biệt.

Chưa kể, có nhiều bạn trẻ hay thích dùng thủ đoạn khôn lỏi, luồn lách, lươn lẹo, tìm kiếm kẽ hở để ăn chặn, làm trò gian dối. Tuy nhiên, sự thật là cái kim trong bọc lâu ngày cũng lòi ra. Không có sự giả dối nào sống mãi với thời gian, và không sự thật nào không lớn lên cùng năm tháng. Với những chiêu trò, thủ đoạn thì đi đêm lắm cũng có ngày gặp ma, sớm muộn gì cũng bị phát hiện. Khi ấy tiền mất, tật mang, ảnh hưởng danh dự, mất hết mối quan hệ, mất công việc, nhìn đi nhìn lại thiệt hại đủ mọi đường. Cho nên, bạn trẻ làm ơn đừng vội nghĩ đến thủ đoạn, bởi có thể bạn thông minh, khôn lỏi nhưng hãy nhớ núi cao còn có núi cao hơn. Đó là chân lí. Sẽ có người nhìn thấy những điều đó, vấn đề chỉ là thời gian.

Ví dụ, Edward có một đứa em sinh viên trường Ngoại thương ngoài Hà Nội đi phỏng vấn ở một tập đoàn lớn đa quốc gia, vào vòng trong câu hỏi cuối cùng họ hỏi là “What’s your MBTI? Tell us about you?” Câu này làm gì có giáo trình Mác Lênin nào dạy, phần nhiều các bạn ú ớ nó là cái gì thế? Trong khi phân loại tính cách là công cụ mà Top Fortune 500 (500 công ty hàng đầu thế giới) họ đều xài. Con nhỏ thấy trúng tủ, vì hóa ra thời gian rảnh rỗi tìm hiểu sâu về tâm lý, phân loại tính cách, ứng dụng hiểu bản thân biết tất tần tật; lại thêm việc cũng chịu khó học Tiếng Anh mỗi ngày, trả lời vanh vách tính cách của mình, lại nói rõ điểm yếu, điểm mạnh phù hợp công việc. Nhà tuyển dụng thích quá, họ chốt luôn. Vừa thực tập một thời gian, quản lý đã đề xuất em nên vào trong Sài Gòn – trụ sở chính tập đoàn mình để học hỏi được nhiều kinh nghiệm trước khi quay trở lại trường học. Cho nên, bớt chơi bời, bớt lười nhác, bớt thời gian vô bổ, lo mà rèn luyện, mà học cho sau này.

HIỆN TƯỢNG ĐỨNG NÚI NÀY TRÔNG NÚI NỌ

Rất nhiều bạn trẻ gặp hiện tượng này. Họ bắt đầu một công việc, làm nó một cách hững hờ, được một thời gian thì chán, và họ nhảy việc. Sang công ty khác, được cái này thì mất cái kia, rồi gặp rắc rối, mâu thuẫn họ lại tiếp tục nhảy việc. Cứ như vậy, mỗi lần đi xin việc, nhìn trong CV thì hoành tráng: kinh nghiệm làm chỗ nọ, chỗ kia, trong thời gian ngắn mà làm tới mấy công ty liền. Mà cứ nhảy việc liên tục như vậy thì lấy đâu ra kinh nghiệm và năng lực thực tiễn.

Với nhà tuyển dụng chuyên nghiệp, dĩ nhiên đó sẽ là ứng viên họ ưu tiên loại đầu tiên bởi lẽ tuyển mấy bạn như vậy về để làm gì khi mà kinh nghiệm duy nhất họ có là kinh nghiệm nhảy việc. Trong tuyển dụng, có hai trường hợp tuyển dụng sai lầm nhiều nhà tuyển dụng rất lưu ý đó là tuyển dụng người nhưng sau đó không làm việc được (False Positive – FP) và không tuyển dụng người có thể làm được việc (False Negative – FN). Nhận biết FN thì bất khả thi nhưng nhận biết FP thì dễ, chỉ cần cho làm thử vài tháng là kiểm tra được ngay trình độ, lúc ấy họ loại cũng chưa muộn.

Với những người như này, họ luôn luôn không được làm bài bản và thành thục một kỹ năng chuyên nghiệp nào đó. Bởi lẽ thời gian đầu công ty nào cũng phải đào tạo bài bản hết cho nhân viên. Chưa kể, nhân viên còn phải thích nghi với văn hóa doanh nghiệp, ít nhất cũng cần phải có 1 năm để hiểu. Xong rồi cần từ 2-3 năm để thành thục công việc, để được giao thêm nhiều việc lớn hơn. Nếu cứ nhảy việc liên tục, làm sao họ có thể thành thục công việc ở tầng chuyên gia được. Mà như thế, làm sao họ có thể thành công được.

CÔNG THỨC CỦA THÀNH CÔNG LÀ NGUYÊN TẮC 10.000H

Đây là công thức mà nhiều sách, nhiều người đã đúc kết lại. Nếu đo lường bằng thời gian làm việc nó vào khoảng từ 7 – 10 năm trong nghề để có thể tích lũy đủ 10.000h. Trong thời đại công nghệ, nếu bạn có thêm kỹ năng sử dụng công nghệ và cập nhật công nghệ liên tục, cũng như có khả năng tự học tốt thì có thể rút ngắn xuống từ 5 – 7 năm. Thêm vào đó, nếu có sự tác động của thầy giỏi – người có kinh nghiệm thực sự kèm cặp thì thời gian và khả năng cập nhật kỹ năng, kinh nghiệm sẽ nhanh hơn rất nhiều.

Tuy nhiên, công thức này đúng nhưng chưa đầy đủ. Bạn có thể thấy có nhiều người họ làm việc 25 – 30 năm trong nghề, mà vì sao lại không tạo ra sự đột phá? Câu trả lời ở đây là do họ làm đi làm lại một việc nhưng không cập nhật, nâng cấp, cải tiến, tích lũy bổ sung kinh nghiệm cho mình. Thêm vào nữa, ở đây có một bẫy tâm lý gọi là “mắc kẹt ở mức trung bình”. Khi con người ta làm việc ở mức độ trung bình, không quá kém, mọi thứ ổn, họ rất dễ bị dậm chân tại chỗ. Đó là lý do vì sao có những người sẽ vẫn không đột phá và trở thành chuyên gia nếu không liên tục nâng cấp bản thân mình.

CÓ NHỮNG CHUYỆN, PHẢI CHUẨN BỊ TRƯỚC KHI QUÁ MUỘN

Có nhiều thứ lúc chúng ta học thì không cần dùng đến. Và nghịch lý nằm ở chỗ, khi có việc cần phải có kiến thức đó thì chúng ta lại không kịp học. Chẳng hạn, khi bạn học Tiếng Anh – bạn chưa chắc đã dùng đến ngay (chưa có cơ hội). Nhưng giả sử cơ hội đến (ví dụ bạn được đi du học) mà bạn lại chưa có Tiếng Anh, thì chắc chắn lúc đó không thể nào kịp. Cho nên, có những chuyện phải chuẩn bị trước khi quá muộn.

Ở các nước phương Tây, chẳng hạn ở Mỹ – các bạn trẻ được giáo dục về sự tự lập từ khi rất sớm. Chẳng hạn như khi bước vào trường đại học, ở tuổi 18 – họ bắt đầu lập các tài khoản khác nhau để tiết kiệm dần. Và một trong số đó, có một tài khoản mà ít người chú ý, nhất là khi còn trẻ, là tài khoản tiết kiệm tiền để nuôi con. Có thể khi mới là sinh viên, chưa thể kiếm được nhiều tiền nhưng tư duy cần chuẩn bị từ sớm là một tư duy rất đúng đắn. Vô tình như vậy, họ ý thức sớm cho tương lai của mình và dĩ nhiên sẽ không còn lãng phí tiền bạc. Đó chỉ là một ví dụ. Thêm một ví dụ khác, có nhiều người lúc sinh con – vẫn chưa hề chuẩn bị kiến thức về nuôi dạy trẻ. Mà khi đó đủ thứ áp lực, đủ tình huống phát sinh thì sao mà kịp thời cập nhật kiến thức. Cho nên, lúc cần học kiến thức về nuôi con, giáo dục con, giáo dục sớm hóa ra lại là khi mà chưa có con. Nhưng khi chưa có con mà lại đi học kiến thức nuôi dạy con, có khi lại bị nói là khùng, đó là nghịch lý.

Nếu muốn thành công sau này, ngay từ bây giờ bạn trẻ nên dành thời gian để chuẩn bị. Hãy nhớ “Thành công trong chuẩn bị là chuẩn bị cho thành công” hay “Không chuẩn bị là chuẩn bị cho thất bại”. Sự chuẩn bị toàn diện mọi yếu tố để bản thân có CÁI TÂM (đạo đức) – có CÁI TẦM (tầm nhìn) và có CÁI TÀI (tài năng thực sự). Chuẩn bị thì có đủ thứ, nhưng sớm bao nhiêu, chuẩn bị được nhiều bao nhiêu tốt bấy nhiêu, chẳng hạn như:

  • Chuẩn bị thật tốt về thể trạng và thể lực. Tuổi trẻ là phải khỏe mạnh thực sự.
  • Chú ý cẩn trọng về ăn uống, ngủ nghỉ, chế độ tập luyện thể dục, thể thao.
  • Chuẩn bị về ngoại ngữ. Tiếng Anh là ngôn ngữ bắt buộc. Và ráng thì ngày nào cũng đọc, học bằng tài liệu nước ngoài để nâng tầm tư duy.
  • Chuẩn bị kiến thức về tài chính, làm giàu. Sự giàu có chân chính mang lại sự tự do, chỉ đơn giản vậy thôi.
  • Chuẩn bị kiến thức và kỹ năng về làm chủ bản thân và các mối quan hệ. Ngày nào chúng ta cũng phải giao tiếp, đây là việc không thể tránh khỏi.
  • Chuẩn bị về chuyên môn. Làm nghề gì cũng được, miễn là lọt vào TOP 1% những người giỏi nhất. Mà muốn thành chuyên gia, ngày nào cũng phải học và đầu tư kiến thức vào lĩnh vực mình theo đuổi.

Còn nhiều thứ nữa, bạn đọc có thể cùng liệt kê ra.

Ngay từ bây giờ, khi bạn còn trẻ, có thời gian thực sự thì phải trân trọng quãng thời gian này. Tích lũy những thứ cần phải tích lũy, làm những việc mình cần phải làm, sống cuộc đời bạn muốn sống bởi lẽ chẳng ai mong muốn một ngày nào đó trong tương lai, mình lại bị rơi vào nhóm người không thể thành công.

Nguồn: Bài viết độc quyền tại Tâm lý học ứng dụng

Sử dụng Machine Learning để visualize customer preferences

Sử dụng Machine Learning để visualize customer preferences

Năm 2012, tôi đã thấy một trong những hình minh họa chữ ( word cloud visualization) tuyệt nhất tại New York Times. Được tạo ra bởi Mike Bostock, và team của anh ấy. Vốn là những chuyên gia về data visualization (minh họa data) để giúp người đọc hiểu rõ thêm về những vấn đề trong chiến dịch tái ứng cử của Obama.

Khi chúng tôi giới thiệu Soylent, đã có hàng lũ lượt các bình luận trên Hacker News, Twitter, và Reddit. Feedback nhiều vô kể, cả tích cực lẫn tiêu cực. Thật tiếc là chúng tôi không thể nào đọc hết từng ấy bình luận. Để đối mặt với vấn đề đấy, chúng tôi đã tìm cách để có thể những vấn đề quan trọng và nổi bật nhất đến từ cả 2 phía supporters và detractors. Sau đây tôi sẽ nêu ra cách thức mà để thiết kế ra hệ thống đó, sau đó dùng Elon Musk’s Hyperloop làm ví dụ.

Cách mà NYTimes tạo nên những hình minh họa như vậy

Nó so sánh việc các ứng viên thường xuyên dùng từ, câu văn nào. Dựa trên một phân tích từ transcripts của Federal News Service

Hiểu một cách đơn giản, vòng tròn càng to thì từ đó càng được dùng nhiều trong bài diễn văn của ứng viên, như từ “traditional” chẳng hạn. Thế nhưng hình minh họa của NYT có chút khác biệt bởi nó giúp bạn hiểu rõ hơn về những vấn đề mà 2 phe đối lập muốn hướng tới. Bình thường thì các hình minh họa chữ chỉ làm nổi bật đề tài chứ không cho biết thêm gì khác.

Một ví dụ minh họa chữ nhưng khá vô dụng

 

Ở hình trên, bạn không biết được gì ngoài tên của chủ đề và những thứ liên quan tới nó. Ngay cả việc dùng màu sắc cũng chả giúp ích được gì. Đã có rất nhiều bài viết chỉ trích việc thiết kế một cách mù quáng và không chưa đựng một ý nghĩa nào.

Hàng “thật” thì sẽ như thế nào?

Hình minh họa chữ các bạn được thấy của NYT là hàng “thật” bởi nó không chỉ cho chúng ta biết về những chủ đề nổi bật mà còn chỉ ra chúng thường được dùng bởi phe phái nào. Tương tự như việc phân tích customer feedback, chúng ta hiểu được một phần nào đó về họ cũng như những điều mà họ muốn nghe. Nói cách khác, ta biết rõ lập luận cũng như trường phái giữa phe cộng hòa và dân chủ. Khi tung ra một sản phẩm mới, đặc biệt là khi nó có nhiều phản ứng trái chiều. Cực kì quan trọng là bạn phải phân biệt được những vấn đề nào nổi bật nhất và đến từ ai.

Sử dụng machine learning / natural language processing, chúng ta có thể tự động phân loại bình luận nào tích cực/tiêu cực/ trung lập với phân tích tình cảm và sau đó xác định vấn đề gốc rễ thật sự của chúng.

Cách tạo ra một hệ thống tự động để làm công việc phân tích trên

Với HackerNews API, Google’s Natural Language API, và D3.js cũng như kết nối chúng bằng Python. Tôi muốn tạo ra một web tương tác, tự động phân tích và cho ra kết quả tương tự như hình minh họa chữ của NYT. HackerNews API được host trên Firebase và có tài liệu hướng dẫn kĩ lưỡng từ Github. Nó cho phép ta pull rất dễ dàng các bình luận về một nội dụng. Sau đó, Google’s Cloud Natural Language API giúp ta phân tích và lọc. Cuối cùng, khi đã biết được các nội dung nổi bật cũng như những ai thường nói tới nó thì việc làm hình minh họa chữ chỉ là việc cỏn con.

Code của ta thực chất sẽ làm những việc như sau:

  1. Dùng HackerNews ID để lấy IDs của bình luận từ HackerNews API
  2. Đến mấy cái threads của bình luận và thu thập chúng
  3. Submit từng bình luận đến Natural Language API và lưu trữ kết quả.
  4. Biến kết quả thành JSON object cho việc làm hình minh họa chữ bằng D3
  5. Dùng D3 để vẽ và cho ra hình minh họa chữ

Bước quan trọng nhất chính là khi phân biệt các comment tích cực hay tiêu cực. Đây là lúc chúng ta cần đến machine learning để phân loại chúng (tiêu cực hay tích cực, ý kiến của nhà đầu tư hay là của khách hàng). Ở hình trên, bạn có thể thấy kết quả từ Google’s Natural Language API. Nhờ vào API này mà chúng ta bớt đi khối lượng lớn công việc phức tạp và tốn thời gian khi phải xài một learning machine model mới, bởi Google model vừa chính xác lại giá cả phải chăng. Có thể thấy trong hình, toàn bộ các comment đã được phân chia dựa theo mức độ cảm xúc – tích cực, tiêu cực và trung lập. (điểm giao động từ -0.1 đến 1.0).

Với từng comment đi qua Natural Language API, điểm sẽ được cho và chúng được phân loại vào từng nhóm riêng. Sau đó, tùy vào điểm mà sẽ có màu khác nhau ví dụ như xanh cho nhóm khách hàng và đỏ cho nhóm đầu tư. Cuối cùng JavaScript library D3.js sẽ vẽ thành hình minh họa chữ cho chúng ta.

Sử dụng phân tích này trên Hyperloop launch của Elon Musk

Tôi nghĩ chúng ta có thể lấy Hyperloop launch làm ví dụ để sử dụng cho công nghệ trên vì một số lí do sau. Đầu tiên, Elon Musk vừa mới công bố rằng team của ông đang chế tạo và phát triển Hyperloop như trong phim giả tưởng. Các nhà đầu tư vẫn đang đổ tiền vào các dự án phát triển tương tự. Không chỉ vậy với sự hiện diện của KickStarter, các công ty cũng bắt đầu mạnh dạn hơn trong quá trình lên ý tưởng và testing chúng. Tuy vậy,  Elon Musk thật sự đã bức phá cược chơi với tuyên bố trên.

Sau đây là các comment trên HackerNew khi nghe tin Hyperloop launch, được minh họa chữ:

 

Sau đây là một số key-note chúng ta có thể rút ra:

  • Các nhà đầu tư lo lắng nhất về chi phí cũng như tính an toàn. Họ lo rằng tiền cần cho cơ sở hạ tầng của project sẽ vượt mức đạt ra và mất quá nhiều thời gian để hoàn thành.
  • Các người ủng hộ/khách hàng thì tin rằng Elon Musk là thiên tài có thể đạt được bất cứ thứ gì ông đề ra. Có thể thấy ông có khá nhiều ảnh hưởng lên độc giả tại HackerNews.
  • Vấn đề chính trị cũng khá được quan tâm bởi hai phía. Việc Hyperloop có khả năng sẽ lách được nhiều qui định nhưng chính quyền sẽ không dễ dàng gì làm ngơ.
  • Nhóm ủng hộ cũng khá quan tâm về các chi tiết thiết kế như nhiệt độ, áp lực, và nhiều yếu tố khác.
  • Các nhà đầu tư thì lo về tính khả thi của project hơn với các chi phí phát sinh khi phát triển project.

Tuy đây chỉ là một phần nổi của tảng băng nhưng nó cũng đã cho ta biết được rất nhiều thông tin quí giá và thú vị về suy nghĩ cũng như những vấn đề mà người dùng và nhà đầu tư quan tâm.

Áp dụng vào quá trình kinh doanh của Soylent

Tại Soylent, nhờ vào cách thức phân tích trên, chúng tôi hiểu rằng khách hàng của mình rất quan tâm tới những khía cạnh của sản phẩm như lành mạnh, tiện lợi và giá cả phải chăng. Nhờ đó mà Soylent nhận ra hướng phát triển mới cho sản phẩm của mình với khả năng mang lại cả 3 giá trị trên.

Nếu bạn cũng đang phát triển một công ty non trẻ và may mắn có được sự đóng góp nhận xét tích cực từ cộng đồng người dùng và nhà đầu tư. Tôi khuyến khích bạn sử dụng machine learning để có thể lọc ra những thông tin quan trọng và đầy quí giá về thị hiếu cũng như các giá trị mà khách hàng của bạn quan tâm tới.

Tham khảo thêm: Việc làm cho lập trình viên Machine Learning mới nhất

Nguồn: topdev via Hackernoon

Làm đúng một vị trí trong 2 năm, ổn hay không ổn?

Laptop and coffee cup on conference room table

Bạn có thể đang rất mong đợi được thăng chức, nhưng không phải lúc nào điều đó cũng có thể thực hiện được vào đúng thời điểm bạn cần nhất.

Một lúc nào đó, bạn sẽ nhìn vào hồ sơ của mình và nghĩ rằng “Ồ, mình đã làm ở vị trí này cho đến nay là đã hai năm rồi đấy.” Khoảng thời gian đó là lâu hơn so với bất kỳ vị trí nào khác bạn đã từng làm trước khi được lên vị trí này. Và bạn bắt đầu thắc mắc không biết có gì đó chưa tốt về mình hay không, hay liệu có điều gì bạn có thể làm để có thể cải thiện được bản thân mình hay không để có thể được thăng chức.

Trên thực tế, trong tình huống đó, sớm hay muộn bạn cũng sẽ nhận ra rằng không phải lúc nào việc đứng yên một chỗ trong hai năm cũng là điều gì đó kém cỏi. Tất nhiên nói một cách công bằng, cũng có những lúc điều đó cho thấy rằng có điều gì bạn cần phải cố gắng hơn. Hãy cùng nhìn vào cả hai trường hợp.

Sẽ là bình thường nếu bạn vẫn nhận được cơ hội để nhận lãnh đạo các dự án mới

Có thể bạn sẽ cảm thấy buồn bực vì những nỗ lực trong thời gian qua của mình chưa được công nhận bằng cách thăng chức, nhưng điều đó cũng không có nghĩa rằng bạn không phải là chỗ dựa vững chắc của các đồng nghiệp trong các dự án khó hơn so với trách nhiệm chính thức với vị trí của bạn.

Hãy nhìn kỹ vào danh sách những việc cần làm của mình. Liệu có phải sếp của bạn đã bắt đầu tin tưởng vào giao cho bạn những công việc rất quan trọng hay không? Bạn có cảm thấy rằng mình đang được đãi ngộ xứng đáng hay không? Nếu câu trả lời cho cả hai câu hỏi là có, thì khả năng cao là bạn đang làm nhiều hơn những gì được yêu cầu và mọi người xung quanh bạn đều công nhận điều đó.

Sẽ là không ổn nếu trách nhiệm của bạn từ trước đến nay vẫn vậy

Ngược lại, có lẽ bạn sẽ cần phải xem lại nếu như bạn vẫn phải làm những công việc bạn được giao từ những ngày đầu tiên bạn nhận vai trò này. Mặc dù một số yếu tố khác cũng có thể ảnh hưởng, nhưng khả năng cao là bạn vẫn đang làm những việc đó bởi vì bạn chưa thể chứng tỏ được với ai rằng bạn có thể làm được hơn thế cả.

Nếu bạn không chắc chắn được khả năng làm việc của mình là như thế nào, đừng ngại ngùng hỏi chính sếp mình để được nghe nhận xét thẳng thắn, để hiểu rõ hơn rằng bạn cần phải làm gì. Bạn có thể sẽ không thoải mái khi phải nghe những điều đó đâu, nhưng bạn sẽ hiểu rõ hơn bạn cần phải làm gì để có thể đặt bước tiếp theo trong sự nghiệp của mình.

Sẽ là bình thường nếu bạn vẫn đang học được những kỹ năng mới

Tất nhiên sẽ là khá khó chịu nếu như sếp không chịu vỗ vai bạn và nâng cho bạn thêm một bậc lương trong khi bạn vẫn đang học thêm được các kỹ năng mới hàng ngày. Tuy vậy, không có nghĩa là bạn sẽ phải từ bỏ những kỹ năng đó nếu như bạn có bao giờ quyết định nghỉ việc.

Khi bạn đang cảm thấy buồn bực, hãy nhớ một điều rằng: Bạn đang đặt mình vào một vị trí tốt hơn rất nhiều để có thể giành được một vai trò lớn hơn và cao cấp hơn trong tương lai.

Sẽ là không ổn nếu bạn đang cảm thấy chán nản

Vấn đề là thế này: Nếu bạn đang cảm thấy chán chường ở chỗ làm và trách nhiệm của bạn trong vài năm vừa qua vẫn chẳng có gì thay đổi, thì bạn chỉ đang làm hại chính mình mà thôi.

Bạn có đang tìm kiếm thêm những cơ hội phát triển mới không? Bạn có đang tình nguyện nhận thêm những công việc năm ngoài vùng an toàn của mình hay chưa? Nếu câu trả lời là không, thì việc bạn đang dậm chân tại chỗ có lẽ đang phản ánh chính mức độ chăm chỉ của bạn.

Sẽ là bình thường nếu hiện tại không có công việc nào phù hợp đang mở ra cho bạn

Trừ khi bạn đang làm việc cho một vài công ty, thì đội ngũ của bạn có lẽ sẽ không có thừa tiền để sẵn sàng thăng chức bất kỳ ai một cách cảm tính được. Bạn có thể đang làm rất nhiều việc—và rất nhiều trong số đó còn vượt xa trách nhiệm chính của bạn—nhưng sự thật ở đây có thể chỉ đơn giản là hiện tại chưa có chỗ để thăng chức thêm được cho ai cả. Và mặc dù điều đó khá là khó chịu, điều đó cũng không phản ánh được nỗ lực của bạn. Đến một lúc nào đó, bạn sẽ được công nhận vì khả năng và sự cố gắng của mình.

Sẽ là không ổn nếu như bạn không chịu đăng ký cho những vị trí đang mở

Sẽ rất dễ dàng để bạn tự thuyết phục bản thân rằng bạn không có đủ khả năng cũng như chưa sẵn sàng cho việc thăng chức. Đó là một nơi thoải mái để sống. Nhưng mặt trái của tâm lý này đó là bạn sẽ không bao giờ nỗ lực đặt bản thân mình vào một vị trí để có thể hiểu được rằng bạn có thực sự đủ khả năng làm được hay không.

Không bao giờ là dễ dàng để chấp nhận lời từ chối. Nhưng nếu như bạn cứ liên tục trốn tránh những cơ hội để đi bước tiếp theo trong sự nghiệp của mình, thì không một ai sẽ bắt bạn làm điều đó.

Sự thật là, được thăng chức sẽ là một sự khích lệ tinh thần rất lớn, cho nên sẽ là rất tự nhiên nếu bạn đang cảm thấy bồn chồn khi mãi mà vẫn chưa được thăng chức như mình mong muốn. Nhưng hãy nhìn kỹ lại tình trạng công việc hiện tại của mình.

Nếu bạn đang làm nhiều hơn so với những gì được yêu cầu và bạn thực sự tin rằng mình xứng đáng cho một vị trí mới, đừng ngại ngần nói chuyện với sếp của mình. Nếu bạn cảm thấy đó không phải là một lựa chọn tốt, hoặc bạn đã thử rồi nhưng không thành công? Vậy thì, bạn ạ, đã đến lúc phải đi tìm một công việc mới thôi.

Nguồn: Applancer Careers via Nhịp Sống Kinh Tế/QZ

Tản mạn về Testing

Alpha và Beta testing

Tôi đang làm việc cho một công ty có định hướng là một công ty công nghệ. Gần đây trong công ty tôi *talk* khá nhiều về Automation Test, TDD, BDD, blah blah như một mốt thời thượng, tuy nhiên lại không hiểu bản chất là gì, áp dụng thực tế như thế nào. Tôi nhận ra rằng tuyệt đại đa số nhân sự cốt lõi công ty tôi đều đang mắc kẹt trong “Hazard zone”, thích google rồi chém gió như những vị thần hơn là thực sự học hỏi, phát triển chuyên môn để nâng cao chất lượng sản phẩm. Điều này đem lại cảm giác giống như việc tôi vẫn đang tự hỏi làm sao để Việt Nam mình có thể “đón nhận và đi đầu cách mạng công nghiệp 4.0” với một nền giáo dục tệ hại như hiện tại.

Tuyển dụng it tester cho bạn

Thay vì tập trung vào các mỹ từ, tôi nghĩ cần hiểu cái cốt lõi trước: Test. Bạn sẽ auto hay TDD cái gì khi bạn chưa thực hiện test một cách đúng đắn, T(Test) is DD (Dump and Die) chăng? Đây cũng là chủ đề bài viết này tập trung chia sẻ, trong phạm vi khi thêm mới hay thay đổi một chức năng của ứng dụng web, một case gặp quá phổ biến dù trong công ty sản phẩm hay công ty gia công phần mềm. Bài viết cũng không sử dụng các khái niệm hàn lâm, mà tập trung vào sự vận dụng trong thực tế.

Test thực sự là phải làm gì?

Rõ ràng là khi làm một chức năng nào đó, bạn phải kiểm tra xem chức năng đó có hoạt động đúng như yêu cầu không. Thuở hồng hoang của phát triển sản phẩm, việc bạn ngồi bấm bấm nhập nhập để xác nhận, đó là test. Khi chức năng nhiều lên, bạn cần phải tài liệu hóa việc bấm bấm nhập nhập đó, ví dụ các file excel lưu các test case và kết quả, để tái sử dụng, tránh thiếu sót và cũng là để xác nhận quá trình test của bạn.

Rồi bạn nhận ra rằng, khi bạn thêm mới hay thay đổi một chức năng, để đảm bảo chất lượng sản phẩm, bạn cần thực hiện lại toàn bộ các test case chứ không chỉ test case cho chức năng đó, người ta gọi là kiểm thử hồi quy (Regression Testing). Và khi thực hiện việc này một cách đúng đắn, bạn lại tiếp tục nhận ra rằng nếu làm bằng tay, sẽ rất tốn chi phí, bạn cần một phần mềm thực hiện việc này giúp bạn. Tôi khá là tin rằng Selenium, rồi các Testing Framework xuất hiện đều theo sự tiến hóa tự nhiên này. Và khi bạn có JenkinsTravis CI hay những phần mềm tương tự, giúp tự động hóa các quy trình trong phát triển phần mềm, khái niệm Automation Test mới ra đời.

Điểm chung của quá trình nói trên đó là việc tạo ra các test case như là output và đây cũng là thứ tạo ra giá trị gia tăng của bạn trong phần test. Nếu như trước đây, bạn chỉ phải lưu các test case vào excel và thực hiện nó một cách thủ công thì ngày nay, bạn cần phải tạo ra các TaaC (Test Case as a Code) kiểu như:

<?php
$I->visit('/login')
  ->fill('email', 'john@doe.com')
  ->fill('password', 'secret')
  ->click('Login')
  ->amOnPage('/dashboard')
  ->see('John Doe');

Nếu trong dự án của bạn, các test case đều được viết đầy đủ và cover các chức năng theo kiểu TaaC như trên thì, xin chúc mừng!

Ai sẽ phải viết test?

Câu hỏi “Dev thì có phải viết test không?” có lẽ là được đặt ra khá nhiều. Câu trả lời rất đơn giản, giống như khi bạn làm ra cái gì, bạn phải kiểm tra nó có hoạt động không, đương nhiên các developer phải viết test.

Theo tự nhiên, câu hỏi tiếp theo sẽ là “Vậy Dev sẽ viết test nào, bộ phận QA để làm gì vậy?”. Để trả lời câu hỏi này, chúng ta cần đi phân loại test.

Để phân loại, tôi nhớ đến kiến thức đã được học ở khoa CNTT, ĐHBKHN, phân loại theo phương thức tiếp cận: phương thức kiểm thử hộp đen (black-box testing) và phương thức kiểm thử hộp trắng (white-box testing).

Black-box testing, nôm na là cái hộp đen, bạn sẽ không cần quan tâm những gì xử lý trong cái hộp đen đó, chỉ cần cho đầu vào và xác nhận đầu ra, nghe khá giống với những gì với bộ phận QA độc lập thực hiện.

White-box testing, nôm na là cái hộp trắng, bạn sẽ cần quan tâm những gì xử lý trong hộp trắng đó, vì trắng nhìn xuyên qua mà. Nếu quan tâm tới cụ thể code được viết như thế nào, kiến trúc ra sao, nghe khá giống với những gì developer cần làm.

Với suy nghĩ đơn giản như vậy, tôi đã phải bật cười khi đọc trên JIRA (công ty tôi dùng JIRA bản quyền để quản lý dự án) có những task kiểu như “Viết unit test cho …” song hành cùng với “Viết automated test cho…” hay giật mình khi một “senior” 20 năm kinh nghiệm phân loại rằng bộ phận QA sẽ làm kiểm thử hộp trắng.

Để phân loại chi tiết hơn có khá nhiều cách, mỗi sách lại có một định nghĩa riêng, nói chung tất cả đều hợp lý tùy vào trường hợp cụ thể. Tuy nhiên, qua kinh nghiệm thực tế trong môi trường phát triển phần mềm ở Việt Nam, tôi ủng hộ một cách phân loại đơn giản nhưng có giá trị áp dụng thực tiễn: Black-box testing sẽ là Acceptance Testing do bộ phận QA thực hiện, White-box testing sẽ chia thành Unit Testing và Functional Testing do developer thực hiện.

Acceptance Testing

Acceptance Testing về cơ bản là mô phỏng các thao tác của người dùng sử dụng sản phẩm để xem kết quả người dùng nhận được có đúng như mong muốn không. Nó giống như việc test được mô tả ở phần đầu bài viết.

Suy cho cùng, dù bạn làm gì, mục tiêu của bạn vẫn luôn là làm hài lòng khách hàng, và tôi không nghĩ là khách hàng sẽ hài lòng với một sản phẩm chất lượng không chấp nhận được. Nếu được hỏi bắt đầu viết test từ đâu khi tiếp nhận maintain một dự án legacy, tôi sẽ trả lời là từ đây. Acceptance Testing là chốt chặn cho chất lượng sản phẩm bạn bàn giao khách hàng.

Ngày nay, thế giới đã cung cấp khá đầy đủ những công cụ “make tester’s life easier”, giúp bạn viết Acceptance Testing dễ dàng. Ví dụ tôi dùng Laravel Dusk để test chức năng cho phép người dùng đăng nhập thêm các SSH key, sau đây là hai case đơn giản cho chức năng này:

<?php
namespace Tests\Browser;
use App\User;
use Tests\DuskTestCase;
use Laravel\Dusk\Chrome;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class UserKeysTest extends DuskTestCase
{
    use DatabaseMigrations;
    
    protected $user;
    
    public function setUp()
    {
        parent::setUp();
        
        $this->user = factory(User::class)->create([
            'email' => 'john@example.com',
        ]);
    }
    /**
     * Test an user can add a ssh key.
     *
     * @return void
     */
    public function test_an_user_can_add_a_ssh_keys()
    {   
        $this->browse(function ($browser) {
            $browser->loginAs($this->user)
                ->visit('/user/keys/create')
                ->type('name', 'Macbook')
                ->type('public_key', 'ssh-rsa xxx')
                ->press('Create')
                ->assertPathIs('/user/keys')
                ->assertSee('Macbook');
        });
    }
    
    /**
     * Test name is required.
     *
     * @return void
     */
    public function test_name_is_required()
    {
        $this->browse(function ($browser) {
            $browser->loginAs($this->user)
                ->visit('/user/keys/create')
                ->type('public_key', 'ssh-rsa xxx')
                ->press('Create')
                ->assertSee('The name is required.');
        });
    }
}

Khi thực hiện Acceptance Testing, có những việc chưa hoặc khó mô tả bằng code, ví dụ kiểm tra tin nhắn OTP có được gửi về khi người dùng đăng nhập chẳng hạn, hay kiểm tra các chi tiết của giao diện sản phẩm, bộ phận QA vẫn phải thực hiện thủ công. Tên gọi User Acceptance Testing (hay Beta Testing) được sử dụng để chỉ việc kiểm thử chi tiết với vai trò người dùng cuối như vậy.

Nếu trong dự án bạn đang làm, Acceptance Testing đơn giản chỉ là vài dòng Excel, hay thậm chí là một thứ xa xỉ, tôi nghĩ là sự cải tiến là cấp bách, vì như vậy có nghĩa là bạn khó đảm bảo được chất lượng sản phẩm, và đang tụt hậu so với thế giới nhiều năm rồi.

Unit testing

Unit testing bản thân nó là cái gì đó khá trừu tượng vì tùy dự án, bạn có thể quy định “unit” ở mức độ nào. Thông thường, “unit” sẽ được quy định giới hạn trong một hàm (method) hay một class. Trong một dự án web thực tế, tùy vào kinh nghiệm và kĩ năng, developer sẽ đưa ra quyết định viết các Unit testing như thế nào cho phù hợp, có thể test đầu vào đầu ra của hàm, hay kiểm tra một phần hoặc toàn bộ class.

Một ví dụ unit testing đơn giản của bài toán Fizz buzz, cho đầu vào là 3, kiểm tra đầu ra của hàm fizzbuzz() có là fizz không:

<?php
use PHPUnit\Framework\TestCase;
class FizzBuzzTest extends TestCase
{
    // ...
    
    function test_3_is_fizz()
    {
        $this->assertEquals(fizzbuzz(3), 'fizz');
    }
    
    // ...
}

Hay trong một side project, tôi viết một unit testing thể hiện việc model Usercó quan hệ 1-n với model Server:

<?php
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class UserTest extends TestCase
{
    use DatabaseMigrations;
    
    protected $user;
    
    public function setUp()
    {
        parent::setUp();
        
        $this->user = create('App\User');
    }
    
    public function test_an_user_has_servers()
    {
        $this->assertInstanceOf(
            'Illuminate\Database\Eloquent\Collection', $this->user->servers
        );
    }
}

Nếu cần thêm các ví dụ, bạn có thể tham khảo thêm Unit testing được viết trong các thư viện mã nguồn mở trên Github.

Functional Testing

Functional Testing, hay cá nhân tôi hay gọi là Feature Testing, đúng với nghĩa của nó, test chức năng với các xử lý business logic bên trong chức năng đó đồng thời cô lập (mock) với các thành phần bên ngoài khác.

Ví dụ cụ thể, trong một side project, tôi cần thêm API cho phép user thêm mới một server, luồng xử lý là như sau:

  • Đăng nhập bằng một user.
  • Gửi POST request đến URL /api/servers với payload {"name": "small-snowflake", "ip_address": "1.1.1.1"}.
  • Response trả về thành công (có HTTP code là 200).
  • Đọc public key của bản thân web server.
  • Thêm mới bản ghi vào bảng servers, lưu thông tin server và public key vừa đọc được.
  • Gọi queue job AddServerToKnownHostsFile (để thêm địa chỉ IP của server vào known_hosts file).
  • Fire sự kiện RefreshServers.

Đọc public key của bản thân web server là hành động tương tác với bên ngoài, cái tôi thực sự cần chỉ là public key để lưu vào DB, cho nên tôi sẽ cô lập việc đọc này, giả định nó chạy đúng và trả về chuỗi public key.

Gọi queue job AddServerToKnownHostsFile là một chức năng bên ngoài, tôi giả định là nó chạy đúng và chỉ cần quan tâm là job này có được gọi hay không. Tương tự với fire sự kiện RefreshServers. Bản thân job AddServerToKnownHostsFile hay sự kiện RefreshServers có thể được test trong các unit testing hay functional testing độc lập khác.

Tôi có thể viết functional testing của chức năng này như sau:

<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Events\RefreshServers;
use Illuminate\Support\Facades\File;
use App\Jobs\AddServerToKnownHostsFile;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class CreateServerTest extends TestCase
{
    use DatabaseMigrations;
    
    protected $user;
    
    public function setUp()
    {
        parent::setUp();
        
        $this->user = create('App\User');
    }
    
    public function test_an_user_can_create_new_servers()
    {
        File::shouldReceive('get')
            ->once()
            ->andReturn('public-key');
        
        $this->expectsJobs(AddServerToKnownHostsFile::class);
        
        $this->expectsEvents(RefreshServers::class);
        
        $this->actingAs($this->user, 'api')
            ->postJson('/api/servers', [
                'name' => 'small-snowflake',
                'ip_address' => '1.1.1.1',
            ])
            ->assertStatus(200);
        
        $this->assertDatabaseHas('servers', [
            'user_id' => $this->user->id,
            'name' => 'small-snowflake',
            'ip_address' => '1.1.1.1',
            'public_key' => 'public-key',
        ]);
    }
}

Kết luận

Một khi dự án của bạn thực sự có các TaaC, tôi khá tin tưởng rằng năng suất của dự án tăng lên nhiều lần cả về chất lượng, chi phí, lẫn khả năng delivery. Khi bạn sử dụng Jenkins để tự động quy trình thực hiện các TaaC đó, bạn sẽ có Test Automation. Khi bạn có Test Automation, bạn sẽ có khả năng kiểm soát rủi ro khi phải giao hàng sớm và thường xuyên cho khách hàng. Và khi bạn có thể làm vậy, bạn đã có một trong những điều kiện tiên quyết để trở nên Agile, Agile thực sự chứ không phải khuôn sáo, vẽ vời lý thuyết như bán hàng đa cấp.

Về quy trình phát triển phần mềm, khi bạn có các TaaC, bạn sẽ nhận ra rằng, việc viết test trước sẽ giúp bạn có cái nhìn rõ ràng hơn về yêu cầu khách hàng, bạn có Test-Driven Development chứ không phải Test is Dump and Die nữa :).

Thực sự viết được các TaaC cho một dự án, không phải điều dễ dàng, nếu không muốn nói là khó, đòi hỏi hiểu biết về kiến trúc và thiết kế tổng quan, hiểu yêu cầu của sản phẩm, viết code testable, các kĩ thuật mocking. Để làm được cần kiến thức cơ bản tốt, thực hành và rèn luyện kĩ năng, với mindset tập trung vào việc làm ra những sản phẩm chất lượng, liên tục cải tiến năng suất và chứng minh điều đó qua sự hài lòng của khách hàng. Chứ đừng như một số “senior” tôi vẫn hay gặp, *talk* như là expert về những thứ mà chỉ biết qua google, không có kĩ năng và kinh nghiệm làm bao giờ, và khi training cho các fresher, junior thì làm liên tưởng đến những giáo viên tiếng anh ngày xưa dạy học sinh phát âm sai vì ngay bản thân mình cũng không biết phát âm thế nào. Nếu không, thì tôi không nghĩ chúng ta có thể sớm thoát khỏi được cái mác nhân công giá rẻ, mặt bằng chất lượng tệ hại và mãi là vùng trũng của phát triển phần mềm.

*talk*: nó mang sắc thái trong câu nói nổi tiếng của Linus Torvalds: “Talk is cheap. Show me the code”.

Nguồn: medium.com