Monday, September 2, 2019

DEVELOPER HỌC NHỮNG NGÔN NGỮ LẬP TRÌNH – CÔNG NGHỆ GÌ CHO DỄ TÌM VIỆC?

https://toidicodedao.com/2019/07/23/hoc-ngon-ngu-lap-trinh-cong-nghe-de-tim-viec/comment-page-1/#comment-16171
Dạo gần đây, mình hay nhận được nhiều câu hỏi dạng như:
  • Anh ơi học cái A,B,C này ra có kiếm được việc làm không
  • Em thích học Big Data, Machine Learning này nọ có hot không
  • Trường em dạy cái A,B,C đi làm người ta xài nhiều không
Do vậy, mình viết bài này để chia sẻ về những ngôn ngữ/công nghệ lập trình mà các bạn nên học để dễ tìm việc làm nha.
Giữa một rừng ngôn ngữ/công nghệ, biết học gì bây giờ!

Note: Bài viết này được viết vài năm 2019, sau 5/10 năm nữa có thể công nghệ sẽ khác thì lúc đó mình viết bài khác sau nhe!

Học thứ trong trường dạy có đi làm được không?

Đương nhiên là … không!
Nói đùa vậy thôi. Thật ra, trường Đại Học chỉ dạy bạn những kiến thức rất nền tàng (thuật toán, nhập môn lập trình) để bạn có thể tự tìm hiểu, tự học thêm. Những kiến thức đó là rất cần thiết, nhưng … chưa đủ để đi làm.
Đơn giản là vì công nghệ liên tục được thay đổi và cải tiến, nên trường học khó có thể thay đổi giáo trình để theo kịp! Do vậy, đừng mơ mộng rằng, học những này trong trường có thể áp dụng khi đi làm, vì những thứ trong trường dạy đã khá … cũ, ít ai dùng tới nữa.
Đừng nghĩ học xong kiến thức trong trường là đủ đi làm nha!

REPORT THIS AD

Thời xưa, trường mình dạy C# có dạy WinForm, WebForm, Java thì có J2EE bản cũ rích luôn. Tuy đi làm không dùng, nhưng những kiến thức về Event, Layout, Request/Response vẫn rất hữu dụng khi mình học framework khác.
Do vậy, đừng học theo trường dạy, mà hãy xem thị trường cần cái gì! Đừng thấy trường dạy C++, Java, học xong ra cắm đầu tìm việc C++, Java nhé.
Thay vào đó, bạn hãy tự xem các mẩu tin tuyển dụng, xem họ dùng công nghệ gì, tuyển yêu cầu ra sao. Sau đó tự học dựa vào những yêu cầu đó, khả năng có việc sẽ cao hơn nhé.

Thực trạng về mấy thức “cao siêu” như Machine Learning – AI – Blockchain

Gần đây, báo đài hay đưa tin về thời đại Cá Mè 4.0 ở Vịt Nôm, các công nghệ tương lai như AI, Blockchain, Machine Learning này nọ sẽ ngày càng hot.
Để mình dội cho bạn 1 gáo nước lạnh cho các bạn tỉnh mộng ra. Đây là số lượng những công việc về Machine Learning/AI/Blockchain trên ITviec.
Cả nước chỉ có tầm … 5 vị trí blockchain, phía dưới làm ui-ux, web designer
Ghi 31 nhưng đọc kĩ chắc được tầm 10-15 job là làm về machine learning/AI

REPORT THIS AD

Con số này thật ra không phải ít, nhưng hãy thử so sánh với những thứ … tầm thường, nghe không hot như Java, PHP, Mobile v…v
Đấy, học cái gì dễ tìm việc hơn thì … các bạn xem là biết rồi nhỉ!
REPORT THIS AD


Ủa, tại sao mấy cái to tát hot hot như AI v…v mà nhu cầu tuyển ít quá vậy? Thật sự thì, ở Việt Nam, số lượng công ty outsource vẫn còn nhiều, và các công ty product cũng … không quá cần AI-ML trừ khi sản phẩm của họ chuyên về AI/ML.
Do vậy, hầu như chỉ các viện nghiên cứu, các công ty lớn có nhiều data, có vốn thì mới có tiền thuê team Research để nghiên cứu về AI, Data.
Ở Singapore bên mình cũng vậy, job tuyển software engineer thì tràn lan, nhưng tuyển data scientist/data engineer/AI thì khá ít. Hầu như họ ưu tiên những ứng viên có bằng Thạc Sĩ, có kinh nghiệm nghiên cứu, vì mảng này cần nghiên cứu nhiều.
Đấy, túm cái quần lại là nếu bạn muốn việc nhiều, dễ kiếm thì nên né mấy cái như AI/ML ra. Còn nếu thật sự đam mê, bạn có thể học lên cao, tham gia Kaggle, học kĩ Toán …
Mảng này tuyển ít nhưng tuyển người giỏi, lương chắc chắc cao hơn mặt bằng chung của software engineer luôn.
Data Engineer/Machine Learning tuyển ít nhưng lương không hề thấpnha

