Tìm kiếm Blog nà


Breaking News
Showing posts with label Kỹ Thuật Lập Trình. Show all posts
Showing posts with label Kỹ Thuật Lập Trình. Show all posts

Saturday, October 1, 2016

Nên học một hay nhiều ngôn ngữ

Gần đây mình nhận được một số câu hỏi về chuyện “Nên tập trung vào 1 ngôn ngữ hay là học nhiều ngôn ngữ”. Đây là một vấn đề gây khá nhiều tranh cãi trong cộng đồng lập trình viên.
Thật ra, không có câu trả lời đúng cho câu hỏi này! Trong nội dung bài viết, mình sẽ phân tích những điểm lợi/hại của mỗi lựa chọn. Tuy nhiên, lựa chọn cuối cùng vẫn là do bản thân các bạn nhé.
Thật ra, ngay từ đầu các bạn đã đặt sai câu hỏi! Thay vì hỏi “nên học một hay nhiều ngôn ngữ”, các bạn nên hỏi là “nên phát triển bản thân theo chiều rộng (generalist) hay chiều sâu (specialist)?”.

Thế nào là biết rộng? Biết rộng thì được gì?
Nhiều bạn lầm tưởng rằng chỉ biết sử dụng nhiều ngôn ngữ/công nghệ, mình sẽ thành người biết rộng. Điều này chỉ đúng một phần thôi.
Học rộng có nghĩa là: ngoài việc biết sử dụng nhiều ngôn ngữ/công nghệ, bạn còn phải biết một số thứ ngoài lề khác (lấy requirement, thiết kế giao diện, cài đặt server). Nói cho oách là siêu nhân ôm đủ việc, nói mỉa mai tức thì là ku-li gì cũng làm.
Các cụ có câu “một nghề cho chín còn hơn chín nghề”, nhưng câu này có vẻ không đúng lắm với ngành IT. Khi xây dựng một hệ thống phần mềm, nếu có kiến thức rộng, ta sẽ dễ nắm được cách toàn bộ hệ thống vận hành, giú dễ bảo trì, sửa chữa khi có lỗi xảy ra hơn. Ngoài ra, nếu biết rộng, bạn sẽ có nhiều cơ hội việc làm hơn.
Hiện tại, biết rộng đang dần trở thành xu hướng. Bên cạnh Front-end developer, Back-end developer, nay ta có thêm Full-stack developer. Trước kia Dev (phát triển phần mềm) và Operation (vận hành, bảo trì sản phẩm) được tách riêng ra. Gần đây thì lại gộp luôn là DevOps, developer ngoàiviệc code còn phải biết thêm về setup hệ thống.

Thế nào là biết sâu? Biết sâu thì được gì?
Nhiều bạn biết sâu tức là tập trung thời gian vào 1 ngôn ngữ, không học những thứ khác. Thật ra, biết sâu yêu cầu cao hơn nhiều! Biết sâu tức là biết tường tận tường tận mọi ngóc ngách của ngôn ngữ/công nghệ/lĩnh vực nào đó.
Lấy ví dụ JavaScript, biết rộng tức là bạn có thể sử dụng nhiều framework như AngularJS, VueJS, React, … Biết sâu thì đòi hỏi cao hơn. Ngoài việc học/sử dụng framework, bạn còn phải biết về các khái niệm execution stack, lexical scope, closure,… trong Javascript, cách tổ chức code cho 1 project JS lớn, cách optimize khi code chạy chậm.
Nếu thật sự chuyên sâu một ngôn ngữ/công nghệ nào thì bạn sẽ được nhiều công ty săn đón, với lương khá cao. Cứ hỏi mấy bác senior C++ 5-10 năm trở lên xem lương bao nhiêu là biết.
Tại sao lại vậy? Hãy tưởng tượng bạn đang thèm ăn bò bít tết, bạn sẽ chọn nhà hàng A “Phục vụ đầy đủ các món Á Âu”, hay nhà hàng B “Chỉ chuyên bò bít tết”. Dĩ nhiên là nhà hàng B phải không. Nếu cần tuyển chuyên gia cho 1 mảng nào đó, các công ty sẽ ưu tiên người biết sâu hơn.

