Programming scientists deal with the science of programming not the specific implementations of it. Do not tie yourself to a specific platform.
- Follow the first three steps for Desktop Applications Programmers.
- Take an introductory course in Linear Algebra.
- Take a course in Calculus.
- Take a course in Logic and/or Discrete Mathematics.
- Introduce yourself to different bare operating systems. This can be done by:
- Getting an idea on how operating systems are installed.
- Learning how to install different operating systems on one PC(This is optional but recommended).
- Installing more than one operating system. Do not install any helping packages on the systems, use the bare functionalities provided by the operating systems.
- Take a course(or alternatively read books) on computer hardware architecture.
- Develop an understanding of the different computer hardware platforms.
- Get an introductory familiarization with the assembly language of the hardware platform/operating system of choice (you will later learn the assembly of other platforms/systems)
- Learn the ANSI C and C++ languages, along with the concepts of procedural programming.
- Understand and practice C/C++ standard libraries on the platform of choice especially Standard Template Library (STL) and maybe Active Template Library (ATL).
- Search online resources, books and courses to get an understanding of the C-flavor of your specific platform.
- Practice creating advanced code with C and C++.
- Learn more advanced Assembly
- Take a course in operating systems design
- Find and read documentations of your specific platform of choice(this will be easier if you choose a Unix-based operating system). Understand the system you will be working with later very well.
- Practice your acquired knowledge. First create small system utilities. It is usually useful to:
- Trying to recreate small tools that are already there on your system.
- Trying to port utilities available in other operating systems to yours.
- This is the only place were the first programming language matters. Learn ANSI C first, not C++, not C#, not Java and not D. Then learn C++.
- Restricting the first language to C and C
alone is because systems programming requires that the programmer be
familiar with the following concepts:
- Real and full compilation of source code.
- Low level object output files.
- Linking binaries.
- Low level machine-language/assembly programming. The C language is said to be a disguised/easier to learn assembly by some. It also supports inserting assembly language code in code whenever you please and it is only procedural (like assembly).