AI – Trí thông minh nhân tạo đã tạo ra sự thay đổi mạnh mẽ đối với không gian nhân sự. Sức mạnh tiềm lực của AI là rất lớn. Chúng được biểu hiện rõ qua quá việc hợp thức hóa công tác tuyển dụng. Đồng thời, chúng hiện đang được áp dụng vào chu trình vận hành của các tổ chức/doanh nghiệp, đặc biệt là các công ty về công nghệ. Vậy phải làm thể nào để chuẩn hóa quy trình phát triển? Nắm bắt về cơ chế hoạt động của AI là điểm mấu chốt của vấn đề.
Cùng TopDev điểm qua 4 cách trong bài viết sau đây để tìm ra các giải pháp. Bạn có thể áp dụng chúng để tiếp cận nhằm đo lường về hiệu suất; đảm bảo về khả năng hoạt động của AI trong tổ chức của mình.
1. Đầu tư vào nghiên cứu và đổi mới những vấn đề liên quan đến AI
Trí tuệ nhân tạo – AI đã có những bước phát triển nhảy vọt trong những năm gần đây. Tuy vậy nếu đặt nó trong bối cảnh cạnh tranh thực tế với nhiều sản phẩm sáng kiến khoa học, giá trị của nó vẫn chưa rõ ràng. Dù vậy, không thể phủ nhận những tiềm năng và lợi thế mà AI đang sở hữu. Đó cũng là lý do tại sao có nhiều sự đầu tư nghiên cứu và đổi mới có liên quan đến AI nhiều đến vậy.
Thực tế cho thấy, AI khi được đầu tư với mức chi phí ổn định; định hướng áp dụng phù hợp với quy mô tổ chức, nó đã tạo ra một sự khác biệt đáng kể. Chẳng hạn, tổ chức sản xuất xe máy nổi tiếng Harley Davidson đã cải thiện dòng xe thế hệ đầu với2.930% trong ba tháng sau khi hãng triển khai hệ thống tiếp thị dựa trên AI có tên Albert.
2. Nhận ra tiềm năng và giáo dục về AI
Nhiều công ty đang bắt đầu nhận ra tiềm năng về việc xây dựng nền tảng và phát triển nhân sự dựa trên AI. Do vậy mà nhu cầu này ngày càng được quan tâm và chia sẻ.
Khi mới bắt đầu, việc tập trung vào đào tạo kiến thức kỹ thuật cấp cao về AI không hoàn toàn cần thiết. Các giám đốc điều hành về nhân sự nên nhận thức được các yếu tố cần thiết của AI. Cụ thể như: các chương trình học từ dữ liệu; cách các hệ thống AI có thể được tích hợp vào hoạt động hàng ngày; cách đầu tư chúng vào việc đổi mới cách thức tổ chức của doanh nghiệp. Điều này giúp tạo ra lợi thế cạnh tranh lành mạnh và lâu dài cho chủ doanh nghiệp.
Ngoài ra, các nhà lãnh đạo nên liên tục xem xét một cách kỹ lưỡng lực lượng lao động của họ. Đó là cách giúp tìm ra các lĩnh vực phù hợp nhất. Đồng thời tạo ra cơ sở để áp dụng và triển khai thực hiện AI. Các khóa đào tạo và giáo dục về AI trực tuyến có thể là sự lựa chọn hoàn hảo. Trải nghiệm việc đào tạo (training) sẽ tạo ra nền tảng tốt. Đây là bước đầu giúp họ trang bị hành trang sẵn sàng cho diễn tiến bất ngờ từ sự phát triển của AI trong thời gian tới.
3. Tạo công việc mới để quản lý các lĩnh vực AI
Chính sự bùng nổ AI đã tạo ra những thay đổi lớn về cục diện phát triển. Tuy vậy, mặc dù cuộc cách mạng công nghệ có thể dẫn đến những hệ quả khó kiểm soát như tình trạng mất việc. Thế nhưng, ở một góc độ khác thì những tiến bộ này lại mang lại sự cân bằng lâu dài cho nền công nghiệp: tạo ra công việc mới và các lĩnh vực tương ứng để xử lý công việc.
Để duy trì và phát huy một cách thức hoạt động AI hiệu quả, các công ty cần có những nhận thức sâu sắc nhất về AI. Cụ thể, hãy quan tâm đến việc bắt đầu chuyển đổi công việc; tạo ra các cơ hội hướng tới một mô hình bổ sung phát triển công nghệ mới. AI đang được vận dụng nhiều trong việc phân tích dữ liệu và tiếp thị dữ liệu số. Đó là một tín hiệu tốt.
Một điều quan trọng cần ghi nhớ: Tạo ra những công việc mới thông qua AI trong khắp cả một hệ thống chứ không đơn thuần tập trung vào các bộ phận liên quan đến công nghệ. Bộ phận nhân sự cần xác định đúng phạm vi lĩnh vực, từng nhiệm vụ; các công việc cần thực hiện. Như thế, việc ứng dụng AI vào quá trình vận hành sẽ đạt những hiệu quả cao hơn.
4. Phát triển “con người Nhân sự”
AI có ý nghĩa quan lớn trong việc định hướng phát triển các chiến lược nhân sự. Do vậy nhà lãnh đạo luôn phải cố gắng làm thế nào để tạo sự cân bằng. Khả năng tự động hóa của AI tạo ra lợi thế lớn trong việc xây dựng một hệ thống nhân sự vững mạnh.
Song, một số lĩnh vực đòi hỏi khả năng phân tích sâu sắc hơn của con người. Vì thế, chúng ta thấy việc phát triển “con người nhân sự” là điều nên phải lưu tâm. Nếu AI có khả năng phân tích khoa học, logic không giới hạn thì con người có khả năng suy luận, năng lực phán đoán từ trí tuệ cảm xúc. Sự hòa hợp ấy sẽ tạo ra sự cân bằng, tính ổn định; đảm bảo được mức độ hiệu quả của các cách thức áp dụng thực tiễn.
AI vận hành hiệu quả các quy trình: thiết kế bảng lương, tuyển dụng, đánh giá hiệu quả của nhân viên, phân bổ lao động theo năng lực,… Nhưng một sự thật là, AI sẽ khó thay thế hoàn toàn bộ phận nhân sự vì sự thiếu sót về cảm tính.
Đây là yều tố cần có trong ngành nhân sự hoặc bất kỳ một lĩnh vực nào khác. Hiểu được vấn đề này, các nhà lãnh đạo nhân sự cần biết cách phát triển con người nhân sự. Không nên quá tập trung vào những điểm mạnh của AI mà quên đi con người vẫn là nhân tố trung tâm.
Lời kết
Lĩnh vực nhân sự gắn liền AI sẽ tiếp tục được áp dụng một cách chuyên sâu hơn. Việc lựa chọn AI – Trí tuệ nhân tạo là công cụ hỗ trợ quan trọng. Nó thúc đẩy hiệu suất và sự phát triển lâu dài của tổ chức. Đồng thời, nó phát huy hết những tiềm năng; tạo ra tính bền vững về công nghệ nhân sự. Các tổ chức/doanh nghiệp nên tiếp tục sáng tạo, khám phá và thích ứng để trở thành người đi đầu trong việc triển khai hiệu quả AI.
Bài viết được sự cho phép của tác giả Phạm Công Sơn
Tôi code web asp.netc# đã lâu năm rồi, giờ có nhiều framework mới, công nghệ mới nên đôi khi cũng chưa có cơ hội để trải qua. Dù sao cũng là tầng lớp già rồi, khó có thời gian học được cái mới. Chính vì vậy, lựa chọn chơi với các bạn trẻ cũng là một cách học hỏi. Bạn trẻ thì có kiến thức mới nhưng lại thiếu kinh nghiệm. Mình già rồi có kinh nghiệm nhưng lại thiếu kiến thức mới. Già, trẻ chơi với nhau chắc chắn sẽ có bù đắp qua lại. Qua đó mà học hỏi đôi bên với nhau.
Hôm nay thằng cu em cho xem project code bằng nodejs. Có đọc qua vài file controller thì thấy một điều thế này. Đúng là hầu hết các bạn trẻ code static quá nhiều và hơn nữa là copy code đã thành tư tưởng cố hữu. Code cứ dài lê thê mà không đóng gói lại thành hàm, thành đối tượng để tái sử dụng lại. Điều mà tôi có nói tới trong bài viết Tại sao code của tôi thường ngắn gọn như vậy.
Đây là file controller history.js mà tôi đã đọc của thằng cu em.
Ở đây có thể hiểu là các hàm api ở controller sẽ gọi đến tầng lấy data để gửi xuống client. Nhưng mà có thể thấy. các hàm getHistories, getBalance, createHistory, getHistoriesByBet, createWithdrawHistory, getWithdraws cũng cùng một dạng mà copy đi copy lại.
Chính vì vậy mà tôi dù chưa code NodeJs nhưng cũng đã từng code javascript nên thêm một hàm getResponse như sau
Hàm getResponse trong đó có tham số method, còn Controller có thuộc tính this.Service. Và qua đó sẽ truy vấn this.Service thông qua key là method để lấy được hàm cần gọi. Và cuối cùng file History.js sẽ còn về được như sau
Đơn giản vậy thui. Mà đã giảm đi phải tới 80% code ấy chứ. Chưa kể các file controller khác cũng tối ưu tương tự thì cũng một lượng code thừa tương đối được loại bỏ. Đây chỉ một trong rất nhỏ các thủ thuật để tối ưu code cho đơn giản và gọn gàng hơn. Còn nhiều thủ thuật khác mà gặp tùy từng tình huống thì tôi sẽ post để chia sẻ thêm.
Bạn đang tìm kiếm một môi trường học tập chuyên nghiệp? Bạn mong muốn trải nghiệm tại một môi trường giáo dục quốc tế nhưng e ngại nhiều vấn đề? Đừng lo lắng vì Phần Lan là sự lựa chọn hoàn hảo dành cho bạn
Tại sao nên chọn Phần Lan?
Phần Lan là điểm đến trải nghiệm giáo dục lý tưởng của sinh viên quốc tế. Chính môi trường tiếp cận khoa học chuyên nghiệp với những đội ngũ là các chuyên gia đầu ngành, giáo dục nơi đây luôn lấy tiêu chuẩn về chất lượng làm sứ mệnh để định hướng phát triển.
Bạn có thể dễ dàng tìm thấy một hệ thống giáo dục đại học hàng đầu thế giới tại Phần Lan với hơn 400 chương trình cử nhân, các khóa học định hướng đảo tạo và phát triển tư duy,… Các chương trình, khóa học nơi đây luôn cập nhật những xu hướng giảng dạy mới nhất, tiếp thu và phát triển các kiến thức chuyên sâu nhất nhằm đáp ứng nhu cầu học tập, rèn luyện. Với những lý do đó, Phần Lan đã chứng tỏ rõ ràng vị thế của một quốc gia với nền giáo dục chất lượng, đảm bảo tính hội nhập với thế giới.
1. Phần Lan là một quốc gia hạnh phúc
Theo Báo cáo hạnh phúc toàn cầu mới nhất 2019 của Liên Hợp Quốc, do Gallup thực hiện, dựa trên 6 yếu tố ảnh hưởng đến hạnh phúc như tuổi thọ trung bình, phúc lợi xã hội, thu nhập, sự tự do, lòng rộng lượng và sự tin tưởng cao. Họ đánh giá đây là một quốc gia hạnh phúc nhất thế giới vì có tỷ lệ tham nhũng thấp, xã hội tiến bộ và hệ thống ngân hàng đáng tin cậy nhất trên thế giới.
2. Học phí hợp lý và học bổng hấp dẫn
Tùy vào các trường Đại học, ngành nghề mà các bạn du học sinh chọn sẽ có mức học phí khác nhau. Tuy nhiên, vẫn có những chính sách khuyến khích học tập bằng các suất học bổng có giá trị lên tới 100% học phí.
3. Hệ thống giáo dục đứng đầu thế giới
Đất nước Phần Lan là nước có hệ thống giáo dục Phổ thông thành công nhất thế giới dựa theo đánh giá của tổ chức của Organization Economic Cooperation and Development viết tắt là OECD vì các yêu tố như: giáo viên được đào tạo bài bản, cơ sở vật chất luôn đáp ứng và phục vụ tốt cho nhu cầu học tập, nghiên cứu của học sinh, sinh viên.
Bên cạnh đó, ngành giáo dục tại Phần Lan cũng được xem là “Trái tim của xã hội”, góp phần không nhỏ vào sự phát triển của đất nước. Đây là lý do rất nhiều sinh viên quốc tế ưu tiên lựa chọn Phần Lan làm nơi học tập.
4. Khoa học Ứng dụng: Trang bị thành công sau khi tốt nghiệp
Khi theo học tại các trường Đại học Khoa học Ứng dụng, thời lượng chương trình học của sinh viên sẽ bao gồm khoảng 50% lý thuyết và 50% là các dự án hoặc hoạt động học tập thực tiễn, cơ cấu chương trình học này giúp sinh viên làm quen và có kinh nghiệm với môi trường làm việc thực tế từ sớm.
5. Cơ hội làm thêm ngoài giờ kiếm thêm thu nhập
Ngoài những lý do trên, khi du học ở Phần Lan các bạn sinh viên có thể đăng ký làm thêm với thời gian 25 giờ/ tuần cộng với những ngày nghỉ lễ, Tết. Tận dụng khoảng thời gian này để giúp cho các bạn có thể kiếm thêm thu nhập, trang trải các chi phí học tập, sinh hoạt với mức thu nhập 8 – 15 euro mỗi giờ.
Sau khi tốt nghiệp, nếu chưa tìm được việc làm các bạn có thể ở lại đây 1 năm theo diện visa tìm kiếm công việc hoặc khởi nghiệp. Đây chính là cơ hội tuyệt vời khi bạn đang băn khoăn trước khi đưa ra quyết định “có nên du học Phần Lan hay không?”.
Với 5 lý do thuyết phục trên chắc chắn các bạn cũng hiểu được lý do vì sao đất nước Phần Lan thu hút nhiều bạn trẻ lựa chọn du học tại đây. Và đây cũng chính là câu trả lời dành cho các bạn trước khi đưa ra quyết định có nên du học tại đây hay không.
Hội thảo Khoa học Việc làm – Webinar Series: Future Is Made In Finland
Đáp ứng những mong muốn cũng như tạo ra cơ hội để các bạn có trải nghiệm thực tế về môi trường học tập, chương trình giảng dạy, nghiên cứu tại Phần Lan, hội thảo Khoa học Việc – Webinar Series: Future Is Made In Finland đã ra đời.
Khóa học nhằm nhấn mạnh tầm quan trọng của một số lĩnh vực nghiên cứu và công nghệ. Bên cạnh đó, một số cách tiếp cận nổi bật ở thời điểm hiện tại được đội ngũ chúng tôi khai thác nhằm phát triển nâng cao quá trình chuyển đổi về một tương lai bền vững hơn. Khóa học mở ra cơ hội tiếp cận cho mọi cá nhân có sự quan tâm. Hãy
Thông tin chi tiết chuỗi Hội Thảo
Mở đầu cho chuỗi Hội thảo là tập đầu tiên bắt đầu từ thứ Tư tuần sau, ngày 14 tháng 10 lúc 16:00 theo giờ Việt Nam.
Chuỗi Hội Thảo trên web đầy đủ sẽ như sau:
14/10/2020 – 16h, EP I: Future is Made in Finland – want to be part of it?
26/10/2020 – 17h, EP II: Bioeconomy Defines the Future
28/10/2020 – 17h, EP III: Join the Revolution of Light and Image
3/11/2020 – 17h, EP IV: First in 6G
11/11/2020 – 17h, EP V: Get REAL, AI!
17/11/2020 – 17:00, EP VI: Future is Mad in Finland – Design it yourself!
[To be announced] EP VII: Future is Female – Discussion with Women in Sciences & Tech
Hãy tham gia cùng chúng tôi khám phá tương lai thông qua 7 giai đoạn tuyệt vời để hiểu về sự thay đổi, các thách thức đang tồn tại; cách mà khoa học đang giải quyết các vấn đề về các hệ sinh thái phát triển hàng đầu trên thế giới.
Trong bài này tôi sẽ chỉ ra 10 điều bạn có thể làm với Linux mà bạn không thể làm với Windows. Bắt đầu nào.
1. Bạn có thể tải mã toàn bộ mã nguồn (source) của Linux.
+ Link: https://github.com/torvalds/linux
+ Mã nguồn của tất cả các phần mềm cũng có sẵn.
+ Ở chiều ngược lại: windows là mã nguồn đóng (closed source), bạn không thể xem hay tải nó.
2. Bạn có thể cài đặt bản cập nhật (install updates) mà không cần phải khởi động lại (reboot) máy tính.
+ Điều này là đúng với hầu hết các phần mềm chạy trên Lunix
+ Thậm chí đối với cả các kernel > 4.0
+ Đối với Windows thì cần phải khởi khởi động lại.
3. Bạn có thể cắm (plug) thiết bị vào mà không cần lo lắng về việc tìm / tải xuống trình điều khiển (driver).
+ Trừ một số thiết bị chuyên dụng cao.
+ Ở windows thì sẽ cần phải download.
4. Bạn có thể chạy Linux từ USB, CD, DVD, …
+ Đối với windows không có lựa chọn như vậy tồn tại.
5. Bạn có thể chạy Linux cả năm mà không cần phải khởi động lại.
+ Nó cực kỳ ổn định
+ Ít phân mảnh bộ nhớ
+ Windows: hệ thống sẽ bị chậm sau một khoảng thời gian. Hình sau sẽ mình hoạt 1 máy chạy Linux 1002 ngày mà chưa cần khởi động lại:
6. Bạn có thể chạy (run) Linux trên hầu như bất kỳ phần cứng nào.
+ Bao gồm cả những chiếc máy tính, laptop cũ cấu hình thấp, những máy tính cũ từ những năm 1990, thậm chí 1980 đều có thể chạy được Linux.
+ Windows: Yêu cầu phần cứng tối thiểu phải đạt 1 con số nhất định, càng bản windows mới thì càng yêu cầu phần cứng cấu hình cao hơn
7. Bạn có thể sửa lỗi linux bị hỏng với một đĩa cd.
+ Một vài lỗi của windows cũng có thể sửa được với 1 đĩa CD Linux
+ Windows: sửa chữa hệ thống (system repair) chỉ là lựa chọn
8. Bạn có thể cập nhật tất cả các phần mềm thường xuyên chỉ với một dòng lệnh đơn giản.
+ Ví dụ đối với Ubuntu bạn chỉ cần chạy lệnh “apt-get upgrade”.
+ Windows: cập nhật phần mềm chỉ có trong windows update.
9. Bạn có thể di chuyển ổ cứng từ máy linux này sang máy khác.
+ Phần lớn được thực hiện bằng cách không cần diver (trình điều khiển) cụ thể.
+ Windows: thường sẽ không hoạt động đúng, vì vậy bạn phải cài lại drive.
10. Bạn có thể tùy chỉnh mọi thứ theo nghĩa đen
+ font, icon, themes,…
+ Thậm chí có cả themes Windows, Mac cho Linux
+ Windows: một số tùy chỉnh có sẵn nhưng nó không có nhiều và không chỉnh sửa được nhiều như trên Linux.
Ngoài ra: bạn có thể cài phần mềm mà không cần lo lắng về virus hay malware.
Nghĩa là bạn không cần phần mềm diệt virus.
Phần mềm từ kho chính thức sẽ không bao giờ chứa mã độc hại.
Việc phát triển phần mềm và web đã thay đổi hoàn toàn trong những năm gần đây. Các nhóm không còn phải ngồi chung ở cùng một nơi. Ngoài ra, các công cụ có sẵn cho những người đang phát triển phần mềm, ứng dụng và trang web cũng đã được cải thiện.
Mặc dù vậy, vẫn có những tình huống mà bạn có thể cần một môi trường làm việc tập trung. Đây là nơi các công cụ phát triển từ xa như Visual Studio Online xuất hiện. Bài viết hôm nay sẽ xem xét công cụ này ảnh hưởng như thế nào đến mọi thành viên làm việc trong một nhóm phát triển từ xa.
Vào Visual Studio Online
Trong một thông báo gần đây, Microsoft đã tiết lộ Visual Studio Online cho phép lập trình tương tác từ nhiều vị trí. Visual Studio Online có cả trình soạn thảo code trong trình duyệt hoàn chỉnh và đóng vai trò trung tâm để đồng bộ với trình soạn thảo cục bộ của người dùng.
Visual Studio Online là cái tên đã xuất hiện được một thời gian. Đó là tên ban đầu của dịch vụ Azure DevOps, một hệ thống quản lý dự án trực tuyến.
Cái tên này có ý nghĩa hơn nhiều trong bối cảnh hiện nay, vì những gì Microsoft dường như sẽ khởi chạy là một máy chủ hoàn toàn từ xa, được lưu trữ đồng hành với Visual Studio Code và Visual Studio.
Visual Studio Code là gì?
Để hiểu được ý nghĩa của Visual Studio Online, bạn sẽ cần phải làm quen với Visual Studio Code (VS Code).
VS Code là trình soạn thảo code miễn phí của Microsoft dành cho các nhà phát triển. Trái ngược với Visual Studio (IDE flagship của Microsoft), VS Code có mã nguồn mở và gần với các trình soạn thảo văn bản như Sublime Text và Atom hơn là một Integrated Development Environment (IDE) đầy đủ.
Có sẵn cho Windows, Mac và Linux, nó cung cấp một môi trường gọn nhẹ và đầy đủ tính năng để lập trình. Tiện ích mở rộng giúp hoàn thành code và kiểm tra lỗi trong code nguồn (linting). Visual Studio Live Share cho phép lập trình cộng tác thông qua kết nối Internet. Visual Studio Online được thiết lập để thu hẹp khoảng cách hơn nữa, cho phép các môi trường lập trình được chia sẻ.
Visual Studio Online sẽ hoạt động như thế nào?
Thay vì việc mọi người cấu hình môi trường phát triển trên máy cục bộ, Visual Studio Online mang đến trải nghiệm của một nhóm làm việc trên cùng một hệ thống. Để hiểu lý do tại sao điều này lại có sức mạnh lớn đến vậy, hãy xem xét các bước cần thiết để làm việc trong một nhóm phát triển.
Mọi người cần phải có sẵn các công cụ và thư viện giống nhau. Các máy phát triển khác nhau có thể chạy những hệ điều hành hoặc phiên bản phần mềm không giống nhau. Việc quản lý gói và kiểm soát phiên bản có thể giúp ích, nhưng từng thành viên trong nhóm sẽ tự kiểm soát môi trường của họ.
Ngay cả phần cứng cũng có thể là một vấn đề. Nếu máy của bạn không tương thích với các yếu tố của một dự án thì cho đến gần đây, bạn không còn lựa chọn nào khác ngoài việc mua một máy tính mới. Bây giờ, ngay cả khi không có gì được cài đặt cục bộ, bạn vẫn có thể làm việc với bất kỳ thiết lập phát triển nào.
IDE trực tuyến hoàn toàn không có gì mới và Amazon AWS Cloud9 IDE là một môi trường mạnh mẽ giàu tính năng. Tương tự, có nhiều dịch vụ thuê bao trực tuyến được thiết kế để phát triển nhóm với quy mô nhỏ hơn.
Thậm chí có những IDE trực tuyến sử dụng cơ sở mã nguồn mở VS Code, và bất kỳ ai quen thuộc với phần mềm này cũng sẽ cảm thấy không có gì xa lạ.
Có một môi trường từ xa có thể truy cập thông qua cả trình duyệt và cục bộ là điều hoàn toàn có thể về mặt kỹ thuật với bất kỳ dịch vụ nào trong số này. Ngược lại, những gì Visual Studio Online có thể sẽ làm là biến mình thành một trải nghiệm hợp lý và dễ tiếp cận hơn.
Điều gì làm cho Visual Studio Online trở nên đặc biệt?
Đưa toàn bộ dự án vào một máy sao cho hiệu quả có nghĩa là mọi người luôn làm việc với cùng một thiết lập. Bất kể bạn là một lập trình viên dày dạn kinh nghiệm hay mới đi làm ngày đầu tiên, mọi thứ đều đã được thiết lập trước.
Nếu nhu cầu của dự án thay đổi, ví dụ, đối với một hệ thống hoặc framework mới, chỉ có một môi trường phát triển cần thay đổi và những thay đổi đó sẽ tự động chuyển sang từng thành viên của nhóm.
Về lý thuyết, sẽ không có sự khác biệt giữa làm việc tại nhà trên máy phát triển thông thường của bạn, trên máy tính đi mượn hoặc thậm chí trên điện thoại thông minh, nếu bạn có thể viết code bằng ngón tay cái!
Visual Studio Online có thể làm gì?
Tại thời điểm viết bài, dù chưa chính thức, nhưng quy trình làm việc chung trên Visual Studio Online dường như đã được đặt ra. Nó sẽ có tất cả các tính năng tương tự VS Code như hoàn thành code, kiểm tra lỗi trong code nguồn (linting) và cộng tác trong trình duyệt.
Hơn nữa, tất cả các chi tiết dự án, cùng với những tùy chọn và theme của người dùng, sẽ đồng bộ giữa mọi phiên bản trình duyệt và trình soạn thảo code cục bộ.
Microsoft cũng đã công bố tích hợp IntelliCode, tận dụng machine learning để đưa ra gợi ý và hoàn thành code tốt hơn dựa trên thói quen. Mặc dù chưa được xác nhận, nhưng rất có khả năng IntelliCode sẽ có thể mở rộng cho toàn bộ các nhóm, cho phép những công cụ động dựa trên kiến trúc của một dự án.
Vậy thiết lập tùy chỉnh cho việc lập trình của từng cá nhân thì sao?
Một nhược điểm rõ ràng cho cách tiếp cận chỉ gồm một máy phát triển duy nhất nằm ở việc tùy chỉnh cá nhân. Nếu bạn đã quen với một quy trình làm việc, bố cục hoặc shortcut tùy chỉnh cụ thể, mọi thứ có thể khó điều chỉnh.
May mắn thay, đây không phải là cách mà Visual Studio Online sẽ hoạt động. Theme cho mỗi người dùng sẽ cho phép thiết lập cá nhân. Mặc dù chắc chắn sẽ có một số khác biệt giữa việc sử dụng trình chỉnh sửa ngoại tuyến, nhưng trải nghiệm người dùng sẽ tương tự như môi trường tại nhà của bạn.
Một điều cần lưu ý là Visual Studio Online không phải là sự thay thế cho VS Code hoặc Visual Studio. Nó là một ứng dụng đồng hành cho phép người dùng code trực tiếp trong trình duyệt. Quy trình công việc giả định liên quan đến việc liên kết thiết lập cục bộ với dịch vụ trực tuyến mới.
Tại sao lại cần một trình soạn thảo code từ xa?
Nếu đã sử dụng máy tính tại nhà để phát triển, bạn có thể tự hỏi tại sao lại phải bận tâm tới Visual Studio Online.
Nó có thể không dành cho tất cả mọi người. Các nhà phát triển riêng lẻ hoặc bất kỳ ai làm việc với vi điều khiển hoặc phần cứng khác có thể không được hưởng lợi từ môi trường phát triển dựa trên đám mây. Hơn nữa, nếu bạn đã quen thuộc với một trình soạn thảo code khác và thoải mái sử dụng những môi trường ảo để lập trình, thì việc chuyển đổi có vẻ vô nghĩa.
Lợi ích thực sự từ Visual Studio Online sẽ dành cho các nhà phát triển mới bắt đầu. Không cần phải đau đầu với một lĩnh vực có nhiều khó khăn như quản lý các gói.
Điều quan trọng hơn nữa là Visual Studio Online mở ra sự phát triển cho bất kỳ ai. Việc sử dụng Chromebook, điện thoại thông minh hay PC cũ sẽ không quan trọng nữa, vì bạn có quyền truy cập vào cùng các công cụ.
Có thể tìm thấy Visual Studio Online ở đâu?
Vào thời điểm viết bài, VS Online không có sẵn cho tất cả mọi người. Có một bản xem trước riêng tư và bạn có thể đăng ký với Microsoft (tại đây) để truy cập. Khả năng là bạn sẽ phải đợi cho đến khi nó ở phiên bản beta công khai để dùng thử.
Nếu bạn muốn trải nghiệm thứ gì đó có khả năng gần như giống hệt, thì đã có sẵn phiên bản trực tuyến của VS Code. Vì nó là phần mềm mã nguồn mở, nên không có gì ngăn bạn xây dựng một phiên bản cho máy chủ của riêng mình. Nếu điều này có vẻ như quá sức với bạn, các trang web như Coder.com và StackBlitz.com đều là phiên bản trình duyệt của VS Code.
Visual Studio Online sẽ đưa sự phát triển trực tuyến lên một tầm cao mới. Để có thể tận hưởng lợi ích của lập trình cộng tác, bạn nên làm quen với Visual Studio Live Share.
Trong khi bạn đang chờ đợi phiên bản Visual Studio Online, tại sao không thử một trong nhiều IDE dựa trên trình duyệt đã có sẵn này nhỉ?
Giả sử service tự dưng lăn đùng ra chết không còn gửi được request nữa, bạn sẽ làm gì?
Lần nào được hỏi tui cũng nghĩ một câu chuyện khoa học viễn tưởng rồi phang bừa. Cá nhân tui nghĩ đây là một câu hỏi nhằm đánh giá khả năng tiếp cận & giải quyết vấn đề của bạn, chứ không hẳn là có câu trả lời cụ thể.
Tuy nhiên đi làm thì cũng có lúc … server lăn ra chết thật. Vậy thì bạn sẽ làm gì?
Thực tế
Sau đây là một câu chuyện có thật của các nhân vật hư cấu.
Có một hôm trúng ngay lượt Quần Cam on-call, app của công ty tự nhiên load dữ liệu mới rất chậm, tài khoản Twitter của app được tag liên tục để phàn nàn.
Đây là một sự cố nghiêm trọng vì nó ảnh hưởng đến hầu hết app users. Vì vậy công ty đã quyết định nhanh là cần phải cập nhật lên Twitter để trấn an tình hình. Sau một lúc, lượng retweet tăng lên, lượng phàn nàn giảm xuống.
Ví dụ như tweet cập nhật status của Github mỗi lần con unicorn xuất hiện…
Bài học #1:Đánh giá mức ảnh hưởng và thông báo đến users.
Cùng lúc đó Quần Cam bắt đầu tiến hành xem xét chuyện gì đang xảy ra. Lúc đầu, Quần phán đoán chắc do bên dữ liệu làm ăn sống nhăn không bắn dữ liệu về. Giả thuyết nghe có vẻ hợp lý bởi chuyện này đã từng xảy ra trước đó. Nhưng để nói có sách mách có chứng trước khi gửi mail chửi rủa, Quần kiểm chứng lại thông số trên Grafana. Số liệu hiển thị traffic bên đó vẫn đổ về bình thường.
Bài học #2:Luôn xem bảng thông số sau khi đoán bừa.
Tiếp theo Quần lại nghĩ: Có khi nào tắc nghẽn xảy ra ở load-balancer hay không?. Lần chết service gần nhất là do HAProxy không xử lý kịp các HTTPS handshake, lần này bảng thông số cũng cho thấy những triệu chứng tương tự: một số lượng concurrent session khá lớn. Nghĩ chắc là đúng, Quần đã giảm số lượng HTTPS request từ phía client đi một nửa.
Nhưng hướng tiếp cận đó không giải quyết được vấn đề. Truy hồi về cùng thời điểm ở các tuần trước, bảng thông số đều hiển thị lượng session tương tự. Tóm lại chỉ là do người truy cập vào đông thôi.
Bài học #4:Kêu gọi đồng đội nếu cảm thấy cần thiết.
Lúc này Quần và đồng đội đã loại bỏ được giả thuyết là tắc nghẽn xảy ra từ phía traffic, bây giờ họ bắt đầu xem xét phần import dữ liệu. Họ có một con worker để ghi các dữ liệu từ phía cung cấp thông qua một queue. Thông số cho thấy queue đang hoạt động tốt, họ tự hỏi điều gì đó đang diễn ra ở chính con worker.
Đọc logs thì họ thấy các tác vụ diễn ra chậm hơn so với bình thường, đặc biệt là các SQL thực hiện query cực chậm ở một cái bảng. Đọc tới khúc đó, một dev khác là Đầm Cam lập tức nhân ra chị đã phạm một sai lầm trong tuần. Chị có viết một con worker có sử dụng chức năng lock bảng để import dữ liệu cũ vào cái bảng đó. Chị đã rất cẩn thận chạy nó vào 11 giờ đêm hôm trước để tránh ùn tắc nhưng không ngờ nó chạy lâu tới như vậy.
Sau khi biết được lỗi, họ liền tắt con worker đó. Mọi thứ lập tức trở lại bình thường.
Bài học #5:Chọn giải pháp nhanh nhất để phục hồi hệ thống.
Ngay hôm sau, Đầm đã tiến hành đưa toàn bộ các tác vụ của mình vào một con worker có độ ưu tiên thấp hơn, đảm bảo việc vận hành không gây ảnh hưởng đến những critical worker khác.
Bài học #6:Luôn tính toán các giải pháp lâu dài để phòng ngừa sự cố tương tự xảy ra.
Bên cạnh đó Quần Cam ghi ghép lại sự việc để những người khác trong team có thể đọc lại. Nhờ đó mà hôm nay anh ấy có tư liệu để viết blog.
Bài học #7:Note lại các sự cố để làm cơ sở học tập sau này.
Bài viết này có thể giúp tui tăng lương như thế nào?
Như thường lệ bài viết không có giúp bạn tăng lương, nhưng tui có thể rút ra một số điểm để giúp bạn trả lời câu hỏi trên.
Luôn dùng thông số để làm cơ sở tìm lỗi. Luôn thu thập các metrics hệ thống trong quá trình chạy, không có số liệu thì lúc gặp sự cố ta như mò kim đáy bể.
Truy đúng critical failure trước khi đưa ra giải pháp. Dùng kĩ thuật 5-whys hay bất kì cái gì để giúp bạn tìm ra ngọn nguồn sự cố. Tuỳ tiện đưa ra giải pháp dựa trên phán đoán chỉ tốn thời gian của bạn mà không giúp được gì cả.
Chọn giải pháp nhanh nhất để phục hồi hệ thống. Nếu bạn làm việc với hệ thống ảnh hưởng đến hàng triệu user, mỗi giây service không hoạt động đều ảnh hưởng đến việc kinh doanh của công ty, mà như vậy thì ảnh hưởng đến việc nhận lương của bạn chứ chưa nói đến tăng lương. Hãy tìm cách hồi phục hệ thống nhanh nhất có thể, nhưng luôn tính toán một giải pháp lâu dài.
Cái kết
Bạn đồng ý với Quần Cam hay cho rằng tui đang nói tầm bậy? Hãy bình luận ở phía dưới nhé.
Các dev thường dễ mắc sai sót khi làm việc, tuy nhiên hoàn toàn có thể tránh được những sai lầm này nếu biết về nó từ trước. Bài viết này sẽ chỉ ra những lỗi sai mà các newbie front end developer hay gặp nhất và cách để khắc phục chúng như thế nào.
Phụ thuộc quá nhiều vào việc sử dụng Frameworks
Nhiều front end developer có thói quen phụ thuộc hoàn toàn vào frameworks dù rõ ràng vẫn có thể tự làm được những việc đó mà không cần dùng đến framework. Vậy nên tốt nhất, hãy chỉ dùng framework khi đã thành thạo với các cấu trúc JavaScript đơn giản và thao tác DOM. Nếu không thì sẽ khó mà hiểu được nguyên lý hoạt động của vấn đề đó.
Front end Developer không nên đặt tất cả code ở một chỗ
JavaScript đã có các module tiêu chuẩn những năm gần đây nên không có lí do gì để sử dụng các scripts quá dài nữa. Hãy sử dụng module để chia code thành các phần khác nhau để dễ quản lý hơn. Bạn cũng không nên sử dụng biến toàn cục – global variables nữa mà hãy chuyển sang sử dụng nhiều biến xuất trên từng module.
Ngoài ra, nếu muốn gom các code thành một custom component, front end developer có thể sử dụng web components API để thực hiện và sử dụng ở bất kỳ nơi nào. Các project được tạo bởi framework đều chia code thành các module, đây là phương pháp tốt nhất mà bạn nên thực hiện để tránh các sai lầm.
Inline-styles làm trang làm việc của lập trình viên lộn xộn hơn nên hãy chuyển chúng vào một file CSS để làm gọn lại và có thể tái sử dụng cùng một kiểu ở nhiều nơi.
Không loại bỏ các phần thừa thãi
Block elements có chiều rộng 100% sẽ trở nên dư thừa. Các front end developer không cần đặt chiều rộng của nó 100% vì nó được mặc định theo 100% chiều rộng của element phần tử chứa nó. Chrome sẽ cảnh báo khi phát hiện có quá nhiều phần tử không cần thiết trên trang.
Các front end developer không tối ưu hóa hình ảnh
Nhiều trường hợp vẫn chưa có kết nối ổn định, nên để có chất lượng ảnh tốt nhất bạn hãy nén các file ảnh lại. Cũng không nên sử dụng nhiều hình ảnh có kích thước megabytes vì sẽ mất rất nhiều thời gian để tải xuống và tốn nhiều băng thông hơn.
Sử dụng Bootstrap sẽ phát huy hiệu quả tốt nhất khi flexbox và grid được phát hành hoặc khi nó không có sẵn nhiều trên các trình duyệt. Hiện tại đã có thể sử dụng cả hai để tạo layout cho page, kể cả Bootstrap cũng sử dụng flexbox và grid cho layout của mình.
Nên thay vì sử dụng Bootstrap các front end developer nên sử dụng flexbox và grid để tạo layout dễ dàng hơn. Chúng ta có thể quên các nguyên tắc cơ bản khi tạo layout nếu phụ thuộc quá nhiều vào Bootstrap.
Thẻ heading sẽ giúp người đọc phân biệt được các đề mục trong một bài viết và ảnh hưởng đến tiêu chuẩn SEO, do đó hãy điều chỉnh các thẻ heading sao cho hợp lý để tăng chất lượng bài viết.
Nhúng phông chữ sai cách
@font-face dùng để chỉ định tên phông chữ cho các chữ được nhập, nhưng vẫn có thể thay đổi độ đậm nhạt và giữ nguyên tên trong cả khối đối với phông chữ thông thường so với các phông chữ khác.
Sau đó, trình duyệt sẽ chọn mặt phông chữ Open Sans đã font-weight được đặt thành đậm.
Kết luận
Inline-styles không thật sự hiệu quả nên chúng ta hãy chuyển sang tệp CSS để có thể sử dụng lại. Bên cạnh đó, hãy nhúng phông chữ đúng cách với lệnh @font-face. Và vì có nhiều người dùng kết nối chậm hơn nên hãy tối ưu hóa bài viết cho phù hợp nhất để mọi người đều có thể tiếp cận được. Trên đây là một số vấn đề mà các front end developer nên xem qua để tránh gặp sai sót khi lập trình.
Việc xây dựng một đội ngũ nhân sự tiềm năng rất quan trọng. Và để làm được điều này, các công cụ hỗ trợ tuyển dụng thật sự đóng vai trò hữu ích. Bài viết sau đây sẽ bật mí với bạn 6 công cụ giúp hợp thức hóa quy trình tuyển dụng nhân sự. Đây được xem là giải pháp thiết thực giải quyết bài toán tuyển dụng của các doanh nghiệp vừa và nhỏ.
1. BambooHR
BambooHR là một nền tảng nguồn nhân lực hoàn chỉnh. Nó bao gồm các công cụ tiện ích tuyển dụng nhân sự như: hệ thống theo dõi người nộp đơn, cơ sở dữ liệu các nhân của ứng viên,… Ngoài ra, công cụ này là một bộ phần mềm có thể giúp bạn quản lý và đánh giá nhân viên của mình.
BambooHR được đánh giá là dễ sử dụng, đáp ứng hoàn toàn các nhu cầu. Những vấn đề về theo dõi ứng viên tích hợp, chữ ký điện tử; hệ thống hóa cơ sở dữ liệu và quản lý hiệu suất công việc,.. đều được giải quyết tối ưu.
2. XOR
XOR là một mô hình chatbot được thiết lập trên nền tảng sử dụng trí thông minh nhân tạo.
Mục đích là để hướng dẫn ứng viên xuyên suốt quá trình tuyển dụng. Đồng thời, giúp ứng viên xác định sự phù hợp của họ đối với vị trí cần ứng tuyển. Một số hữu ích từ công cụ này phải kể đến việc giảm thiểu những khó khăn trong quá trình tuyển dụng.
Với hình thức là một chatbot, XOR giúp tôi ưu hóa thời gian tuyển dụng. Cụ thể, nó giúp sàng lọc trước các ứng cử viên. Từ đó, đưa ra các định hướng về phương án trả lời phù hợp nhất.
3. JazzHR
JazzHR được biết đến là một hệ thống cho phép bạn theo dõi ứng viên suốt quá trình tuyển dụng; tạo và phân phối các bài đăng về công việc để thu hút ứng viên.
Công cụ tuyển dụng này rất tiềm năng và đáp ứng đủ các tiêu chí của vị trí hiện tại. JazzHR cho phép người dùng cập nhật các mô tả công việc. Đồng thời, triển khai chúng lên các trang web tìm việc khác nhau như LinkedIn, Glassdoor,… Nó có một hệ thống theo dõi ứng viên rất tuyệt vời. Một điểm đặc biệt nữa chính là nó cho phép bạn quản lý toàn bộ quá trình phỏng vấn thông qua hệ thống.
Cụ thể, nó bao gồm một công cụ báo cáo, đánh giá quy trình; cho phép số hóa tất cả những giấy tờ liên quan đến nhu cầu tuyển dụng. Hiện nay tại Việt Nam cũng đã có xuất hiệnplatform hỗ trợ tuyển dụng tích hợp. Không dừng lại ở việc theo dõi vị trí tuyển dụng, chúng còn là nền tảng chung cho ứng viên để tương tácđọc blog, tạo CV online. Từ đó tạo thêm nguồn ứng viên tiềm năng cho doanh nghiệp với mức chi phí tối ưu từ phía TopDev.
4. Merlin
Merlin là một công cụ tuyển dụng dành riêng cho các ứng viên thuộc nhóm người lao động phổ thông.
Dịch vụ của Merlin tập trung vào các ngành nghề và lao động. Chúng tập hợp những người có nhu cầu tìm việc và định hướng nghề nghiệp chung; mang lại cho họ những cơ hội.
Merlin có một cổng thông tin cho cả người sử dụng lao động và người lao động. Nó được dùng để duy trì quan hệ đối tác với các thương hiệu lớn. Chính điều này tạo ra các lợi thế lớn hơn trong việc tìm kiếm các ứng viên phù hợp.
5. ClearCompany
ClearCompany không đơn thuần tìm kiếm nguồn ứng viên mới, mà nó còn giúp bạn xây dựng hệ thống quản lý khi họ bắt đầu làm việc cho bạn. Các chức năng chuyên dụng của công cụ này: thu nhận tài năng thông qua tuyển dụng, quản lý hiệu suất công việc trong toàn bộ quá trình.
ClearCompany còn cung cấp một quy trình với sự vận hành hoàn hảo. Các nhân viên được đảm bảo định hướng rõ về các quy trình làm việc và thăng tiến.
6. Facebook Jobs
Facebook Jobs ra đời với mục đích kết nối những người lao động có nhu cầu tìm việc với các doanh nghiệp. Không có gì ngạc nhiên khi Facebook tiến hành phát triển không gian việc làm sau khi tung ra Facebook Marketplace.
Đối với các doanh nghiệp vừa và nhỏ, Facebook Jobs là một công cụ thật sự hữu ích. Vì nó giúp tìm kiếm nguồn lao động có sẵn ở phạm vi lân cận. Tuy nhiên, bạn vẫn phải đảm bảo các quy trình tuyển dụng nhân sự từ khi bắt đầu. Điều này giúp giảm thiểu những rủi ro có thể xảy đến. Đồng thời, bạn có thể nắm bắt và sử dụng công cụ một cách tốt nhất.
Lời kết
Trong bất kỳ công việc nào thì việc sử dụng các công cụ phù hợp là điều rất quan trọng. Mỗi công cụ với đặc tính, chức năng khác nhau và tùy vào từng vị trí trong quy trình tuyển dụng mà bạn nên lựa chọn những công cụ hỗ trợ tương ứng. Bạn nên dành thời gian để tự mình xác định xem các công cụ này có thật sự phù hợp với quá trình tuyển dụng hay không. Đối với quá trình tuyển dụng của các doanh nghiệp vừa và nhỏ thì đây được xem là bí quyết giúp tiết kiệm thời gian, đơn giản hóa và mang lại hiệu quả cao.
Tuyển Dụng Nhân Tài IT Cùng TopDev Đăng ký nhận ưu đãi & tư vấn về các giải pháp Tuyển dụng IT & Xây dựng Thương hiệu tuyển dụng ngay!
Hotline: 028.6273.3496 – Email: contact@topdev.vn
Dịch vụ: https://topdev.vn/page/products
Việt Nam đang bước vào thời kỳ công nghệ 4.0, vai trò của công nghệ ngày càng trở nên thiết yếu đối với nhiều hoạt động trong đời sống. Bên cạnh đó, Việt Nam được xem là “mảnh đất màu mỡ” với các công ty công nghệ Hàn Quốc đến và mở rộng thị trường hoạt động.
Một trong những sự kiện lớn trong ngành công nghệ tại Việt Nam năm 2020 chính là sự hợp tác giữa Korea IT Cooperation Center tại TP. HCM (KICC HCMC) và Nền tảng tuyển dụng chuyên về IT hàng đầu Việt Nam – TopDev. Sau cái bắt tay chiến lược này, các nhân tài công nghệ càng có nhiều lựa chọn hơn khi tìm kiếm nơi phát triển sự nghiệp lập trình phù hợp, đặc biệt nhất chính là cơ hội trải nghiệm môi trường làm việc chuyên nghiệp tại nhiều công ty công nghệ tiên tiến đến từ Hàn Quốc.
Mời bạn khám phá Top 7 công ty công nghệ Hàn Quốc xuất hiện trong kỳ này để nắm bắt cho chính mình cơ hội tốt và phù hợp nhất nhé!
1. DaouKiwoom Innovation
DaouKiwoom Group là một trong những công ty hàng đầu về CNTT và dịch vụ tài chính của Hàn Quốc với tổng doanh thu 2,2 tỷ USD, lợi nhuận 1 tỷ USD và có hơn 5.000 nhân viên vào năm 2020.
DaouKiwoom Group đã mở rộng sang Mỹ, Nhật Bản, Trung Quốc, Indonesia, Pháp và Việt Nam. Tạo ra những bước phát triển vượt bậc trong lĩnh vực CNTT, tài chính và dịch vụ.
⇒ Nếu bạn đang tìm kiếm một nơi để bạn có thể phát triển những kỹ năng của mình, một môi trường làm việc chuyên nghiệp, năng động, hãy đến với DaouKiwoom Innovation. Nhiều vị trí mới cùng mức lương hấp dẫn đang chờ đợi bạn.
2. Smilegate Việt Nam
Smilegate là công ty có trụ sở chính tại Hàn Quốc, thành lập từ năm 2002. Hoạt động kinh doanh trong các lĩnh vực phát triển trò chơi điện tử, dịch vụ và đầu tư. Với định hướng của mình, Smilegate mong muốn trở thành đối tác phát triển nền tảng và dịch vụ tốt nhất tại Việt Nam và Đông Nam Á.
Smilegate luôn tìm cách thúc đẩy sự phát triển của nền tảng bằng cách chiêu mộ các nhân tài trong ngành, chuyên quản lý việc phát triển & vận hành các sản phẩm, dịch vụ và nền tảng.
Nếu bạn đang tìm kiếm một môi trường làm việc tuyệt vời cùng đãi ngộ xứng đáng, Smilegate Việt Nam hứa hẹn sẽ là điểm đến lý tưởng cho sự phát triển của sự nghiệp bạn.
3. HANBIRO Việt Nam
Hanbiro Việt Nam là công ty có vốn đầu tư từ Hàn Quốc, là nhà cung cấp CNTT-TT chuyên về vận hành quản lý máy chủ, phát triển và bán phần mềm (Mail, Groupware, CRM). Công ty Hanbiro có 5 chi nhánh trên khắp thế giới như Hàn Quốc, Việt Nam, Nhật Bản, Mỹ và Trung Quốc.
Làm việc tại Hanbiro Việt Nam, bạn có thể tận hưởng môi trường sáng tạo và năng động để khuyến khích người lao động nghĩ khác và thử cách mới. Bên cạnh đó, khi làm việc với các chuyên gia cao cấp của Hàn Quốc, bạn có thể học hỏi được nhiều kinh nghiệm và có cơ hội được đi nước ngoài.
Hãy trở thành một thành viên của đại gia đình Hanbiro Việt Nam, để được “làm điều mình thích và yêu điều mình làm” bạn nhé.
4. Công ty TNHH Megazone Việt Nam
Megazone Cloud là một trong những nhà cung cấp dịch vụ quản lý đám mây (MSP) lớn nhất ở khu vực Châu Á Thái Bình Dương. Kể từ khi thành lập vào năm 1998 công ty đã cung cấp các dịch vụ CNTT đến doanh nghiệp và hiện có hơn 1000 chuyên gia. Các khách hàng của Magezone là các “ông lớn” như Samsung Electronics Co. và LG Electronics Inc. đến các tổ chức tài chính và công ty khởi nghiệp.
Gần đây, Megazone đang tích cực mở rộng thị trường toàn cầu bằng cách thành lập các công ty con ở nước ngoài tại Hoa Kỳ, Nhật Bản, Trung Quốc, Việt Nam,…
Nếu bạn đang tìm kiếm một nơi làm việc vừa có nhiều đãi ngộ tốt vừa được thể hiện năng lực với các đối tác lớn trong và ngoài nước thì Megazone chính là lựa chọn phù hợp nhất!
BrickMate Group (BMG) là một công ty phát triển CNTT toàn cầu có trụ sở chính tại Seoul, Hàn Quốc. Công ty bao gồm các kỹ sư và hơn 300 nhà phát triển đến từ Hàn Quốc và Việt Nam giải quyết các vấn đề liên quan đến việc phát triển phần mềm, giải pháp thương mại điện tử, ứng dụng kinh doanh,…
BrickMate đã và đang làm việc với nhiều công ty khởi nghiệp và là đối tác phát triển web/ứng dụng với một số doanh nghiệp nổi tiếng như Samsung, Kyobo, LG, Megazone,…
Nắm bắt ngay cơ hội trở thành một nhân tố tài năng của BrickMate Group, những vị trí tuyển dụng mới đang chờ bạn apply!
6. TSB Vietnam
Total Soft Bank Ltd. là công ty đến từ Hàn Quốc cung cấp các giải pháp logistics hàng hải và TSB Việt Nam là công ty con của Total Soft Bank. Đây là một trong những công ty hàng đầu thế giới về các giải pháp hậu cần hàng hải.
TSB Vietnam được xem như là trung tâm QA và R&D của Total Soft Bank tại Việt Nam với mục tiêu biến trung tâm này thành một tổ chức phát triển phần mềm cạnh tranh và đầy thách thức.
Cơ hội việc làm cho các lập trình viên tại TSB Vietnam luôn rộng mở. Tham gia ngay hôm nay với vị trí Software Developers (Java/PHP/C#) bạn nhé!
7. Công ty cổ phần GO2JOY VIỆT NAM
Go2Joy là công ty có vốn đầu tư nước ngoài, chuyên về phát triển ứng dụng di động. Sau 3 năm hoạt động, công ty tự hào là đơn vị hàng đầu cung cấp ứng dụng đặt phòng theo giờ với hơn 100,000++ lượt tải xuống và 20,000++ người thật check-in từ ứng dụng.
Với nhu cầu mở rộng không ngừng, Go2Joy đang tìm kiếm những nhân viên chuyên nghiệp, trẻ trung, năng động, có chí cầu tiến để gia nhập vào đội ngũ cùng mang đến những tính năng mới, ưu việt hơn cho ứng dụng.
⇒ Bạn hoàn toàn có thể sở hữu ngay 1 trong 2 slot tại Go2Joy để trực tiếp trải nghiệm những điều đáng mong chờ cho sự nghiệp:
Với sự xuất hiện của Top 7 công ty công nghệ Hàn Quốc trong kỳ này, hi vọng bạn sẽ có thêm những thông tin cực hữu ích và sớm tìm được môi trường làm việc phù hợp nhất để có thể thỏa sức đam mê và bung xõa hết mọi giới hạn của bản thân.
⇒ Và đừng quên, KICC HCMC X TopDev sẽ còn mang đến cho cộng đồng IT Việt Nam nhiều cơ hội mới. Hãy chờ đón những bài viết tiếp theo cùng những cơ hội mới hấp dẫn bạn nhé!
________________________________
Dự án được hỗ trợ bởi Korea IT Cooperation Center tại TP. HCM (KICC HCMC) – thuộc Cơ quan Xúc tiến CNTT Hàn Quốc (NIPA), phối hợp cùng TopDev – Nền tảng tuyển dụng CNTT hàng đầu tại Việt Nam với mục đích thúc đẩy tuyển dụng việc làm CNTT cũng như quảng bá cho Korean IT Companies trong cộng đồng lập trình viên lớn nhất tại Việt Nam.
Liên hệ: Korea IT Cooperation Center tại TP. HCM (KICC HCMC)
Bài viết được sự cho phép của tác giả Huỳnh Quán Cẩm
Bắt đầu một câu chuyện
Vài ngày trước một người bạn nhờ tui xem giùm trang web của nó bị người dùng phàn nàn là hack tiền ảo.
Tui mò vào thì thấy cái này.
Đây là một script sẽ chạy mỗi khi bạn truy cập vào trang web, “hâm nóng” CPU của bạn một chút, và “làm dày” túi tiền của chủ nhân script đó một chút bằng cách đào tiền ảo Monero.
Trang web này bạn tui nhờ một bên developer tên X phát triển website. Tui nghi ngờ X đã làm điều này, nhưng tui chưa đủ bằng chứng xác thực (chắc tui không bao giờ có). Đó là lý do vì sao tui không công bố tên.
Vì sao tui lại nghĩ thế?
Ban đầu tui nghĩ cái script này do X tắc trách cài theme WordPress lậu mà bị dính đòn, sau đó tui bác bỏ vì trang staging không có.
Giả thiết khác là website bị hack, cơ mà một hacker nghiệp dư nhất cũng biết phải alias CoinHive dưới một tên khác, và … đừng đặt tên biến là miner.
Khi phản ánh về vấn đề này, developer đổ thừa cho nhà cung cấp hosting Y (thuộc dạng lớn nhất Việt Nam hiện nay) với luận điệu vì Y có access của hosting nên Y đã làm việc này. Không biết bạn sao chứ tui thấy thật là .
Nếu nhất thiết phải chọn một bên giữa X và Y để tin, xin lỗi tui chọn Z #ahihi. Tại sao? #ahihi cái nữa, vì tui thích.
Sự chuyên nghiệp
Đôi khi, chỉ cần một phút yếu lòng buông thả bản thân, ai cũng có thể sa vào lối suy nghĩ ai biết đâu, có chết ai đâu, chắc không sao.
CPU nóng lên một chút có chết ai đâu.
Trễ deadline một chút chắc không sao.
Cái lỗi nhỏ xíu như vậy ai phát hiện đâu.
Từ đó ta luôn có thể lầy hơn.
Cài script đào chút coin chút có chết ai đâu.
Làm freelance trong giờ làm việc có ai biết đâu.
Ứng dụng có lỗi bảo mật cơ mà tạm thời chắc không sao. #yolo
Hầu như ai cũng đồng ý như vậy là không chuyên nghiệp. Bản thân tui cũng từng không chuyên nghiệp. Tui cũng từng gặp nhiều người không chuyên nghiệp. Khi làm những việc không chuyên nghiệp, vô hình trung ta đạp đổ chén cơm của chính mình và tạo ra tiếng thúi cho những người làm nghề chân chính.
Đứng trước ngưỡng chuyên nghiệp thì bạn có hai lựa chọn … một bạn là một trong số họ, hai bạn là số còn lại.
Tỏ ra chuyên nghiệp chính là bạn đang tôn trọng cái nghề của mình.
Vậy như thế nào mới được gọi là chuyên nghiệp? Hơn nữa chuẩn đạo đức của mỗi người khác nhau, làm sao để ta tránh được việc dùng tiêu chuẩn của bản thân để đánh giá người khác?
Mỗi ngành đều có đạo đức nghề nghiệp riêng, như chuẩn mực để những người làm nghề tuân theo. Ví dụ như ngành Y tế có Y đức, ngành vận tải có đạo đức của tài xế thì ngành Phần mềm cũng phải có “Code Đức”. IEEE-CS và ACM có một bản code đức như thế tên là Software Engineering Code of Ethics and Professional Practice.
Bản code đức này gồm 8 nguyên tắc về public interest, client & employer, sản phẩm, sự phán xét, quản lý, nghề nghiệp, đồng nghiệp và bản thân.
Tui sẽ tóm tắt lại một số điểm quan trọng.
1) Chỉ approve sản phẩm khi tin rằng nó an toàn
Bạn không cung cấp các sản phẩm không an toàn (như chèn CoinHive script chẳng hạn), làm giảm chất lượng cuộc sống, hay khi biết chắc rằng nó sẽ ảnh hưởng tiêu cực đến người khác.
2) Sẵn sàng đóng góp kĩ năng của mình cho các mục đích tốt
Theo cách hiểu của tui thì là giúp đỡ các bạn newbie, đóng góp cho các phần mềm mã nguồn mở, nâng cao cảnh giác của mọi người về bảo mật, vv.
3) Thành thật về kinh nghiệm và kĩ năng.
Không khai man CV, không chém gió về khả năng của mình, không nhận những gì mà mình không làm. Theo tui nghĩ thì nếu không tuân theo nguyên tắc này, ảnh hưởng tiêu cực cho bạn nhiều hơn là cho cộng đồng.
4) Giữ bí mật thông tin có được trong quá trình làm việc.
Đơn giản là đừng làm ông chú ở Viettel.
5) Không chấp nhận các job ngoài luồng mà ảnh hưởng đến công việc chính
Tui từng gặp nhiều bạn thiếu chuyên nghiệp đến mức mang tiếng OT để ở lại công ty làm freelance, đến nỗi trễ cả deadline.
6) Cố gắng tối đa để đưa ra sản phẩm chất lượng cao, với một acceptable cost và schedule.
Không phóng đại deadline, không vẽ thêm việc để làm, không charge tiền khách hàng quá mức.
7) Trả lương công bằng
Ngược lại là một nhà quản lý, phải đảm bảo việc trả lương công bằng cho developer.
8) Luôn không ngừng nâng cao bản thân
Dev phải cầu thị, luôn học hỏi để nâng cao trình độ kĩ thuật và kinh nghiệm của bản thân.
Bài viết này sẽ giúp tui tăng lương như thế nào?
Như thường lệ bài viết không có giúp bạn tăng lương. Nhưng mà:
Tui mong nó góp một phần nhỏ trong việc: tăng nhận thức về sự chuyên nghiệp, từ đó ta có một cộng đồng sạch hơn, thơm hơn, lành mạnh hơn.
Bạn có thể cài No Coin, một extension để chặn các script đào coin trên trình duyệt Chrome.
Bên cạnh các hàm Python tích hợp sẵn, bạn còn có thể tự định nghĩa hàm Python, những hàm này gọi là hàm Python do người dùng định nghĩa (user-defined functions). Việc sử dụng những hàm tự định nghĩa này có lợi ích gì, cách để định nghĩa hàm trong Python ra sao, chúng ta sẽ tìm hiểu trong bài này.
Các hàm mà ta tự mình định nghĩa để thực hiện một số công việc cụ thể được gọi là hàm do người dùng định nghĩa. Việc định nghĩa hàm và gọi hàm đã được đề cập đến trong bài hàm Python.
Các hàm có sẵn trong Python được gọi là hàm tích hợp. Nếu ta sử dụng những hàm được người dùng khác viết dưới dạng thư viện, thì những hàm này gọi là hàm thư viện (library function). Như vậy, hàm ta tự định nghĩa có thể trở thành một hàm thư viện đối với người dùng nào đó.
Ưu điểm khi sử dụng hàm Python do người dùng định nghĩa
Hàm do người dùng định nghĩa giúp phân tích một chương trình lớn thành những phần nhỏ, khiến chương trình dễ hiểu, dễ duy trì và gỡ lỗi hơn.
Khi một đoạn code bị lặp lại trong chương trình, thì có thể sử dụng hàm để gom đoạn code này lại và chạy khi cần bằng cách gọi hàm.
Các lập trình viên cùng làm việc trong một dự án lớn, có thể phân chia công việc cho nhau bằng cách tạo các hàm khác nhau.
Để định nghĩa một hàm, bạn đã biết khi tìm hiểu về tổng quan về hàm Python. Ở đây, mình sẽ nhắc lại cú pháp cơ bản khi định nghĩa 1 hàm:
def ten_ham(DoiSo1,DoiSo2,...,DoiSon)
khối lệnh của hàm
Ví dụ:
defthem_so(a,b):
tong = a + b
return tong
so1 = 5
so2 = 6
so3 = int(input("Nhập một số: "))
so4 = int(input("Nhập một số nữa: "))
print("Tổng hai số đầu là: ", them_so(so1, so2))
print ("Tổng của hai số sau là: ", them_so(so3, so4))
Trong ví dụ trên, hàm int(), input(), print() là hàm tích hợp sẵn trong Python. Ở đây, chúng ta định nghĩa hàm them_so(), có chức năng là thêm hai số, tính tổng 2 số và trả về kết quả. Đầu ra của chương trình này như sau:
Nhập một số: 8
Nhập một số nữa: 10
Tổng hai số đầu là: 11
Tổng của hai số sau là: 18
Việc đặt tên hàm theo chức năng hoặc nhiệm vụ của hàm sẽ giúp người đọc code dễ hiểu hơn, bạn nên luyện tập điều nay khi code.
Bài viết được sự cho phép của BQT Kinh nghiệm lập trình
Chúng ta là lập trình viên. Chúng ta bỏ ra bốn, năm năm để học và để hành về những thuật toán, những dữ liệu. Vậy hẳn công việc của chúng ta chỉ có thể là code rồi! Code chạy càng nhanh, càng khoẻ thì càng thành công. Tại sao lại phải quan tâm đến UI/UX cơ chứ? Chẳng phải công ty đã thuê designer rồi sao?
Có thật như thế không?
Đã bao giờ bạn tự nói với mình thế này chưa: “Người dùng thật ngu ngốc, cái nút ở ngay đó mà họ không nhìn thấy”? Hay thế này: “Website load cực nhanh, thực hiện chức năng nào cũng nhanh mà họ kêu hơi lag lag”?
Đã bao giờ bạn nổi khùng lên với đám designer vì hình như “chúng nó” cứ cố ý chơi khăm? Chúng nó cứ làm ra những thiết kế khó code cực kỳ. Chúng nó cứ bắt sửa lại những chỗ mình mất bao công mới code được. Những chỗ ấy sửa rồi cũng chả khác gì ban đầu. Hỡi ôi! Khác gì chuyện cắt tóc của con gái cơ chứ!
Thế nhưng, bạn ạ…
Không phải cứ bạn sử dụng tốt thì người dùng cũng sử dụng tốt. Không phải cứ thiết kế cho dễ code thì sản phẩm cuối sẽ dễ dùng. Thuật toán ghê gớm làm gì nếu người ta phát ngán lên không thèm động vào phần mềm của bạn?
Tất nhiên rồi, bạn sẽ mở lòng hơn với người dùng và designer. Bạn sẽ không đem bực bội ấy ra đường. Bạn sẽ không phải tìm đến “trà đá kem cheese” để giải toả. Và như thế thì tỉ lệ tai nạn giao thông, tỉ lệ tệ nạn xã hội ở Việt Nam sẽ giảm mạnh. Việt Nam sẽ sớm trở thành cường quốc hàng đầu thế giới. Tiếng Việt sẽ sớm là ngôn ngữ duy nhất trên địa cầu.
Đùa thôi! Bạn phải hiểu làm thế nào thì người dùng thấy dễ dùng, thấy thích dùng. Có thế bạn mới làm chủ được sản phẩm, đúng không nào? Có thế thì cái mà bạn code ra mới có ích, có chất lượng được, phải không? Nhờ biết về UI/UX, bạn sẽ phát triển hơn qua từng ngày.
Là một lập trình viên, làm sao để ta hiểu UI/UX tốt hơn? Có cần phải có chút năng khiếu, chút hoa tay không? Có cần phải sắm một bộ não thật sáng tạo không?
Stephen McLean nói về điều ấy rất tốt. Bài của ông này trên freeCodeCamp. Nếu muốn đọc toàn bộ, hãy truy cập link này. Hoặc bạn có thể đọc những ý chính dưới đây.
Chăm chỉ học
Nếu bạn sinh ra đã là phù thuỷ của UX, điều ấy rất tốt. Nhưng con đường này không trải hoa hồng. Chỉ có luyện tập mới làm bạn tốt lên. Xuất phát điểm của bạn tốt hay kém, bạn đều có thể học. Bạn đã học được cách code, vậy bạn cũng sẽ học được UI/UX.
Nhìn. Nghĩ. Và ăn trộm.
Cũng như code vậy, bạn phải xem người khác làm gì, nghĩ xem tại sao họ làm thế. Và nếu họ làm tốt? Tất nhiên rồi, sao không tiện tay “cuỗm” luôn những kinh nghiệm ấy? Picasso đã bảo “Good artists copy, Great artists steal”.
Theo chân các lý thuyết
Ta đã biết về S.O.L.I.D. Ta đã được nghe là phải làm theo các design pattern. Với UI/UX cũng có những thứ như vậy. Học chúng, và ta sẽ không cần mò mẫm theo kinh nghiệm.
Điều này thật dễ hiểu. Học đi đôi với hành mà. Làm sao ta có thể tốt một thứ gì nếu chưa từng động tay vào?
Đừng bỏ cuộc
Thiết kế với ta rõ ràng chẳng dễ dàng. Nhưng nếu ta sớm dừng cuộc chơi thì đám designer sẽ tiếp tục cười vào mặt ta. Người dùng cũng sẽ tiếp tục phàn nàn. Vậy nên, hãy tiếp tục dù chân bạn có mỏi rã rời.
Shifting left là một nguyên tắc phát triển, nêu rõ rằng bảo mật sẽ di chuyển từ bên phải (hoặc kết thúc) của vòng đời lập trình phần mềm (SDLC) sang bên trái (bắt đầu). Nói cách khác, bảo mật nên được thiết kế và tích hợp vào tất cả các giai đoạn trong quá trình phát triển. Sự thay đổi mới này đòi hỏi các nhà phát triển phải có quyền sở hữu an ninh và hiểu về các nguyên tắc bảo mật. Tin tốt là có rất nhiều công cụ có sẵn để giúp các nhà phát triển trong quá trình này.
Trong bài viết này, chúng ta sẽ chia Bảo mật Ứng dụng thành các lĩnh vực chính và tìm hiểu một số giải pháp mã nguồn mở miễn phí giúp các nhà phát triển và tổ chức đảm bảo mọi giai đoạn của SLDC, các thay đổi này giúp họ cải thiện chất lượng và bảo mật tổng thể phần mềm của họ.
Shifting left giống như thêm công việc bổ sung vào phần mềm của nhà phát triển, nhưng trên thực tế, nó cho phép các nhà phát triển tìm hiểu thêm về thực tiễn bảo mật, giúp giảm thời gian sữa lỗi và mất thêm một chút thời gian hơn để xây dựng các ứng dụng tuyệt vời.
Bảo mật ứng dụng trong quá trình lập trình phần mềm
Điều quan trọng nhất là bạn phải nhận ra rằng tất cả các lỗ hổng bảo mật ứng dụng không thể được sửa chữa bởi một phần mềm duy nhất. Bảo mật thành công đòi hỏi phải tiếp cận nhiều lớp với nhiều tuyến phòng thủ cho các giai đoạn khác nhau của SDLC.
Các công cụ chúng ta sẽ tìm hiểu bao gồm:
SAST – Static Application Security Testing (Kiểm tra bảo mật ứng dụng tĩnh)
DAST – Dynamic Application Security Testing (Kiểm tra bảo mật ứng dụng động)
IAST – Integrated Application Security Testing (Kiểm thử bảo mật ứng dụng tích hợp)
RASP – Run-time Application Self Protection (Tự bảo vệ ứng dụng trong thời gian chạy)
Dependency Scanning
Secrets Detection
Mặc dù sự thật là các lỗ hổng được chọn để kiểm tra sớm sẽ rẻ và dễ dàng khắc phục hơn, bạn không thể tìm kiếm tất cả các lỗ hổng trong giai đoạn đầu của quá trình phát triển. Bảo mật cần phải trải đều và được quan tâm trong toàn bộ quá trình SDLC.
Static Application System Testing – còn được gọi là “white box testing”, xuất hiện sớm nhất và là loại phổ biến nhất về bảo mật ứng dụng tự động. SAST quét mã nguồn của ứng dụng để tìm mọi lỗ hổng đã biết. Vì SAST không yêu cầu ứng dụng biên dịch hoặc chạy khi tìm lỗ hổng (không giống như DAST), nên nó được triển khai rất sớm trong SDLC.
Xem thêm:Hướng dẫn nhận Code giảm giá Lazada 50K
Nó cũng thực hiện các hướng dẫn và tiêu chuẩn mã hoá mà không cần thực thi mã cơ bản. Danh mục thử nghiệm ứng dụng này có sẵn rất nhiều giải pháp, vì vậy khi quyết định sử dụng một giải pháp, hãy đảm bảo giải pháp đó được hỗ trợ và thường xuyên được cập nhật. Dưới đây là một số công cụ SAST miễn phí tốt nhất.
NodeJsScan
NodeJsScan có giao diện dòng lệnh để tích hợp dễ dàng với các DevSecOps CI/CD pipelines và tạo ra các kết quả trong JSON.
Một tệp cấu hình có sẵn cho mỗi ngôn ngữ có thể được sửa đổi cho việc tìm kiếm. Tổng quan về các tệp, cũng như toàn bộ cơ sở code, có thể được hiển thị thông qua các số liệu thống kê và biểu đồ tròn. Chương trình có thể phát hiện lỗi tràn bộ nhớ đệm và lỗi trong code Java có thể chứa rủi ro bảo mật OWASP.
SonarQube
Được coi là một trong những công cụ đánh giá code tự động tốt nhất hiện có trên thị trường. SonarQube có hàng ngàn quy tắc phân tích code tĩnh (Static Code Analysis) tự động. SonarQube cũng hỗ trợ 27 ngôn ngữ hiện đại và lỗi thời (nói lỗi thời vậy chứ vẫn còn có nhiều giá trị lắm à nha) để SonarQube có thể bao quát toàn bộ dự án của bạn và sự phát triển của nó.
Dynamic Application Security Testing – còn được gọi là “black box testing”. kỹ thuật này không tìm lỗ hổng trong mã nguồn như SAST, mà là tìm lỗ hổng trong lúc ứng dụng đang chạy. Nó thực hiện điều này bằng cách sử dụng các kỹ thuật injection trên ứng dụng. DAST có thể xác định các lỗ hổng bảo mật phổ biến, chẳng hạn như SQL injection và XSS. DAST cũng chú ý tới các vấn đề như thời gian chạy không thể xác định được bằng phân tích tĩnh, các vấn đề về xác thực và cấu hình máy chủ, cũng như các lỗ hổng chỉ hiển thị khi người dùng đã đăng nhập.
OWASP ZAP
OWASP ZAP là công cụ DAST mã nguồn mở, miễn phí được trang bị đầy đủ tính năng, bao gồm cả tự động quét lỗ hổng và các công cụ để hỗ trợ việc pentest web-app thủ công. ZAP có một danh sách lớn các lỗ hỗng mà nó có thể khai thác hoặc xác định.
Interactive Application Security Testing – hay còn được gọi là “grey box testing”, là công nghệ kết hợp đồng thời các yêu tố của cả SAST và DAST. Nó thường được triển khai như một đặc vụ trong thời gian chạy thử nghiệm (ví dụ: thiết bị cho máy ảo Java[JVM] hoặc .NET CLR) để quan sát hoạt động hoặc các cuộc tấn công và xác định các lỗ hổng.
Contrast Security – Community
Contrast là sản phẩm đầu tiên dành cho các nhà phát triển có khả năng tìm hiểu sâu hơn vào các lỗ hổng khi không biết về bối cảnh thời gian chạy của ứng dụng như bộ điều khiển, logic ứng dụng, lớp dữ liệu, chế độ xem, thư viện người dùng, các thành phần của mã nguồn và máy chủ của ứng dụng.
Xem thêm:Lỗ hổng bảo mật trên Plugin Live Chat with Facebook Messenger
Runtime Application Self Protection – được cấu hình trên một máy chủ và sẽ khởi động khi ứng dụng chạy. Nó được thiết kế để phát hiện các cuộc tấn công vào một ứng dụng trong thời gian thực. Khi ứng dụng bắt đầu chạy, RASP có thể bảo vệ ứng dụng khỏi đầu vào hoặc các hành vi độc hại bằng cách phân tích cả hành vi của ứng dụng và bối cảnh của hành vi đó. Bằng cách sử dụng ứng dụng để liên tục theo dõi hành vi của chính nó, các cuộc tấn công có thể được xác định và giảm thiểu ngay lập tức mà không cần đến sự can thiệp của con người.
Sqreen
Sqreen Runtime Application Self-Protection xác định các cuộc tấn công khai thác lỗ hổng trong sản phẩm bằng cách tận dụng đầy đủ bối cảnh của các yêu cầu.
Sqreen bao gồm tất cả top 10 lỗ hổng bảo mật hàng đầu của OWASP như SQL injection, XSS và SSRF. Điều khiến Sqreen trở nên mạnh mẽ như vậy là khả năng tận dụng logic thực thi của các yêu cầu để chặn các cuộc tấn công với mức độ thất bại thấp hơn nhiều so với các giải pháp hiện có khác. Sqreen cũng có thể thích ứng với ngăn xếp riêng cụ thể của ứng dụng, do đó bạn không cần phải triển khai lại và cấu hình trong khi ứng dụng của bạn vẫn được setup đơn giản và nhanh chóng.
Denpendency Scanning giúp bạn tự động tìm các lỗ hổng bảo mật trong khi bạn đang phát triển và kiểm tra ứng dụng của mình, ví dụ như khi ứng dụng của bạn đang sử dụng thư viện (open source) dễ bị tổn thương.
Snyk
Synk là tổ chức đầu tiên của nhà phát triển với các giải pháp mã nguồn mở được duy trì tốt nhất cho các nhà phát triển. Synk cung cấp các giải pháp doanh nghiệp hiệu quả có sẵn cho các tổ chức lớn hơn.
Snyk có một loạt các tính năng tuyệt vời giúp biến bảo mật thành một phần của quá trình phát triển như khả năng phát hiện các lỗ hổng từ bên trong IDE của bạn và quét các navtive git để kiểm tra các dự án trong kho lưu trữ của bạn. Snyk cũng cung cấp một cổng bảo mật để ngăn các lỗ hổng mới đi qua quy trình xây dụng và môi trường sản phẩm để kiểm tra môi trường chạy của bạn nhằm đảm bảo không mắc phải các lỗ hổng hiện có.
WhiteSource Bolt for GitHub
WhiteSource giống như Snyk, cũng có một số công cụ miễn phí tuyệt vời cho các nhà phát triển cũng như các giải pháp doanh nghiệp cho các tổ chức lớn. WhiteSource Bolt for Github là một ứng dụng miễn phí, nó liên tục quét các repos của bạn, phát hiện các lỗ hổng của các thành phần trong mã nguồn và cung cấp các bản sửa lỗi. Nó hỗ trợ của kho riêng và kho công cộng.
Hơn 200 ngôn ngữ lập trình được hỗ trợ và theo dõi liên tục từ nhiều cơ sở dữ liệu lỗ hổng mã nguồn mở như NVD.
Các bí mật như key API, thông tin cơ sở dữ liệu và chứng chỉ bảo mật là những viên ngọc quý của các tổ chức vì nó có thể cung cấp quyền truy cập vào các hệ thống nhạy cảm.Secrets detection có thể quét mã nguồn, logs và các tệp khác để tiếp tục tìm các bí mật khác. Đây là một dich vụ đặc biệt vì hầu hết các bí mật thường luôn là các chuỗi entropy cao (các chuỗi được thiết kế để xuất hiện ngẫu nhiên), nhưng hầu hết các chuỗi entropy cao không phải là bí mật, nên chúng rất khó bị phát hiện. Nó đòi hỏi các thuật toán phân loại tiên tiến để phát hiện các bí mật với mức độ chính xác và recall cao.
Xem thêm:Hướng dẫn DDOS memcached và cách phòng chống
Secrets detection thường bị nhầm lẫn với SAST vì cả hai đều quét mã nguồn. Nhưng không giống như SAST, chỉ liên quan đến phiên bản hiện tại của ứng dụng, Secrets detection liên quan đến toàn bộ các phiên bản của dự án. Các hệ thống kiểm soát phiên bản như git, sẽ theo dõi và lưu trữ tất cả các thay đổi đối với một dự án. Nếu các phiên bản trước của mã nguồn chứa các bí mật được mã hoá cứng bên trong, đã bị xoá trong giai đoạn cuối, nên việc đánh giá code và các công cụ như SAST sẽ bỏ lỡ các bí mật này, do đó nó có thể nằm trong kho git và bị xâm phạm. Đây là lý do tại sao Secrets detection lại khác SAST.
GitGuardian
Công nghệ của GitGuardian hoạt động bằng cách quét các kho lưu trữ của nhà phát triển để tìm bằng chứng về dữ liệu nhạy cảm.
GitGuardian bao gồm hơn 300 loại dữ liệu nhạy cảm khác nhau từ key kết nối database, chứng chỉ SSL, đến username và password. Những dữ liệu này được phát hiện thông qua sự kết hợp của các thuật toán, bao gồm các kỹ thuật pattern matching (so trùng mẫu) tinh vi. GitGuardian có thể được tích hợp với tài khoản Github của bạn và được cấu hình trong vòng vài phút nên các nhà phát triển có thể sử dụng API GitGuardian để phát hiện dữ liệu trong bất kỳ dịch vụ nào, kể cả trong thư mục, ứng dụng email hoặc kênh Slack.
Tổng kết
Với rất nhiều giải pháp có sẵn, bạn có thể cảm thấy khó khăn khi quyết định chọn công cụ nào trong bài viết. Nhưng phải nhớ, hãy luôn xem xét công dụng của mỗi công cụ có phù hợp với quy trình công việc hiện tại của bạn không vì ngay cả các công cụ tuyệt vời cũng có thể trở nên vô dụng nếu chúng quá khó sử dụng.
Mỗi ứng dụng đều khác nhau và các công cụ được nêu ở trên nên được coi là mức bảo vệ tối thiểu, nếu bạn và tổ chức của bạn có thể không cần các giải pháp chi tiết hơn. Bảo mật là một trong những kỹ năng được đánh giá cao nhất của các nhà phát triển, mặc dù việc bảo mật có vẻ được xem như là một nhiệm vụ khó khăn, nhưng đó là một khoản đầu tư đáng giá để hiểu và thực hiện các hệ thống này trong toàn bộ vòng đời phát triển của ứng dụng.
Thế giới nhân sự đang thay đổi từng ngày. Và kỹ năng thích ứng nhanh nhẹn đã trở thành một kỹ năng cần thiết mà mọi chuyên gia nhân sự cần phải có. Tuy nhiên, để có thể bắt kịp xu thế chung của thời đại, nhà quản lý cần nhiều hơn thế. Bên cạnh tối ưu hóa những công cụ công nghệ hỗ trợ, trình độ chuyên môn cao thì năng lực lãnh đạo nhân sự đổi mới là bí quyết giúp họ nuôi dưỡng và phát triển nguồn lực nhân sự của tổ chức/doanh nghiệp.
Nghiên cứu thực tế và những con số
Không có một định nghĩa nào rõ ràng về năng lực lãnh đạo đổi mới. Có thể hiểu rằng, nó là nhóm năng lực được xây dựng và tập hợp dựa trên nhiều kỹ năng khác nhau. Chúng bỗ trợ nhau để tạo ra một tố chất dành riêng cho những nhà lãnh đạo nhân sự. Đặc biệt hơn, các tố chất đó nhằm hướng đến mục tiêu đào tạo và phát triển con người.
Trong một báo cáo từState of HRđược thông tin vào tháng 12 năm 2019, một khảo sát từ các chuyên gia nhân sự toàn cầu về những liên quan đến khái niệm năng lực lãnh đạo đổi mới. Thông qua tổng hợp và phân tích, kết quả được trình bày trong biểu đồ dưới đây:
Dưới đây là 3 đặc điểm được mô tả về các tố chất làm nên một người HR giỏi gồm:
1. Tư duy đổi mới
2. Kiến thức công nghệ
3. Kỹ năng tổ chức đa thế hệ
Nếu xem xét kỹ lưỡng, có rất nhiều kỹ năng liên quan đến HR. Nhưng xét trên khía cạnh chung, một số kỹ năng dường như chưa đủ thuyết phục. Vì thế, đối với mục đích của bài viết này, chúng ta sẽ khai thác chi tiết về ba đặc điểm giúp hình thành năng lực lãnh đạo đổi mới từ suy nghĩ chung của các chuyên gia nhân sự hàng đầu.
Tư duy đổi mới
Việc nắm bắt được xu thế của trí tuệ nhân tạo – EI và cách ứng dụng nó vào việc vận hành; quản lý các quy trình tuyển dụng nhân sự phức tạp là điều rất quan trọng trong thời đại phát triển như hiện tại. Khi AI phát huy sức mạnh, người thuộc lĩnh vực này sẽ có nhiều cơ hội hơn để tự phát triển mình.
Dưới đây là 3 cách thức giúp các nhà lãnh đạo thể nuôi dưỡng và phát triển năng lực này cho nhân viên của họ.
– Truyền cảm hứng và tạo động lực cho nhân viên của mình: Đặt ra các chương trình giúp họ rèn luyện chuyên môn và năng lực tư duy đổi mới. Điểm mấu chốt nằm ở việc tạo cơ hội nói lên những chia sẻ. Đó là cách tốt nhất để tôn trọng nhân viên. Đồng thời, tạo điều kiện cho những sáng kiến mới ra đời.
– Tập trung vào sự cố gắng của nhân viên và đánh giá cao những nỗ lực của họ: Thách thức của sự đổi mới thường đến sau sự thất bại. Đừng chỉ mãi tập trung vào kết quả. Vì như thế, bạn sẽ không bao giờ có thể tiến xa. Bạn có thể tuyên dương những nhân viên đạt thành tích tốt. Nhưng, đừng quên đi sự công nhận cho những cá nhân xứng đáng.
– Tạo chuỗi liên kết các giải pháp nhân sự, đào tạo: Tạo ra một trình tự luân phiên các ý tưởng. Tiếp đó là tiếp thu các phản hồi. Họ sẽ ngồi lại để thảo luận các vấn đề xoay quanh chuỗi ý tưởng. Từ đó đưa ra các đánh giá, giải pháp thích hợp. Đây được xem là cách thức phù hợp để kích thích tăng cường khả năng sáng tạo, tư duy đổi mới và tinh thần đồng đội.
Những kiến thức về công nghệ
Nhân viên ngày nay họ rất am hiểu khi nói đến những vấn đề công nghệ. Chúng ta có thể nhận thấy rõ sự khác biệt giữa người lớn – thế hệMillennials (1980 – 1994) vàthế hệ Z (1995 – 2012) qua những đặc điểm dưới đây:
Cả hai thế hệ đều là những nhóm người am hiểu về công nghệ. Điều này không có nghĩa là các thế hệ khác thiếu đi sự hiểu biết về công nghệ. Đây chỉ là một khái niệm khái quát. Và thông qua bạn thống kê mô tả. Ý quan trọng cần nhấn mạnh chính là các nhân viên của Thế hệ Z đã sẵn sàng.
Điều đặc biệt gì ở Thế hệ Z?
Thế hệ Z là nhóm thế hệ ra đời trong thời kỳ ổn định của sự phát triển công nghệ kỹ thuật trước khi nó bùng nổ và có những bước tiến đột phá như hiện nay.
Đây cũng là thế hệ được kỳ vọng kế thừa và phát triển về mọi mặt. Đặc biệt là việc kết hợp tư duy đổi mới và những am hiểu về công nghệ. Vì vậy, công nghệ có mối liên hệ mật thiết với năng lực tư duy đổi mới. Các nhà lãnh đạo nhân sự nên tạo cơ hội cho các nhân viên. Vì họ là những người trẻ cần sự trau dồi và hoàn thiện từng ngày. Thực tế cho thấy, họ sẽ là người vận dụng những gì học được vào lĩnh vực nhân sự. Đây được xem là cơ hội tốt để họ được đào tạo chuyên sâu. Đồng thời, hướng đến một nguồn lực đa nhiệm và đổi mới tư duy.
Kỹ năng tổ chức đa thế hệ
Một môi trường làm việc trung bình có thể bao gồm 4 thế hệ khác nhau. Tùy từng đặc tính ngành nghề và những yếu tố tác động như: văn hóa, tôn giáo, ngôn ngữ,.. mà số lượng các thế hệ có thể nhiều hoặc ít hơn.
Lãnh đạo nhân sự cần phải nhận ra rằng mỗi thế hệ đều sở hữu một bộ kỹ năng riêng. Văn hóa làm việc nhân sự có một ý nghĩa lớn đối với các thế hệ. Mức độ tương tác giao tiếp, khả năng vận dụng kỹ năng, kinh nghiệm đều bị yếu tố văn hóa chi phối. Thậm chí, có thể ảnh hưởng đến hiệu suất làm việc của từng cá nhân. Do vậy, kỹ năng tổ chức và phát triển mô hình đào tạo nguồn nhân lực đa thế hệ là rất quan trọng.
Hiểu được tầm quan trọng này, các hệ giá trị cần thiết đã được đặt ra đáp ứng nhu cầu đa văn hóa của các nhân viên: tính đa dạng trong giao tiếp nhân sự, sáng tạo đổi mới tư duy và tương tác hành vi.
Lời kết
Thực tế, còn rất nhiều kỹ năng có liên quan đến năng lực đổi mới chưa được phân tích. Đơn giản vì sự chi phối của chúng còn quá giới hạn. Và điều đó không có nghĩa là chúng ít quan trọng hơn. Dù đó là kỹ năng nào thì việc hoạch định các chiến lược cụ thể rất quan trọng. Đồng thời, đây cũng là cơ hội để đào tạo và phát triển nguồn nhân lực trẻ; giúp họ thích ứng với môi trường nhân sự đang có những bước tiến lớn, đáng mong đợi.
Danh sách liên kết đơn (Single Linked List) là một cấu trúc dữ liệu động, nó là một danh sách mà mỗi phần tử đều liên kết với phần tử đúng sau nó trong danh sách. Mỗi phần tử (được gọi là một node hay nút) trong danh sách liên kết đơn là một cấu trúc có hai thành phần:
Thành phần dữ liệu: lưu thông tin về bản thân phần tử đó.
Thành phần liên kết: lưu địa chỉ phần tử đứng sau trong danh sách, nếu phần tử đó là phần tử cuối cùng thì thành phần này bằng NULL.
Trước khi đi vào cài đặt danh sách liên kết đơn, hãy chắc chắn rằng bạn đã nắm vững phần con trỏ và cấp phát động trong C++. Do danh sách liên kết đơn là một cấu trúc dữ liệu động, nếu bạn không nắm vững con trỏ và cấp phát động sẽ rất khó để bạn hiểu được bài viết này. Nếu bạn cảm thấy chưa tự tin, hãy dành ít thời gian để xem bài viết này của mình. Còn bây giờ thì bắt đầu thôi!
Tạo node
Danh sách liên kết đơn được tạo thành từ nhiều node, do đó, chúng ta sẽ cùng đi từ node trước. Một node gồm hai thành phần là thành phần dữ liệu và thành phần liên kết. Thành phần dữ liệu có thể là kiểu dữ liệu có sẵn hoặc bạn tự định nghĩa (struct hay class…), trong bài viết này để đơn giản mình sẽ sử dụng kiểu int cho phần dữ liệu. Thành phần liên kết là địa chỉ đương nhiên sẽ là con trỏ, con trỏ này trỏ đến node tiếp theo, do đó, con trỏ này là con trỏ trỏ vào một node.
structNode{int data;
Node* next;};
Để tạo một node mới, ta thực hiện cấp phát động cho node mới, khởi tạo giá trị ban đầu và trả về địa chỉ của node mới được cấp phát.
Node*CreateNode(int init_data){
Node* node =new Node;
node->data = init_data;
node->next =NULL;// node vừa tạo chưa thêm vào danh sách nên chưa liên kết với phần tử nào cả nên phần liên kết gán bằng NULLreturn node;}
Tạo danh sách liên kết đơn
Ta đã có được thành phần tạo nên danh sách liên kết đơn là node, tiếp theo chúng ta cần quản lý chúng bằng cách biết được phần tử đầu và cuối. Vì mỗi phần tử đều liên kết với phần tử kế vậy nên tả chỉ cần biết phần tử đầu và cuối là có thể quản lý được danh sách này. Vậy đơn giản ta cần tạo một cấu trúc lưu trữ địa chỉ phần tử đầu (head) và phần tử cuối (hay phần tử đuôi tail).
structLinkedList{
Node* head;
Node* tail;};
Khi mới tạo danh sách, danh sách sẽ không có phần tử nào, do đó head và tail không trỏ vào đâu cả, ta sẽ gán chúng bằng NULL. Ta xây dựng hàm tạo danh sách như sau:
LinkedList list;CreateList(list);// Gán head và tail bằng NULL
Thêm phần tử vào danh sách
Thêm vào đầu
Để thêm node vào đầu danh sách, đầu tiên ta cần kiếm tra xem danh sách đó có rỗng hay không, nếu danh sách rỗng, ta chỉ cần gán head và tail của danh sách bằng node đó. Ngược lại nếu danh sách không rỗng, ta thực hiện trỏ thành phần liên kết vào head, sau đó gán lại head bằng node mới.
Như trong hình trên, chúng ta thêm node có data bằng 0 vào danh sách. Ta thực hiện trỏ next của node đó vào head của danh sách (chính là node đầu tiên của danh sách có data bằng 1), sau đó ta trỏ head vào node có data 0 vừa được thêm. Vậy là phần tử đó đã nằm ở đầu danh sách rồi.
Thêm vào cuối
Tương tự, để thêm node vào cuối danh sách, đầu tiên ta kiểm tra xem danh sách rỗng hay không, rỗng thì gán head và tail đều bằng node mới. Nếu không rỗng, ta thực hiện trỏ tail->next vào node mới, sau đó gán lại tail bằng node mới (vì bây giờ node mới thêm chính là tail).
Trong hình trên, chúng ta thực hiện thêm node có data bằng 6 vào danh sách. Tail hiện tại là node có data 5, thực hiện gán tail->next bằng node mới để nối thêm nó vào đuôi danh sách, lúc này node mới trở thành phần tử cuối danh sách nên ta gán tail lại bằng node mới.
Thêm vào sau node bất kỳ
Để thêm một node p vào sau node q bất kỳ, đầu tiên ta cần kiếm tra xem node q có NULL hay không, nếu node q là NULL tức là danh sách rỗng, vậy thì ta sẽ thêm vào đầu danh sách. Nếu node q không NULL, tức là tồn tại trong danh sách, ta thực hiện trỏ p->next = q->next, sau đó q->next = p. Tiếp theo chúng ta kiểm tra xem node q trước đó có phải là node cuối hay không, nếu node q là node cuối thì thêm p vào, p sẽ thành node cuối nên ta gán lại tail = p.
Thêm phần tử vào sau nút Q trong danh sách liên kết đơn
Trong hình trên, ta thêm node có data bằng 4 (node p) vào sau node có data bằng 3 (node q). Ta trỏ next của node p vào next của node q tức là node có data bằng 5, sau đó trỏ next của node q vào node p vậy là node p đã được thêm vào danh sách.
Xóa phần tử khỏi danh sách
Xóa ở đầu
Để xóa phần tử ở đầu danh sách, ta kiểm tra xem danh sách đó có rỗng hay không, nếu rỗng, ta không cần xóa, trả về kết quả là 0. Nếu danh sách không rỗng, ta thực hiện lưu node head lại, sau đó gán head bằng next của node head, sau đó xóa node head đi. Tiếp theo ta cần kiểm tra xem danh sách vừa bị xóa đi node head có rỗng hay không, nếu rỗng ta gán lại tail bằng NULL luôn sau đó trả về kết quả 1.
intRemoveHead(LinkedList& l,int& x){if(l.head !=NULL){
Node* node = l.head;
x = node->data;// Lưu giá trị của node head lại
l.head = node->next;delete node;// Hủy node head điif(l.head ==NULL)
l.tail =NULL;return1;}return0;}
Lưu ý trước khi xóa node head đi, ta dùng biến tham chiếu x để lưu trữ lại giá trị của node bị hủy để sử dụng.
Xóa phần tử đầu danh sách liên kết đơn
Trong hình trên, mình thực hiện xóa node đầu tiên có data bằng 0. Mình trỏ head đến next của node 0 (hiện đang là head), thì head lúc này sẽ là node 1, sau đó mình hủy đi node 0 là được.
Xóa ở sau node bất kỳ
Để xóa một node p sau node q bất kỳ, ta kiểm tra xem node q có NULL hay không, nếu node q NULL thì không tồn tại trong danh sách, do đó trả về 0, không xóa. Nếu node q khác NULL nhưng next của q là NULL, tức là p bằng NULL thì không xóa, trả về 0 (do sau q không có node nào cả, q là tail). Nếu node p tồn tại, ta thực hiện kiểm tra xem node p có phải là tail hay không, nếu node p là tail thì gán lại tail là q, tức là node trước đó để xóa node p đi.
Trong hình trên, ta thực hiện xóa node có data 3 (node p) sau node có data 2 (node q). Ta trỏ next của node q vào next của node p tức là node có data 4, sau đó xóa node p đi là xong.
Duyệt danh sách và in
Sau khi có các thao tác thêm, xóa, chúng ta có thể in ra danh sách để kiểm tra xem có hoạt động đúng hay không. Để in danh sách, ta duyệt từ đầu đến cuối danh sách và in ra trong lúc duyệt. Ta gán một node bằng head, sau đó kiểm tra xem node đó có NULL hay không, không thì in ra data của node đó, sau đó gán tiếp node đó bằng next của chính nó tức node đó bây giờ là node tiếp theo, cứ như vậy cho đến hết.
voidPrintList(LinkedList l){if(l.head !=NULL){
Node* node = l.head;while(node !=NULL){
cout << node->data <<' ';
node = node->next;// Chuyển sang node tiếp theo}}}
Lấy giá trị node bất kỳ
Để lấy giá trị phần tử trong danh sách, ta thực hiện duyệt tương tự như khi in phần tử. Ta sẽ tạo một biến đếm để biết vị trí hiện tại, duyệt qua các node cho đến khi node bằng NULL hoặc biến đếm bằng với vị trí node cần lấy. Kiểm tra xem nếu node khác NULL và biến đếm bằng vị trí cần lấy, ta sẽ trả về địa chỉ của node đó, ngược lại trả về NULL (danh sách rỗng hoặc là vị trí cần lấy nằm ngoài phạm vi của danh sách).
Node*GetNode(LinkedList& l,int index){
Node* node = l.head;int i =0;while(node !=NULL&& i != index){
node = node->next;
i++;}if(i == index && node !=NULL)return node;returnNULL;}
Tìm kiếm phần tử trong danh sách
Ý tưởng tìm kiếm phần tử cũng là duyệt danh sách, nếu như chưa tìm thấy thì tiếp tục duyệt. Sau khi kết thúc duyệt, ta chỉ cần kiểm tra xem node duyệt có bằng NULL hay không, nếu không tức là đã tìm thấy, ta sẽ trả về địa chỉ của node đó.
Để xóa danh sách, ta cần hủy tất cả các node tức là duyệt và hủy từng node. Ở đây mình sẽ dùng lại hàm RemoveHead. Đầu tiên, ta gán một node bằng head, kiểm tra nếu node đó khác NULL thì gọi RemoveHead và gán lại node bằng head tiếp, cứ lặp như vậy cho đến khi node đó NULL thì thôi. Sau khi xóa hết tất cả phần tử thì gán lại tail bằng NULL.
Vậy là trong bài này, mình đã giới thiệu với các bạn về danh sách liên kết đơn và một số thao tác cơ bản trên danh sách. Các bạn không nhất thiết phải làm theo cách của mình, có rất nhiều cách để thực hiện khác nhau, chỉ cần bạn nắm vững về con trỏ và cấp phát động trong C++. Nếu thấy hay, đừng quên chia sẻ cho bạn bè. Cảm ơn các bạn đã theo dõi bài viết!
#include<iostream>#include"LinkedList.hpp"usingnamespace std;intmain(){// Create a linked list
LinkedList list;CreateList(list);// Add sample data to list
Node* node;for(auto i =1; i <=10; i++){// Create new node with init data is i
node =CreateNode(i);// Add node to head// List that is added node by AddHead will be reversed//AddHead(list, node);// Add node to TailAddTail(list, node);}// Print listPrintList(list);
cout << endl;// Get list's lengthint len =Length(list);
cout <<"Length of list: "<< len << endl;// Get node at index 7
Node* nodeAtIdx7 =GetNode(list,7);if(nodeAtIdx7 !=NULL)
cout <<"Data at node have idx 7: "<< nodeAtIdx7->data << endl;// Search for 4 in list
Node* search4InList =Search(list,4);if(search4InList !=NULL)
cout <<"4 was founded"<< endl;else
cout <<"4 not Found"<< endl;// Remove node after 4 in listint x;int res =RemoveAfterQ(list, search4InList, x);if(res){
cout <<"Data of node has been removed: "<< x << endl;
cout <<"List after removed: ";PrintList(list);
cout << endl;}else
cout <<"Nothing is removed"<< endl;// Insert 2409 after node 4
Node* node2409 =CreateNode(2409);InsertAfterQ(list, node2409, search4InList);
cout <<"List after insert 2409 after 4: ";PrintList(list);
cout << endl;// Remove Head
res =RemoveHead(list, x);if(res){
cout <<"Data of node has been removed: "<< x << endl;
cout <<"List after removed head: ";PrintList(list);
cout << endl;}else
cout <<"Nothing is removed"<< endl;// Destroy all nodeDestroyList(list);return0;}
Hôm nay, mình sẽ hướng dẫn các bạn cách tạo ứng dụng tra số điện thoại đó xem nó thuộc Quốc gia bằng Python nhé. Cách thực hiện khá đơn giản vì chúng ta đã có sẵn các thư viện. Bài viết này khá basic vì dành cho người mới bắt đầu tim hiểu Python. Nếu bạn muốn học chuyên sau Python hãy comment bên dưới, anonyviet sẽ ra thêm các bài nâng cao hơn.
Đây là một ứng dụng tra số điện thoại rất đơn giản, do đó bạn chỉ cần có kiến thức cơ bản về Python để có thể hoàn thành ứng dụng này.
Bạn cần cài đặt các thư viện python ở trên để sử dụng trong ứng dụng này.
Cài đặt
pip install python-tk, phone-iso3166, pycountry
Mình sẽ sử dụng phone-iso3166 để xác định tên viết tắt của quốc gia rồi gán vô biến alpha_2 và pycountry để xác định tên đầy đủ của quốc gia đó bằng cách sử dụng alpha_2 mà chúng ta đã thu thập được từ phone-iso3166.
Giờ thì chúng ta đã biết cách lấy thông tin quốc gia từ số điện thoại, nhưng ứng dụng này vẫn hoạt động dưới dạng command line. Nên bây giờ, chúng ta sẽ thiết kế GUI cho ứng dụng.
Khi bạn nhập số điện thoại vào thì lưu ý số 0 đầu tiên thay bằng 84 nhé, ví dụ: 84304xxxxxx. Sau khi nhập xong, các bạn click Enter là có thể biết số điện thoại đó từ quốc gia nào rồi.
Xong rồi, bạn vừa tạo ứng dụng tra vị trí số điện thoại theo quốc gia của riêng mình rồi đó. Nếu bạn thấy ứng dụng này thú vị thì hãy chia sẽ cho bạn bè nhé. Bạn cũng có thể xem thêm cách ẩn thông điệp trong ảnh mà Anonyviet đã giới thiệu.
Bài viết được sự cho phép của tác giả Phạm Công Sơn
Sáng sớm dạo quanh một vòng facebook thấy có bạn đăng code “Callback Hell”
Callback Hell
Hồi sinh viên mình cũng code như thế đấy . Trước code cũng copy và copy. Hầu như không có tư duy kế thừa và tạo hàm tái sử dụng. Giờ các bạn muốn code tốt, chắc chắn những hàm như vậy phải viết lại và không có cách nào khác phải tối ưu. Một là để cho code gọn hơn, hai là để sau này dùng còn gọi lại được. Các bạn có thể đọc lại bài Tại sao code của tôi thường ngắn gọn như vậy để nắm bắt được cách code của tôi.
Quay trở lại việc tải một loạt các file js. Điều này chính là đã và đang được áp dụng trong phần mềm của tôi đang phát triển. Trong hệ thống của tôi, các module được tải, chuyển trang là Single Page. Chính vì vậy mỗi lần vào module thường phải tải các file js cần thiết của module đó (Mỗi module có yêu cầu một tập các file js cần tải). Nếu mà vẫn áp dụng như cách của bạn “Callback Hell” thì chắc không thể thực hiện được. Dưới đây là ví dụ một module của tôi.
Module quản lý chuyên mục cần phải tải 2 file js. ManageCategories.js và ManageCategoryNews.js
Lúc này khi tải module, server sẽ yêu cầu client tải 2 file js trước khi thực hiện chức năng trong module
Và đây là hàm tôi viết để thực hiện tải một danh sách các file js
Core.loadScripts = function (scripts, onFinish)
{
var length = scripts == null ? 0 : scripts.length;
if (length == 0)
{
onFinish();
return;
}
var fLoad = function (i) {
$.cachedScript(scripts[i], {
success: function (js, status) {
i++;
if (i >= length) onFinish();
else fLoad(i);
}
});
};
fLoad(0);
};
Ở đây gọi đệ quy và load tới khi file cuối cùng thì gọi hàm callback onFinish. Đến đây là đã có thể đáp ứng được nhu cầu của bạn “Callback Hell”. Tuy nhiên tại phần mềm của tôi còn viết thêm để tối ưu hơn. Đó là nếu các file mà đã tải rồi thì sẽ không cần thực hiện tải nữa. Vì vậy tôi đã viết thêm đoạn code sau:
Core.cacheScripts = [];
Core.getScriptsNeedLoad = function (scripts, callback)
{
var paths = Enumerable.From(scripts).GroupJoin(Core.cacheScripts, function (s) { return s.Src; }, function ($) { return $; },
function (s, cs) { return { s: s, cs: cs }; })
.Where(function ($) { return $.cs.Count() == 0; }).Select(function ($) { return $.s.Src; }).Distinct().ToArray();
Core.loadScripts(paths, function () {
Core.cacheScripts = Enumerable.From(Core.cacheScripts).Concat(paths).ToArray();
callback();
});
};
Ở đoạn code này có sử dụng linq.js mà tôi đã giới thiệu ở bài Thư viện Linq.js trong javascript. Core.cacheScripts là để lưu trữ các file đã được tải. Trong hàm Core.getScriptNeedLoad sẽ loại trừ những file đã tải rồi và chỉ thực hiện các file đã tải.
Như vậy tôi đã có hàm để tải nhiều file js và đã được sử dụng trong hệ thống phần mềm của mình. Chia sẻ để các bạn có thêm kinh nghiệm.
Vài năm gần đây có một sự phát triển mạnh mẽ của một ngôn ngữ mang tên Golang, đi đâu cũng nghe người ta bàn tán xôn xao về Go go go nghe giống như con gì đang kêu ấy nhỉ. Mà đúng thật không có gì khiến các lập trình viên điên loạn bằng thứ gọi là ngôn ngữ lập trình mới phải không?
Mình không phải là chuyên gia (expert) của ngôn ngữ lập trình này nhưng mình sẽ cố gắng chia sẻ những gì mình biết và đã học được, nên các anh chị đã là expert thì hãy đóng góp vào và chia sẻ kiến thức của mình để bài viết trở nên hoàn thiện hơn.
Giới hạn về phần cứng
Để nâng cao được hiệu suất của các ứng dụng thì việc đầu tiên chúng ta có thể nghĩ đến là nâng cấp phần cứng sử dụng CPU có nhiều core (nhân CPU) hơn, thêm bộ nhớ đệm (cache) nhưng những việc làm này đều có giới hạn của nó và điều phải bàn đến là giá cả.
Thay vì nâng cấp phần cứng chúng ta có cách khác là xây dựng những phần mềm hiệu quả hơn, tối ưu hơn để cải tiến được hiệu suất. Nhưng đáng buồn là hầu như các ngôn ngữ lập trình mới ngày nay không mang lại hiệu quả nhiều.
Go có cái gọi là goroutines
Các ngôn ngữ như Python hay Java là các ngôn ngữ sinh ra vào những thập niên 90 thời kỳ của môi trường đơn luồng (single threaded environment) nhưng hầu như các ngôn ngữ này đều hỗ trợ tính đa luồng (multi-threading). Nhưng vấn đề thật sự nằm ở việc thực thi đồng thời (concurrent execution), khóa luồng (threading-locking), race conditions và deadlocks. Những vấn đề này làm cho việc tạo ra các ứng dụng đa luồng trên các ngôn ngữ này cực kỳ khó khăn.
Nếu chúng ta muốn giao tiếp giữa các luồng với nhau bằng nhưng ngôn ngữ lập trình này là rất khó.
Go được ra mắt vào năm 2009 khi mà các vi xử lý đa nhân (multi-core processors) đã có. Đó là nguyên nhân tại sao mà Go được thiết kế và phát triển với lưu ý về việc thực thi đồng thời (concurrency), Go có goroutines thay cho threads.
Goroutine có ngăn xếp phân khúc có thể mở rộng (growable segmented stacks). Điều này có nghĩa là nó sẽ sử dụng nhiều bộ nhớ RAM hơn nếu điều đó là cần thiết.
Goroutines có thời gian khởi động nhanh hơn là threads.
Goroutines có các channel và giữa các channel này có thể giao tiếp với nhau.
Goroutines có khóa mutex (mutex locking) để đảm bảo việc đọc và ghi vào một cấu trúc dữ liệu hay một biến chung không xảy ra xung đột.
Go giao tiếp trực tiếp với vi xử lý bằng mã nhị phân (binaries)
Chúng ta có thể thấy rõ hiệu suất (performance) của ngôn ngữ C và C++ hơn hẳng so với Java hay Python bởi vì C/C++ là ngôn ngữ lập trình biên dịch (compiled programming language) chứ không phải là ngôn ngữ thông dịch (interpreted programming language).
Biên dịch là sao và thông dịch là như thế nào thì các bạn có thể tham khảo hình bên dưới.
Các vi xử lý (Processors) chỉ hiểu các lệnh ở dạng nhị phân (binaries), mà lập trình viên chúng ta thì sử dụng các ngôn ngữ mà con người có thể đọc được nhưng vi xử lý của máy tính thì lại không, vì vậy các chương trình sau khi được code xong bởi bàn tay khéo léo của các lập trình viên thì nó sẽ được chuyển sang mã máy ở dạng nhị phân (binaries) bằng cách này hay cách khác, để vi xử lý có thể hiểu được.
Ở các ngôn ngữ biên dịch (Compiled) như C, C++, Go, Pascal thì code sẽ được chuyển (Compiling) sang mã máy ở dạng các bit nhị phân (binaries) 10110011 gì đấy và sẵn sàng để chạy ngay và luôn.
Với các ngôn thông dịch (Interpreted) như Python, PHP, Ruby, Javascript thì code khi thực thi sẽ được chuyển sang byte code, với mã byte code thì trình thông dich (virtual machines) mới hiểu được, sau đó trình thông dịch này sẽ tiếp tục chuyển sang dạng nhị phân (binaries) để mà vi xử lý máy tính có thể hiểu được.
Go là ngôn ngữ biên dịch (Compiled) nên code sẽ được chuyển sang dạng (binaries) để thực thi chứ không cần thông qua trình thông dịch nữa, nên nó sẽ tăng được hiểu suất làm việc. Go là ngôn ngữ lập trình cấp cao nhưng nó có hiệu suất (performance) tốt cũng gần bằng các ngôn ngữ lập trình cấp thấp hơn như C, C++.
Code Go rất dễ dàng bảo trì và mở rộng
Go là ngôn ngữ lập trình phải nói là tinh gọn trong từng cú pháp, ít có những cú pháp dài dòng hay điên khùng như các ngôn ngữ lập trình khác.
Những người thiết kế ngôn ngữ Go tại Google luôn phải suy nghĩ 1 điều trong đầu, bởi Google là một công ty lớn và có hàng ngàn developer làm việc trên cùng một mã nguồn, vì thế code được thiết kế ra phải thật sự đơn giản, dễ đọc, dễ hiểu và hạn chế các thay đổi bên ngoài hàm (side effect) để các developer làm việc chung với nhau một cách nhanh và hiệu quả nhất.
Go đã lượt bỏ rất nhiều tính năng của các ngôn ngữ lập trình hướng đối tượng (OOP) hiện đại.
Mọi thứ được phân chia bằng các gói (packages), Go không có class mà thay vào đó Go có struct như ngôn ngữ C/C++.
Go không hỗ trợ việc kế thừa sẽ giúp code dễ dàng thay đổi. Đối với các ngôn ngữ như Java hay Python thì khi class CON kế thứ class CHA thì khi thay đổi class CHA thì sẽ có một số ảnh hưởng (side effects) tới các class CON được kế thừa từ CHA. Để code Go dễ hiểu hơn thì nó đã loại bỏ đi tính kế thừa.
Go không có hàm khởi tạo (constructors).
Go không có chú thích (annotations) như Java, nếu các bạn không hiểu thì có thể tìm kiếm trên Google để biết thêm các khái niệm này nhé.
Go không có generics, generics là loại kiểu chung chung đại diện cho một kiểu dữ liệu nào đó chưa biết trước, người ta hay đặt là kiểu T.
Go không có exception nhưng có error, đồng nghĩa với việc không có cú pháp try/catch.
Ngôn ngữ lập trình Go được thiết kế và hỗ trợ bởi Google. Google là một trong những công ty có cơ sở hạ tầng về clound server lớn nhất trên thế giới và nó đòi hỏi khả năng mở rộng (scalability) và tính hiệu quả cao vì thế Golang được thiết kế để giải quyết các vấn đề đó.
Go cũng được sử dụng tại các công ty lớn như BBC, IBM, Intel.
Tóm lại:
Mặc dù Go hơi khác biệt so với các ngôn ngữ lập trình hướng đối tượng nhưng nó vẫn chất lừ. Nó mang đến hiệu suất (performance) tốt như C/C++ và có trải nghiệm tốt khi viết code nhờ cú pháp tinh gọn như Python.
Để cải thiện hiệu suất của ứng dụng đừng ép phần cứng (hardware) phải làm việc cực lực mà hãy chia sẻ một phần gánh nặng đó cho các đoạn code, khi đó người dùng sẽ có trải nghiệm tốt hơn nhưng chi phí bỏ ra lại rẻ hơn.
Các ngôn ngữ khác có khái niệm song song(paralleism) còn go có khái niệm đồng thời (concurrency) vậy paralleism có khác gì so với concurrency không, mình sẽ tìm hiểu và chia sẻ vơi các bạn ở bài viết tiếp theo nha.
Bạn đã từng bắt đầu cuộc hành trình tìm ra cách kiến tạo tương lai bằng các cơ sở khoa học? Những dữ liệu nào được vận dụng để hiện thực hóa các giải pháp? Hội thảo Future Is Made In Finland sẽ cung cấp cho các bạn cái nhìn toàn cảnh về những bài học thực tiễn, các nguồn dữ kiện xoay quanh sự tiếp cận với thế giới, các bài học phát triển nhận thức, đào tạo chuyên sâu nhằm hướng đến việc định hình khoa học về tư duy.
Điều gì đặc biệt ở Chuỗi Hội thảo – Webinar Series: Future Is Made In Finland?
Chuỗi hội thảo trên cung cấp các cơ hội học tập, nghiên cứu, làm việc và hợp tác tại Phần Lan. Đồng thời, chúng tôi nhấn mạnh tầm quan trọng của một số lĩnh vực nghiên cứu và công nghệ. Bên cạnh đó, một số cách tiếp cận nổi bật ở thời điểm hiện tại được đội ngũ chúng tôi khai thác nhằm phát triển nâng cao quá trình chuyển đổi về một tương lai bền vững hơn. Chúng bao gồm AI, 5G/6G, quang tử và hình ảnh, kinh tế tròn, tư duy thiết kế. Tất nhiên, việc trải nghiệm học tập được thiết lập dựa trên sự đa dạng và bình đẳng.
Chúng tôi mở đăng ký chào đón tất cả những cá nhân có mong muốn trải nghiệm và tiếp cận hội thảo khoa học này. Bạn không chỉ là người học tập mà bạn còn là người hội nhập, thử sức trong một cuộc chơi với các chuyên gia đầu ngành. Vì thế, hãy tự mở ra cơ hội cho chính mình ngày hôm nay!
Thông tin chi tiết chuỗi Hội Thảo
Mở đầu cho chuỗi Hội thảo là tập đầu tiên bắt đầu từ thứ Tư tuần sau, ngày 14 tháng 10 lúc 16:00 theo giờ Việt Nam.
Chuỗi Hội Thảo trên web đầy đủ sẽ như sau:
14/10/2020 – 16h, EP I: Future is Made in Finland – want to be part of it?
26/10/2020 – 17h, EP II: Bioeconomy Defines the Future
28/10/2020 – 17h, EP III: Join the Revolution of Light and Image
3/11/2020 – 17h, EP IV: First in 6G
11/11/2020 – 17h, EP V: Get REAL, AI!
17/11/2020 – 17:00, EP VI: Future is Mad in Finland – Design it yourself!
[To be announced] EP VII: Future is Female – Discussion with Women in Sciences & Tech
Hãy tham gia cùng chúng tôi khám phá tương lai thông qua 7 giai đoạn tuyệt vời để hiểu về sự thay đổi, các thách thức đang tồn tại; cách mà khoa học đang giải quyết các vấn đề về các hệ sinh thái phát triển hàng đầu trên thế giới.
Chủ động nâng cao năng suất là một điều cần thiết mà mỗi doanh nghiệp cần phải quan tâm, thực hiện. Và việc áp dụng kỷ luật; truyền động lực là hai cách thức hiệu quả nhất để tăng năng suất. Tuy vậy, nhà quản lý sẽ đứng trước nhiều thách thức về tính cân bằng giữa hai hình thức giải pháp này. Cùng TopDev tìm hiểu về tầm quan trọng giữa chúng.
Bản chất của 2 át chủ bài quan trọng: Kỷ luật – Động lực
Kỷ luật được tạo ra nhằm hướng đến sự ổn định toàn diện về quy chế và lối ứng xử chung trong công sở. Điều này góp phần tạo ra giá trị thực – một phần cốt lõi của văn hóa danh nghiệp. Nó cần có, thật sự cần có. Và tất nhiên, kỷ luật cần được hoàn thiện dựa trên các cơ sở pháp lý sẵn có.
Kỷ luật giúp thắt chặt và thúc đẩy tinh thần trách nhiệm. Đồng thời, tạo cơ hội để mỗi nhân viên phát triển bản thân một cách toàn diện. Dù vậy, kỹ luật vẫn có những đặc tính riêng cần đảm bảo: Tính bắc buộc và tính hệ thống.
Song, dù nói gì kỷ luật vẫn là một trong những cách tốt nhất để duy trì hiệu quả công việc. Bởi lẽ, kỹ luật giúp nhân viên gia tăng sự tự tin, kiên nhẫn và dạy mỗi chúng ta cách vượt qua thất bại.
Động lực là yếu tố cần thiết mà mọi tổ chức cần phải quan tâm. Càng tạo nhiều động lực, bạn sẽ có cơ hội để thể hiện bản thân nhiều hơn. Đó cũng chính là cơ hội để bạn khám phá bản thân của mình.
Tại sao lại như thế? Đơn giản vì động lực làm kích thích khả năng học hỏi của con người. Đó là mấu chốt quan trọng tạo nên cá mong muốn chính đáng từ nhân viên – Tính thúc đẩy động lực từ nhà quản lý/chuyên gia nhân sự.
Hoặc bạn có từng nghĩ, điều gì sẽ xảy ra nếu bạn chưa thật sự kiểm soát được động lực. Nó cứ như cách bạn điều tiết nguồn năng lượng từ các cảm xúc khác nhau vậy. Bạn có thể vui, buồn, giận, hơn và động lực cũng thế. Khi quy chiếu vào thực tế, đôi lúc bạn có nhiều động lực và ngược lại, sẽ có lúc bạn sẽ thật tuyệt vọng.
Kỷ luật vẫn đang được quan tâm nhiều hơn?
Còn về kỷ luật thì sao? Nó khác động lực một chút? Vì cần thời gian để luyện tập và phát triển. Kỷ luật gắn liền với việc tuân thủ. Do vậy, bạn cần lưu tâm đến nó trong một khoảng thời gian nhất định.
Nói cách khác, kỷ luật của bản thân được tạo nên từ cơ sở thói quen thực hiện. Chúng ta không áp đặt mọi thứ luôn theo khuôn khổ. Trường hợp tự thân thực hiện (tức tính kỷ luật của bản thân) vẫn có những nó không là mẫu số chung. Đó chính là lý do tại sao kỷ luật tiếp tục đẩy chúng ta về phía trước. Trong khi động lực đôi khi lại làm chúng ta muốn từ bỏ mọi thứ!
Việc tạo động lực và kỷ luật đều quan trọng để thành công. Thế nhưng, trong quản trị nhân sự, có lẽ kỷ luật vẫn là yếu tố được đặt lên hàng đầu. Vì nếu bạn trau dồi và rèn luyện cho nhân viên một cách đủ tốt, họ vẫn sẽ làm việc theo quy củ mỗi ngày. Tất nhiên, mọi thứ chỉ mang tính tương đối.Sự cân bằng vẫn luôn quan trọng để tạo nên sức mạnh thật sự của một tổ chức/doanh nghiệp.
Kỷ luật & động lực – Sự kết hợp hoàn hảo
Mối tương quan giữa kỷ luật và động lực rất mạnh mẽ. Điều quan trọng là các nhà lãnh đạo nhân sự có nắm bắt được chúng hay không.
Trong một quỹ thời gian nhất định, các nhân viên sẽ rất cần kỷ luật để duy trì động lực. Về lâu dài, chính những thói quen nghiêm khắc sẽ giúp họ phát triển tốt hơn. Từ đó, nhân viên sẽ có cơ hội trải nghiệm, tiếp thu nhiều cái mới. Đồng thời, họ có nhiều động lực để khai phá tiềm năng của bản thân. Vì thế, động lực là thứ cần thiết để khởi động mọi thứ, giúp chúng ta sẵn sàng cho cuộc chơi chuyên nghiệp. Và kỷ luật là điều cần được duy trì để đảm bảo chúng ta đủ sức vượt qua các thách thức trên cuộc chơi chuyên môn ấy.
Làm thế nào để kết hợp hoàn hảo?
Để cho sự kết hợp này diễn ra hoàn hảo, một người quản lý cần ghi nhận và lắng nghenhững phản hồi từ nhân viên của mình. Điều này giúp nhà lãnh đạo/quản lý hiểu được những mong muốn của nhân viên cả về 2 khía cạnh. Khi có những đóng góp, nhà quản lý sẽ biết cách điều chỉnh các nội quy về kỷ luật, biết cách tạo ra những lợi ích thiết thực đáp ứng nhu cầu về sự đồng hành và phát triển lâu dài của mỗi ứng viên.
Hãy nhớ cân bằng mọi thứ! Áp dụng và phát huy tính triệt để từ hệ thống kỷ luật là một điều tốt. Song, vẫn phải quan tâm đến các hệ giá trị khác của nhân viên: phúc lợi, văn hóa doanh nghiệp, sự thăng tiến,…
Nếu một tổ chức mà thành công về mặt quản lý nhưng không tạo được động lực (truyền cảm hứng) thì doanh nghiệp ấy sớm muộn cũng sẽ nhanh chóng rơi vào bế tắc mà thôi
Lời kết
Mọi sự quan tâm nên được cụ thể hóa thành những hành động. Đó cũng chính là nhiệm vụ của mỗi nhà quản lý/lãnh đạo nhân sự. Hãy kết hợp tốt kỷ luật và động lực; đảm bảo tính công bằng để tạo ra tính ổn định, sự bền vững nhất cho tổ chức/doanh nghiệp của mình. TopDev hy vọng bài viết đã có những phân tích bổ ích cho bạn đọc. Đặc biệt là những cá nhân đang hoạt động trong lĩnh vực nhân sự. Hãy nhớ rằng, kỷ luật và động lực luôn có mối liên hệ đặc biệt. Và chúng ta cần làm là dành cho chúng một sự đầu tư đúng mực.
Tuyển Dụng Nhân Tài IT Cùng TopDev Đăng ký nhận ưu đãi & tư vấn về các giải pháp Tuyển dụng IT & Xây dựng Thương hiệu tuyển dụng ngay!
Hotline: 028.6273.3496 – Email: contact@topdev.vn
Dịch vụ: https://topdev.vn/page/products