Tất nhiên bạn cũng sẽ có gặp một số rủi ro. Do chỉ chuyên sâu một ít ngôn ngữ nên có thể bạn sẽ khó tìm được công việc như ý hơn. Ngoài ra, nếu ngôn ngữ/công nghệ của bạn… tử ẹo thì bạn phải bỏ thời gian ra học và chuyên sâu thứ khác.
Ví dụ, các bác chuyên gia Flash và Silverlight (2 công nghệ đã tử ẹo) sẽ rất khó tìm việc, nhưng nếu tìm được thì lương khá cao vì bây giờ ít người rành 2 cái đấy.
Vậy người coder phải làm sao?
Như mình đã nói, bài viết chỉ phân tích và định hướng chứ không thể trả lời cho bạn được. Lời khuyên hữu ích nhất mà mình có thể đưa ra là:
Hãy phát triển kiến thức theo hình chữ T. Học rộng trước, sau đó mới chuyên sâu vào một lĩnh vực.
Kiến thức dạng chữ T tức là bạn sẽ tập trung phát triển kiến thức nền tảng trên nhiều lĩnh vực, sau đó tập trung chuyên sâu vào một ít lĩnh vực mà mình thấy hứng thú.
Ảnh minh họa về phát triển kĩ năng
Với các bạn sinh viên, ở giai đoạn đầu, bạn sẽ không biết mình giỏi cái gì, yếu cái gì, cần tập trung vào thứ gì. Vậy thì cứ học rộng trước đi đã. Khi đã có chút kinh nghiệm với nhiều ngôn ngữ/công nghệ, bạn sẽ dễ lựa chọn hướng phát triển cho bản thân hơn.
Một điều cần lưu ý nữa là nếu bạn đam mê startup thì nên ưu tiên “biết rộng”. Ở giai đoạn đầu khởi nghiệp, nhân sự ít, lập trình viên phải có khả năng đa nhiệm, làm đủ việc. Phát triển sản phẩm startup đòi hỏi bạn phải thông tuệ nhiều thứ để vận hành hệ thống trơn trụ. Ngược lại, nếu đầu quân cho các công ty lớn, họ sẽ ưu tiên người có kiến thức tập trung, hiểu sâu vấn đề.

Kết luận