Những thứ ăn chắc mặc bền trong tầm 5 năm nữa

Đấy, ở đoạn trên thì bạn cũng thấy rồi. Muốn ăn chắc mặc bền thì có thể học Web/Mobile hoặc lập trình nhúng!
REPORT THIS AD

Web và Mobile đã hot 5-10 năm nay, đến nay nó vẫn sống nhăn. Trong 5-10 năm nữa, khả năng Web và mobile hết thời cũng … khá là thấp.
Các bạn có thể Google những ngôn ngữ/công nghệ mà mình nhắc đến phía dưới nha.
1. Mảng Mobile thì ở Việt Nam hiện nay tuyển cả iOS, Androidlẫn Hybrid:
  • iOS thì lương nhỉnh hơn 1 tí, nhưng không chênh lệch nhiều. Đa phần các dự án dùng Objective C (công nghệ cũ) hoặc Swift (công nghệ mới hơn)
  • Android thì ngày xưa người ta dùng Java, gần đây một số dự án mới dùng Kotlin vì nó … ngắn gọn hơn. Tuy nhiên job Javavẫn chiếm đa số, số lượng Kotlin khá ít
  • Hybrid: Viết ứng dụng bằng ngôn ngữ khác, sau đó build ra ứng dụng chạy trên cả 2 nền tảng. Gần đây thì React Nativeđang khá hot (do web devleoper cũng có thể code được). Ngoài ra còn có Xamarin, Ionic nhưng không quá phổ biến
Cá nhân mình thấy React Native khá phổ biến, do mấy ông developer web cũng qua làm Mobiled dc lun

2. Mảng web ở Việt Nam khá đủ thể loại. Hiện tại thì cả back-end lẫn front-end đều đang tuyển. Bạn nào chưa rõ có thể xem lại bài: Cơ bản lập trình web , front-end và back-end
2.1 Back-end: Phổ biến nhất vẫn là bộ 3 PHP, C#, Java. Mỗi ngôn ngữ sẽ có khoảng 1, 2 framework phổ biến đi kèm.
    • PHP thì có Laravel, Symfony hoặc CodeIgniter. Ngoài ra có thể họ không dùng framework mà dùng platform như WordPress, Magneto
    • C# thì phổ biến nhất vẫn là ASP .NET MVC hoặc ASP .NET Core, ít nơi vẫn còn dùng WebForm
    • Java thì ở VN phổ biến vẫn là Spring và J2EE
    • Ngoài ra, còn có 1 số ngôn ngữ back-end ít phổ biến hơn như Python, Ruby, NodeJS. Cũng có vài công ty tuyển nhưng không nhiều!
    • Học ngôn ngữ/framework nào thì các bạn nên học luôn ORM đi kèm với nó. VD bên C# thì có Entity Framework, Java có Hibernate…
Ở Việt Nam thì PHP, C#, Java vẫn là 3 ngôn ngữ phổ biến nhất
REPORT THIS AD

2. 2 Front-end: Để làm tốt front-end, bạn cần học thật vững JavaScript trước khi nhắm đến các framework. Phổ biến nhất thì vẫn là ReactJS và Angular (bản 2 trở lên).
    • Số lượng job React nhiều vl, đâu đâu cũng tuyển.
    • Đâu đó có 1 số công ty tuyển AngularJS (Angular 1) để bảo trì, hoặc có 1 số nơi cũng tuyển VueJS
    • Cá nhân mình thấy mấy cái framework này cũng na ná nhau, vì đều là JS cả. Bản thân mình biết AngularJS, VueJS, ReactJS. Anh em có thể học nhiều framework, chuyển qua chuyển lại cũng không khó!
Lượng Job ReactJS nhiều gấp đôi BlockChain + Machine Learning cộng lại. Buồn … cười chưa!

3. Mảng lập trình nhúng: Vi mạch, thiết bị điện tử v…v thì mình không làm, cũng không quen mấy ông bên đấy nên ko nói tới.

Tạm kết

Trong bài viết này, mình đã chia sẻ về các công nghệ đang được sử dụng, cũng như những công nghệ các bạn nên học nếu muốn dễ tìm việc, lương ổn. (Đồng thời cũng tạt 1 gáo nước lạnh cho những bạn thích làm về AI, Machine Learning luôn.)
Đấy, túm cái váy lại là: Muốn biết nên học cái gì thì cứ xem thị trường cần gì, tuyển gì, sau đó cắm đầu vào học là được nhé. Chúc các bạn may mắn!

