Lập trình Hệ thống Lập trình Web Lập trình Thư viện/Nền tảng/Khung công việc/Lõi Lập trình Ứng dụng phân tán Khoa học Lập trình
Các lập trình viên hệ thống làm việc với “khoa học” của lập trình chứ không phải những công việc thực hiện cụ thể của nó. Đừng bó buộc mình với một nền tảng cụ thể nào.     Điều này có thể được thực hiện bằng cách:  Hiểu được cách cài đặt các hệ điều hành. Học cách cài đặt các hệ điều hành khác nhau trên một PC (tùy chọn, nhưng nên làm). Cài đặt nhiều hơn một hệ điều hành. Đừng cài đặt bất kỳ gói phụ trợ nào khác lên hệ thống; thay vào đó chỉ sử dụng các chức năng cơ bản được hệ điều hành cung cấp.   Sau này bạn sẽ học thêm hợp ngữ của các hệ điều hành/nền tảng khác.  Đặc biệt lưu ý tới Thư viện mẫu tiêu chuẩn (STL) và có thể cả Thư viện mẫu hoạt động (ATL).     Điều này sẽ dễ dàng hơn nếu bạn chọn một hệ điều hành dựa trên Unix. Hãy nắm vững hệ thống mà bạn sẽ làm việc về sau. Trước tiên hãy tạo một số tiện ích hệ thống nhỏ. Sẽ thường hữu ích nếu bạn:   Thử tái tạo các công cụ nhỏ có sẵn trên hệ thống của bạn. Thử chuyển các tiện ích có sẵn trên các hệ điều hành khác sang hệ điều hành của bạn. Đây là mảng duy nhất mà ngôn ngữ lập trình đầu tiên được học có ý nghĩa của nó. Hãy học ANSI C trước, chứ không phải C++, C#, Java hay D trước. Sau đó mới học C++. Giới hạn ngôn ngữ đầu tiên vào C và chỉ có C bởi vì lập trình các hệ thống đòi hỏi lập trình viên phải quen thuộc với các khái niệm sau:  Biên dịch thực tế và toàn bộ mã nguồn. Các tập tin đầu ra đối tượng cấp thấp. Các mã nhị phân liên kết. Ngôn ngữ máy cấp thấp/lập trình hợp ngữ. Nhiều người cho rằng ngôn ngữ C có thể thay thế và dễ dàng hơn để học hợp ngữ. Nó còn hỗ trợ việc chèn mã hợp ngữ vào trong mã bất cứ khi nào bạn thích và nó chỉ có tính thủ tục (giống như hợp ngữ). Các ứng dụng Web là các thành phần phần mềm được thiết kế để hoạt động bên trên kiến trúc internet. Điều này có nghĩa là các ứng dụng được truy cập thông qua một phần mềm trình duyệt như Firefox hoặc Internet Explorer. Các ứng dụng này được đặt bên trên kiến trúc Internet tức là nó không đòi hỏi phải có một kết nối thực sự tới Internet. Có nghĩa là các ứng dụng Web được xây dựng trên nền tảng các công nghệ web tiêu chuẩn như:  HTTP FTP POP3 SMTP TCP Các giao thức IP HTML XML Coldfusion ASP JSP PHP ASP.NET (Bằng cách nhấn chuột phải, rồi chọn View Source (xem mã nguồn) hoặc nhấn F12). Bạn nên tìm kiếm sự đa dạng trong kiểu/nội dung của trang web, chứ không phải là số lượng các trang web bạn xem. Nhìn chung, bạn sẽ cần ghé thăm ít nhất một trang cho mỗi loại trang web sau:   Các trang giới thiệu công ty (các công ty thương mại, các công ty/tổ chức phi lợi nhuận, các tổ chức chính phủ) Các công cụ lập chỉ mục Web (các công cụ tìm kiếm, các trang siêu tìm kiếm, các công cụ tìm kiếm chuyên dụng, các thư mục) Các trang khai thác dữ liệu Các trang cá nhân Các trang có tính tư liệu/bách khoa toàn thư (Wiki, các bảng dữ liệu, các tiêu chí kỹ thuật, và các thư mục liệt kê hướng dẫn người dùng, các blog và tạp chí, các trang tin tức và thông tấn, các trang vàng …) Các trang xã hội (các cổng xã hội, các trang đánh dấu và các trang ghi chép trực tuyến) Các trang cộng tác (bao gồm toàn bộ các loại ở trên, như các trang wiki và blog) Ví dụ: các biểu đồ động não và phần mềm MS Visio. Đây là việc tạo nên các biểu đồ web có tính khái niệm, sơ đồ trang và các cấu trúc điều hướng. Hãy cố học ít nhất một gói phần mềm biên tập/thao tác đồ họa (Không bắt buộc nhưng rất khuyến khích). Nó bao gồm việc nắm bắt ý tưởng cơ bản về:   Các giao thức dịch vụ Web thông dụng (HTTP, FTP, SMTP, và POP3 hay IMAP4) Phần mềm máy chủ Web (tốt nhất là phần mềm cho nền tảng mà bạn sẽ làm việc chủ yếu với nó nhiều nhất) Phần mềm duyệt Web. Phần mềm máy chủ và máy khách cho email Bạn có thể cũng cần có gói phần mềm “What You See Is What You Get (WYSIWYG) (Những gì bạn thấy là những gì bạn có)” để biên tập HTML.   Hầu hết người dùng học JavaScript. Một số khác học VBScript, nhưng nó lại không tương thích với phần lớn các trình duyệt. Cố phát huy hết khả năng của bạn chỉ với ngôn ngữ đó. Chỉ đi tiếp khi bạn ít nhất cũng đã quen thuộc với ngôn ngữ lập trình kịch bản máy khách. Nếu bạn chọn giới hạn mình vào một phần mềm máy chủ, thì hãy học các ngôn ngữ lập trình được phần mềm đó hỗ trợ. Nếu không, hãy học ít nhất một ngôn ngữ lập trình cho mỗi phần mềm máy chủ.   Các lập trình viên lõi đơn thuần là những lập trình viên cao cấp có nhiệm vụ chuyển các ứng dụng lập trình sang các đơn vị mã lập trình để các lập trình viên khác sử dụng.  Hầu hết các nhà phát triển thư viện sử dụng một hoặc cả hai thứ này.  Bạn càng am hiểu nhiều mô hình và ngôn ngữ lập trình, bạn càng thành công hơn trong việc trở thành một lập trình viên thư viện/gói.   Hãy cố sử dụng mã tiêu chuẩn bất cứ khi nào bạn có thể. Điều này rất hữu dụng trong giai đoạn đầu để trở thành một lập trình viên thư viện/gói. Bắt đầu với những gói đơn giản như các gói chuyển đổi đơn vị và tính toán khoa học trung cấp. Nếu bạn là sinh viên, hãy tận dụng các môn phi lập trình bằng cách thử thực hiện các phương trình và nhân khoa học của chúng như các thư viện. Trước tiên hãy tải về các phần nhị phân/thực thi được của gói. Thử sử dụng nó và tìm các điểm mạnh và điểm yếu. Sau khi xong, hãy tải mã nguồn về và thử tìm hiểu xem nó được thực hiện như thế nào. Hãy thử tái tạo lại các thư viên đó hoặc các phần của chúng. Trước hết, hãy làm điều đó sau khi bạn đã thấy mã nguồn và sau đó thì làm trước khi bạn thấy mã nguồn. Ở các giai đoạn sau, hãy thử cải tiến các thư viện đó. Thông thường, các lập trình viên thư viện/gói có khuynh hướng suy nghĩ một cách đệ quy và/hoặc lặp lại về tất cả các vấn đề được đưa ra cho họ. Hãy thử nghĩ về mỗi vấn đề như một tập hợp của các vấn đề nhỏ hơn (một chuỗi các tác vụ đơn giản hơn) hoặc như một quy trình lặp lại của việc để giảm phạm vi vấn đề xuống các phạm vi nhỏ hơn và rồi xếp chồng các phạm vi đó lên nhau. Các lập trình viên thư viện/gói có xu hướng khái quát hóa. Đó là khi được trình bày một vấn đề cụ thể đơn giản, họ thường nghĩ tới một vấn đề tổng quát hơn và cố giải quyết vấn đề tổng quát đó để rồi nó sẽ tự động giải quyết các vấn đề nhỏ hơn. Lập trình ứng dụng phân tán được nhiều người xem là một trong những thứ khó học nhất và đòi hỏi kiến thức phong phú về máy tính cũng như các công nghệ truyền thông. Bước này là tùy chọn. Tuy nhiên việc có hiểu biết về các cấu trúc liên kết mạng là rất hữu ích.  Bạn cần có hiểu biết tốt về mô hình Kết nối các hệ thống mở (OSI), Ethernet, IP, TCP, UDP và HTTP trước khi bắt đầu với lập trình các ứng dụng phân tán.  Đối với lập trình trên nền Windows, đó có thể là bất kỳ kịch bản nào làm việc với Windows Scripting Host. Đối với lập trình trên nền Linux, các kịch bản Bash và Perl sẽ là đủ dùng. JavaScript rất được khuyến khích cho việc này ở cả hai nền tảng vì các lý do sau:   Nó được hỗ trợ bởi hầu hết các công cụ cung cấp kịch bản trong bất kỳ hệ điều hành nào (Windows Scripting Host mặc định hỗ trợ JavaScript, đa phần các bản phân phối Linux đều có một gói hỗ trợ giao tiếp kịch bản JavaScript). Nó được nhiều lập trình viên cho là dễ học hơn . Nó có một cú pháp bắt nguồn từ ALGOL cho phép bạn quen với nhiều ngôn ngữ lập trình khác khi bạn cần chọn một ngôn ngữ lập trình thứ hai C, C++, C#, Java và J# đều có cú pháp bắt nguồn từ ALGOL. Bằng việc học JavaScript, bạn sẽ tự quen dần với việc lập kịch bản trên máy khách cho các trang web, rõ ràng là một tác dụng phụ có lợi! Sau đó, bạn có thể sử dụng thêm các kỹ thuật và mô hình lập trình nâng cao theo ngôn ngữ lập trình kịch bản của bạn và những gì nó hỗ trợ. Tất cả các ngôn ngữ lập trình kịch bản đều có liên quan tới lập trình thủ tục ở mức độ nào đó. Tìm hiểu những gì cần thiết để làm được việc đó. Chỉ cần thông tin liên lạc đơn giản là đủ. Tốt nhất là một ngôn ngữ đa mô hình như Python. Tìm hiểu sơ bộ về ngôn ngữ thứ hai này. Java là ngôn ngữ được hầu hết các lập trình viên lựa chọn vì nhiều lý do. Tuy nhiên, C# lại giúp tạo đà nhanh hơn ở mảng này. Java và C# được ưa chuộng vì các lý do sau:  Chúng là các ngôn ngữ lập trình hướng đối tượng giúp cho các lập trình viên trong các nhóm lớn tránh được việc thực hiện các chi tiết vì chúng đều có khả năng hỗ trợ các thành phần (có nghĩa là các đơn vị mã, tiền biên dịch thực hiện cho một tác vụ cụ thể có thể được sử dụng trong các chương trình khác) Chúng hỗ trợ lập trình theo sự kiện cũng như OO (hướng đối tượng) và lập trình thủ tục ở một mức độ nào đó. Khung công việc mà ngôn ngữ được xây dựng trên đó có đặc điểm bản chất là phân tán (trong trường hợp Java). Có nhiều gói lập trình được tạo sẵn để xử lý việc kết nối mạng, ở cả dạng mã nguồn mở hay tích hợp sẵn trong khung công việc; điều này tạo thuận lợi cho lập trình viên khi làm việc trên sản phẩm của những người khác. Chú ý ít hơn vào các yếu tố giao diện người dùng như xuất thông tin ra, thiết kế và các kỹ thuật cho cửa sổ làm việc, và các yếu tố giao diện người dùng. Bạn có thể học qua sách vở, các bài hướng dẫn trên mạng hoặc các khóa học học thuật. Tuy nhiên, dù làm bằng cách nào bạn cần nắm bắt được kiến trúc của các ứng dụng phân tán và các khái niệm của nó.  Ít nhất bạn nên tìm hiểu qua toàn bộ chúng. Đa phần các lập trình viên ứng dụng phân tán không chỉ học một hay hai ngôn ngữ lập trình, mà ít nhất là một ngôn ngữ lập trình trên mỗi hệ điều hành. Đó là vì nếu bạn muốn ứng dụng của bạn được “phân tán”, ít nhất bạn phải cung cấp một phiên bản của nó cho mỗi hệ điều hành phổ biến.  Common Object Request Broker Architecture (CORBA) (Kiến trúc môi giới các đối tượng chung) Simple Object Access Protocol (SOAP) (Giao thức truy cập đối tượng đơn giản) Asynchronous JavaScript and XML (AJAX) (JavaScript và XML không đồng bộ) Distributed Component Object Model (DCOM) (Mô hình đối tượng thành phần phân tán) .NET Remoting (Giải pháp xử lý tính toán từ xa) XML Web Services (Các dịch vụ Web XML) Các nhà khoa học lập trình là những lập trình viên rất cao cấp thay vì phát triển các ứng dụng, thì họ phát triển các công nghệ tính toán như mã hóa, các ngôn ngữ lập trình và các thuật toán khai thác dữ liệu. Mức độ này hiếm khi đạt được mà không có sự nghiên cứu học thuật và chuyên sâu. Điều này có thể đạt được bằng một trong các cách:   Học lấy một bằng cấp học thuật thực sự (thực tế thường là như vậy). Tìm đề cương môn học cho một bằng cấp như vậy từ một trong các trường đại học hiện có và tự học các môn này hoặc là tham gia các khóa học riêng. Về mặt lý thuyết bạn có thể đạt được điều này, nhưng bạn nên đi theo con đường đầu tiên. Càng cụ thể thì càng tốt. Điều này tùy thuộc và sở thích của bạn. Tuy nhiên, sau đây là một danh sách các chủ đề chính trong khoa học lập trình máy tính:  Thiết kế thuật toán (tìm kiếm, phân loại, mã hóa, giải mã và phát hiện lỗi trong thông tin liên lạc là một vài ví dụ) Thiết kế/tối ưu hóa các ngôn ngữ lập trình/trình biên dịch Các mảng trí tuệ nhân tạo (nhận dạng mẫu, nhận dạng giọng nói, xử lý ngôn ngữ tự nhiên, các mạng nơ ron) Khoa học người máy Lập trình khoa học Siêu tính toán Thiết kế/mô hình hóa trợ giúp bởi máy tính (CAD/CAM) Thực tại ảo Đồ họa máy tính (Đồ họa máy tính thường bị nhầm lẫn với thiết kế đồ họa hay thiết kế giao diện đồ họa người dùng. Đồ họa máy tính là lĩnh vực nghiên cứu cách thể hiện và thao tác đồ họa trong các hệ thống máy tính). Bạn có thể theo đuổi một chương trình đào tạo thạc sĩ hoặc tiến sĩ. 
Hiểu xem lập trình hệ thống đòi hỏi những gì. Thực hiện theo ba bước đầu tiên để trở thành các Lập Trình Viên Ứng Dụng Máy Bàn. Tham gia một khóa mở đầu về Đại số Tuyến tính. Học một khóa về Tính toán. Tham gia một khóa học về Lô gic học và/hoặc Toán rời rạc. Tự làm quen với các hệ điều hành cơ bản khác nhau. Tham gia một khóa học (hoặc có thể đọc sách) về kiến trúc phần cứng máy tính[[. Phát huy hiểu biết về các nền tảng phần cứng máy tính khác nhau. Làm quen bước đầu với hợp ngữ của hệ điều hành/nền tảng phần cứng mà bạn chọn. Học các ngôn ngữ ANSI C và C++, cùng với các khái niệm về lập trình thủ tục. Hiểu rõ và thực hành các thư viện C/C++ tiêu chuẩn trên nền tảng bạn chọn. Tìm kiếm các tài nguyên trực tuyến, sách vở và các khóa học để hiểu được đặc tính của C trên nền tảng bạn chọn. Thực hành tạo mã nâng cao với C và C++. Học thêm Hợp ngữ cao cấp. Học một khóa về thiết kế hệ điều hành. Tìm và đọc các tư liệu về nền tảng cụ thể mà bạn chọn. Thực hành những kiến thức bạn có được. Học các ngôn ngữ theo thứ tự hữu ích nhất. Hiểu được lập trình Web cần gì. Hãy xem nhiều trang khác nhau để biết chúng thường trông như thế nào. Học ít nhất một kỹ thuật/phương pháp động não (brainstorming) và một phần mềm dùng để thực hiện phương pháp đó. Làm quen với cấu trúc trang web. Học một khóa đào tạo cấp tốc về thiết kế đồ họa. Học các khái niệm cơ bản về hạ tầng internet. Học các ngôn ngữ HTML và CSS. Học XML và các công nghệ liên quan tới XML như XSL và XPath (không bắt buộc nhưng nên học). Tạo các trang web tĩnh đơn giản cho tới khi bạn quen thuộc và nắm vững với HTML. Học một ngôn ngữ lập trình kịch bản máy khách. Tự làm quen với ngôn ngữ lập trình kịch bản máy khách mà bạn đã học. Học ít nhất một ngôn ngữ lập trình máy chủ. Lập một dự án thí điểm cho bản thân sau khi bạn hoàn tất việc nghiên cứu ngôn ngữ lập trình máy chủ. Lập một trang web riêng và bắt đầu thử nghiệm trực tuyến với trang riêng của bạn. Hiểu được lập trình lõi là gì. Nếu bạn chưa học, thì hãy học một ngôn ngữ lập trình hỗ trợ cho việc xây dựng các thành phần/gói tái sử dụng được. Học một khóa nâng cao về UML và ORM. Tham gia một khóa về kỹ thuật phần mềm. Ít nhất phải tìm hiểu các kỹ thuật và khái niệm lập trình dạng mô đun, dựa trên thành phần, hướng đối tượng và theo sự kiện. Học thêm về các hệ điều hành khác nhau và các khung công việc lập trình được hỗ trợ bởi các hệ điều hành này. Tập trung nỗ lực học tập của bạn vào các khung công việc, các ngôn ngữ lập trình và các công nghệ độc lập với nền tảng. Nếu các ngôn ngữ bạn học cho đến giờ có các phiên bản theo tiêu chuẩn ANSI/ISO/IEEE/W3C, thì hãy nắm vững các tiêu chuẩn. Hãy thử bắt chước các thư viện đơn giản đã được lập sẵn, đặc biệt là các thư viện mã nguồn mở. Tìm kiếm và thử các gói nguồn mở trong lĩnh vực lập trình của bạn. Hãy nghiên cứu các phương pháp tiếp cận khác nhau để phân phối và triển khai các thành phần tới các lập trình viên. Tìm hiểu về lập trình ứng dụng phân tán. Tìm hiểu cấp tốc về các hệ thống thoại và phần cứng của chúng. Tự làm quen với kiến trúc phần cứng và các thiết bị làm việc mạng như các bộ tập trung trung tâm (hub), thiết bị chuyển mạch (switch) và định tuyến (router). Học một khóa học về các giao thức và những thứ cơ bản liên quan. Học ngôn ngữ XML và tự làm quen với nó. Bắt đầu bằng việc học một ngôn ngữ lập trình kịch bản cho chương trình thông dịch lệnh. Đầu tiên, chỉ áp dụng lập trình thủ tục bằng ngôn ngữ kịch bản mà bạn chọn. Sử dụng ngôn ngữ lập trình kịch bản bạn đã học để viết các kịch bản thực hiện việc thông tin giữa các máy. Chuyển đổi sang một ngôn ngữ lập trình/kịch bản máy bàn. Tập trung hơn vào các tính năng cốt lõi của ngôn ngữ, đặc biệt là những tính năng hỗ trợ kết nối mạng. Tham gia một khóa đào tạo về thiết kế và kiến trúc ứng dụng phân tán. Học cách xây dựng các thành phần dịch vụ cũng như sử dụng ngôn ngữ lập trình bạn chọn. Học một hoặc nhiều hơn các công nghệ sau. Biết được một nhà khoa học lập trình làm gì. Tích lũy kiến thức khoa học tương đương với bằng cấp 4-năm trong ngành khoa học máy tính. Chọn lựa mảng chuyên ngành. Cân nhắc việc lấy một bằng cấp học thuật cao hơn. Học các công nghệ và ngôn ngữ lập trình liên quan tới lĩnh vực lập trình bạn chọn.
https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer
System Programming Web Programming Library/Platform/Framework/Core Programming Distributed Applications Programming Programming Science