Điều quan trọng nhất là bạn phải liên tục học tập, biết rộng cũng được, biết sâu cũng được. Nhiều bạn phân vân không biết nên học rộng hay sâu do sợ phí thời gian, kết quả là họ … đứng im một chỗ, không tiến bộ gì cả.
Nếu bạn vẫn chưa rõ mình muốn gì, cứ học đi, đừng ngại tốn thời gian. Cứ tiến về phía trước, rồi sẽ có một con đường mở ra cho bạn.
Bonus – Về việc chọn ngôn ngữ
Hãy xem ngôn ngữ như con gái. Một developer giỏi phải biết nhiều ngôn ngữ. Một thanh niên tốt phải có nhiều bạn gái!
Bạn sẽ cần một em gái đảm đang làm vợ, một em dễ thương làm bồ nhí, một số em dễ chăn để chịch khi cần.
Ngôn ngữ cũng thế:
  • Chọn một em mạnh mẽ, nhiều người dùng  (C#, Java) làm ngôn ngữ chính, tập trung đối tốt với em này như vợ.
  • Chọn một em khác nổi tiếng để làm bồ nhí (JavaScript), dành nhiều thời gian tán tỉnh chiều chuộng.
  • Chọn một số em nhanh gọn dễ dãi làm rau (PHP, JavaScript), dùng để code mấy dự án nho nhỏ, lặt vặt.
Anh giai trong hình biết 4 ngôn ngữ, em tóc vàng ngu ngu chắc là PHP
À, mấy cái ví dụ về rau, vợ và bồ nhí là theo góc nhìn của mình thôi nhé. Tùy theo sở thích mà bạn có thể chọn PHP, JavaScript làm vợ và C++ làm rau. Các bạn nên chung thủy, dành nhiều thời gian cho vợ nhà, nhưng nhớ ngó nghiêng các em hàng xóm và tình hình thế giới ra sao nhé.
Một số góc nhìn của các developer khác:
Tác giả Nguyễn Huy Hoàng
Nguồn: toidicodedao
Read more ...

Lập trình viên có cần học đại học hay không?





Dạo gần đây mình hay gặp một số topic kiểu “Cảm thấy mất định hướng khi học Đại học”, “Liệu em có nên bỏ Đại Học hay không?”, “Kiến thức Đại học toàn thứ vô bổ!”. Các topic này cho thấy nhiều bạn sinh viên đang cảm thấy hoang mang về giá trị của việc học đại học.
Do vậy, mình viết bài này để phân tích những cái lợi của việc học Đại Học, giúp các bạn trẻ vững tin hơn trên con đường đã chọn.
Nguyên nhân gây hoang mang
Đa phần nguyên nhân làm các bạn sinh viên cảm thấy mất phương hướng khi học ĐH là: Chương trình học có khá nhiều môn vô bổ như Toán Lý Hóa Đại Cương, Tư tưởng Mác-Lê-Minh, … Chương trình học thì khá cũ và nặng lý thuyết, các môn lập trình thì quanh đi quẩn lại chỉ có C, C++, làm việc với console.
Trong khi đó, những kiến thức thực tế, cần thiết để đi làm thì lại ít được dạy (Các bạn có thể xem thêm ở series Những điều đại học không dạy bạn). Nhiều bạn cảm thấy mình tốn phí khá nhiều thời gian học mà chỉ được học được những điều vô bổ!!
Mặt khác, báo chí lúc nào cũng rất khoái lăng xê các tấm gương “Bỏ ĐH mở công ty thu nhập trăm triệu” để làm lung lay tinh thần các em sinh viên. Lẽ ra báo chí nên đưa một số vụ việc như “Nghỉ đại học, lái xe ôm, làm thợ hồ. Tốt nghiệp Đại Học, công việc ổn định lương chục triệu” thì mọi người sẽ có cái nhìn khách quan hơn.
Ngoài ra, các bạn cũng đừng nghe các thánh phán: “Bill Gates và Mark Zuckerberg bỏ ĐH vẫn thành công đấy thôi!”. Người ta bỏ ĐH Harvard nhé, các bạn có thể ráng vào Harvard rồi bỏ để thử vận may xem sao.
Giá trị của bốn năm ĐH
Thật ra, bốn năm ĐH của bạn cũng không đến nổi vô bổ như bạn tưởng tượng đâu, chúng sẽ cho bạn những điều sau:
  • Khả năng tư duy: Các môn Toán, Lý, Hóa Đại Cương khó khăn, thoạt nhìn có vẻ vô bổ. Thật ra là chúng … vô bổ thật, vì ta cũng ít áp dụng khi làm việc. Tuy vậy, việc tập trung giải quyết những bài toán này sẽ rèn cho chúng ta khả năng tu duy, khả năng tiếp cận vấn đề. Chúng rất hữu ích trên con đường nghề nghiệp sau này.
  • Khả năng đọc-viết: Học ĐH, bạn sẽ phải đọc vô sô tài liệu phức tạp, viết mấy bài luận. Những kỉ năng đọc viết này sẽ đi theo bạn tới tận sau này.
  • Khả năng tự học: Đây là một trong các kĩ năng quan trọng nhất trong ngành phần mềm. Ở Đai Học, các thầy cô sẽ không chỉ dẫn tận tay như cấp 3, đòi hỏi bạn phải cố gắng nhiều hơn.
  • Kiến thức nền tảng: Chương trình học ở Đai Học khá bài bản và có cấu trúc. Hầu như ĐH nào cũng dạy các kiến thức về: Hệ điều hành, Quy trình phần mềm, CSDL, Cấu trúc dữ liệu và Giải thuật, … Những kiến thức nền tảng này khá quan trọng. Đa phần các bạn tự học thường hay thiếu những kiến thức nền như thế này.
  • Bạn bè và quan hệ: Học ĐH, bạn sẽ được làm quen và làm việc chung với rất nhiều bạn bè. Điều này rèn luyện khả năng làm việc nhóm (cũng như khả năng chịu đựng) của bạn. Sau khi ra trường, các mối quan hệ với giáo viên, bạn bè rất quan trọng. Tranh thủ kiếm gấu giai đoạn này luôn nhé, ra trường khó tìm lắm.
  • Cơ hội việc làm: Bạn có thể tìm được một công việc với mức lương cao, môi trường tốt nhờ sợ giới thiệu của thầy giáo, bạn bè. Ngoài ra, các trường Đại Học cũng có liên kết với một số công ty, giúp bạn dễ dàng tìm cơ hội thực tập và xin việc.














Ngoài ra, hoàn thành 4 năm học sẽ giúp bạn có một tấm bằng Đại Học trong tay. Mảnh bằng này có giá trị gì không? Hãy xem phía dưới nhé.
Giá trị của tấm bằng ĐH
Hiện tại, đa phần các công ty phần mềm đều đỏi hỏi một tấm bằng ĐH, Cao Đẳng ngành CNTT. Không cần biết khả năng của bạn thế nào, tấm bằng ĐH là tấm giấy thông hành để được bạn vượt qua được vòng loại của bên Nhân Sự, vào vòng phỏng vấn để chứng tỏ khả năng của mình.
Nhiều bạn cũng hỏi mình: “Sao em thấy báo đăng nhiều đứa tốt nghiệp ĐH vẫn thất nghiệp đấy thôi, học làm vẹo gì?”. Tất nhiên, nếu bạn không có khả năng thì mảnh bằng Đại học cũng chỉ là tờ giấy lộn mà thôi. Nó chỉ giúp bạn vào được vòng Phỏng vấn, còn có tìm được việc làm hay không là tùy kinh nghiệm/khả năng của bạn.
Một lời khuyên khác cho các bạn: Ngoài Đại Học ra, các bạn có thể lựa chọn học Cao Đẳng FPT, Aptech. Chương trình học của các cơ sở này sát với thực tế hơn, có thể đi làm được ngay. Họ cũng hỗ trợ giới thiệu cơ hội thực tập và việc làm cho sinh viên. Bạn bè, đồng nghiệp mình cũng có nhiều người tốt nghiệp Cao Đẳng và vẫn đi làm thoải mái.
Một số nguồn khác tham khảo:
Nguồn: toidicodedao

Read more ...

Tuesday, July 26, 2016

1000 bài giải kỹ thuật lập trình của Thầy Nguyễn Tấn Trần Minh Khang từ Anh Sơn đẹp trai



Cuốn sách Bài Tập Kỹ Thuật Lập Trình (tập 1) của Thầy Nguyễn Tấn Trần Minh Khang mang lại giá trị rất lớn với những người mới bắt đầu học lập trình thông qua nguồn bài tập đa dạng, phong phú mà Thầy đã dày công soạn ra, đây có thể xem là quyển sách gối đầu của dân học CNTT. Những bài tập có trong sách sẽ giúp các Bạn luyện tập được TƯ DUY LẬP TRÌNH xuyên suốt trong quá trình học. Sách là sự kết hợp của 3 môn học (Nhập Môn Lập Trình + Kỹ Thuật Lập Trình + Cấu Trúc Dữ Liệu & Giải Thuật). Theo giang hồ đồn lại thì cuốn tập 2 chỉ có đệ tử chân truyền của bổn môn nắm giữ, chưa biết thực hư ra sao nhưng mãi vẫn không thấy tập 2 của Thầy.

Thời sinh viên Anh Sơn đã nỗ lực giải hết tất cả và chia sẻ lại cho những Bạn đi sau tham khảo, các Bạn xem Link bài giải trực tiếp tại đây: http://www.sondeptrai.com/2016/06/source-code-giai-1000-bai-tap-ky-thuat-lap-trinh-cua-thay-nguyen-tan-tran-minh-khang.html
Read more ...
Designed By hoclaptrinhcanban