Sunday, June 9, 2019

Markdown Cheatsheet

This is intended as a quick reference and showcase. For more complete info, see John Gruber's original spec and the Github-flavored Markdown info page.
Note that there is also a Cheatsheet specific to Markdown Here if that's what you're looking for. You can also check out more Markdown tools.
Table of Contents

Headers

# H1
## H2
### H3
#### H4
##### H5
###### H6

Alternatively, for H1 and H2, an underline-ish style:

Alt-H1
======

Alt-H2
------

H1

H2

H3

H4

H5
H6
Alternatively, for H1 and H2, an underline-ish style:

Alt-H1

Alt-H2

Emphasis

Emphasis, aka italics, with *asterisks* or _underscores_.

Strong emphasis, aka bold, with **asterisks** or __underscores__.

Combined emphasis with **asterisks and _underscores_**.

Strikethrough uses two tildes. ~~Scratch this.~~
Emphasis, aka italics, with asterisks or underscores.
Strong emphasis, aka bold, with asterisks or underscores.
Combined emphasis with asterisks and underscores.
Strikethrough uses two tildes.
Scratch this.

Lists

(In this example, leading and trailing spaces are shown with with dots: ⋅)
1. First ordered list item
2. Another item
⋅⋅* Unordered sub-list. 
1. Actual numbers don't matter, just that it's a number
⋅⋅1. Ordered sub-list
4. And another item.

⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown).

⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.⋅⋅
⋅⋅⋅Note that this line is separate, but within the same paragraph.⋅⋅
⋅⋅⋅(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)

* Unordered list can use asterisks
- Or minuses
+ Or pluses
  1. First ordered list item
  2. Another item
  • Unordered sub-list.
  1. Actual numbers don't matter, just that it's a number
  2. Ordered sub-list
  3. And another item.
    You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown).
    To have a line break without a paragraph, you will need to use two trailing spaces.
    Note that this line is separate, but within the same paragraph.
    (This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)
  • Unordered list can use asterisks
  • Or minuses
  • Or pluses

Links

There are two ways to create links.
[I'm an inline-style link](https://www.google.com)

[I'm an inline-style link with title](https://www.google.com "Google's Homepage")

[I'm a reference-style link][Arbitrary case-insensitive reference text]

[I'm a relative reference to a repository file](../blob/master/LICENSE)

[You can use numbers for reference-style link definitions][1]

Or leave it empty and use the [link text itself].

URLs and URLs in angle brackets will automatically get turned into links. 
http://www.example.com or <http://www.example.com> and sometimes 
example.com (but not on Github, for example).

Some text to show that the reference links can follow later.

[arbitrary case-insensitive reference text]: https://www.mozilla.org
[1]: http://slashdot.org
[link text itself]: http://www.reddit.com
Or leave it empty and use the link text itself.
URLs and URLs in angle brackets will automatically get turned into links. http://www.example.comor http://www.example.com and sometimes example.com (but not on Github, for example).
Some text to show that the reference links can follow later.

Images

Here's our logo (hover to see the title text):

Inline-style: 
![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")

Reference-style: 
![alt text][logo]

[logo]: https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 2"
Here's our logo (hover to see the title text):
Inline-style: alt text
Reference-style: alt text

Code and Syntax Highlighting

Code blocks are part of the Markdown spec, but syntax highlighting isn't. However, many renderers -- like Github's and Markdown Here -- support syntax highlighting. Which languages are supported and how those language names should be written will vary from renderer to renderer. Markdown Here supports highlighting for dozens of languages (and not-really-languages, like diffs and HTTP headers); to see the complete list, and how to write the language names, see the highlight.js demo page.
Inline `code` has `back-ticks around` it.
Inline code has back-ticks around it.
Blocks of code are either fenced by lines with three back-ticks ```, or are indented with four spaces. I recommend only using the fenced code blocks -- they're easier and only they support syntax highlighting.
```javascript
var s = "JavaScript syntax highlighting";
alert(s);
```
 
```python
s = "Python syntax highlighting"
print s
```
 
```
No language indicated, so no syntax highlighting. 
But let's throw in a <b>tag</b>.
```
var s = "JavaScript syntax highlighting";
alert(s);
s = "Python syntax highlighting"
print s
No language indicated, so no syntax highlighting in Markdown Here (varies on Github). 
But let's throw in a <b>tag</b>.

Tables

Tables aren't part of the core Markdown spec, but they are part of GFM and Markdown Heresupports them. They are an easy way of adding tables to your email -- a task that would otherwise require copy-pasting from another application.
Colons can be used to align columns.

| Tables        | Are           | Cool  |
| ------------- |:-------------:| -----:|
| col 3 is      | right-aligned | $1600 |
| col 2 is      | centered      |   $12 |
| zebra stripes | are neat      |    $1 |

There must be at least 3 dashes separating each header cell.
The outer pipes (|) are optional, and you don't need to make the 
raw Markdown line up prettily. You can also use inline Markdown.

Markdown | Less | Pretty
--- | --- | ---
*Still* | `renders` | **nicely**
1 | 2 | 3
Colons can be used to align columns.
TablesAreCool
col 3 isright-aligned$1600
col 2 iscentered$12
zebra stripesare neat$1
There must be at least 3 dashes separating each header cell. The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown.
MarkdownLessPretty
Stillrendersnicely
123

Blockquotes

> Blockquotes are very handy in email to emulate reply text.
> This line is part of the same quote.

Quote break.

> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote. 
Blockquotes are very handy in email to emulate reply text. This line is part of the same quote.
Quote break.
This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can putMarkdown into a blockquote.

Inline HTML

You can also use raw HTML in your Markdown, and it'll mostly work pretty well.
<dl>
  <dt>Definition list</dt>
  <dd>Is something people use sometimes.</dd>

  <dt>Markdown in HTML</dt>
  <dd>Does *not* work **very** well. Use HTML <em>tags</em>.</dd>
</dl>
Definition list
Is something people use sometimes.
Markdown in HTML
Does *not* work **very** well. Use HTML tags.

Horizontal Rule

Three or more...

---

Hyphens

***

Asterisks

___

Underscores
Three or more...

Hyphens

Asterisks

Underscores

Line Breaks

My basic recommendation for learning how line breaks work is to experiment and discover -- hit <Enter> once (i.e., insert one newline), then hit it twice (i.e., insert two newlines), see what happens. You'll soon learn to get what you want. "Markdown Toggle" is your friend.
Here are some things to try out:
Here's a line for us to start with.

This line is separated from the one above by two newlines, so it will be a *separate paragraph*.

This line is also a separate paragraph, but...
This line is only separated by a single newline, so it's a separate line in the *same paragraph*.
Here's a line for us to start with.
This line is separated from the one above by two newlines, so it will be a separate paragraph.
This line is also begins a separate paragraph, but...
This line is only separated by a single newline, so it's a separate line in the same paragraph.
(Technical note: Markdown Here uses GFM line breaks, so there's no need to use MD's two-space line breaks.)

YouTube Videos

They can't be added directly but you can add an image with a link to the video like this:
<a href="http://www.youtube.com/watch?feature=player_embedded&v=YOUTUBE_VIDEO_ID_HERE
" target="_blank"><img src="http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg" 
alt="IMAGE ALT TEXT HERE" width="240" height="180" border="10" /></a>
Or, in pure Markdown, but losing the image sizing and border:
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg)](http://www.youtube.com/watch?v=YOUTUBE_VIDEO_ID_HERE)

Referencing a bug by #bugID in your git commit links it to the slip. For example #1.

Thursday, May 16, 2019

Roadmap to becoming a web developer in 2019

Below you find a set of charts demonstrating the paths that you can take and the technologies that you would want to adopt in order to become a frontend, backend or a devops. I made these charts for an old professor of mine who wanted something to share with his college students to give them a perspective; sharing them here to help the community.
If you think that these can be improved in anyway, please do suggest.

🎉 We are working on a more concise version of these roadmaps 🎉 
Keep your eyes on roadmap.sh for the details!

The purpose of these roadmaps is to give you an idea about the landscape and to guide you if you are confused about what to learn next and not to encourage you to pick what is hip and trendy. You should grow some understanding of why one tool would better suited for some cases than the other and remember hip and trendy never means best suited for the job

Introduction

Web Developer Roadmap Introduction

Frontend Roadmap

Frontend Roadmap

Back-end Roadmap

Back-end Roadmap

DevOps Roadmap

DevOps Roadmap

🚦 Wrap Up

If you think any of the roadmaps can be improved, please do open a PR with any updates and submit any issues. Also, I will continue to improve this, so you might want to watch/star this repository to revisit.

Thursday, January 3, 2019

Survey and Summary

stackoverflow developer survey
https://insights.stackoverflow.com/survey
github most starred repo
https://github.com/search?q=stars%3A%3E0&s=stars&type=Repositories
github octoverse
https://octoverse.github.com/
github trending
https://github.com/trending