Programming Scientists

Part VII Form How to be Programmer

Programming scientists are very advanced programmers, who instead of working on developing applications, work on developing computing technologies such as encryption, programming languages and data mining algorithms. This level is seldom achieved without academic study and dedication.
1. Accumulate the scientific knowledge equivalent to a B.A./Diploma degree in computer science. This can be done either by:
o Taking an actual academic degree (which is what usually happens)
o Getting the courses' outlines for such a degree from one of the modern universities and taking the courses either by self study or as separate courses. This could be achieved theoretically, but the recommended path is the first.
2. Decide a field of specialty. The more specific, the better. This depends on your preferences, however, here is a list of some of the major topics in computer programming science:
o Algorithm Design (searching, sorting, encryption, decryption ans error detection in communications are some examples)
o Programming Languages/Compiler Design/Optimization
o Artificial Intelligence fields (Pattern recognition, Speech recognition, Natural language processing, Neural Networks)
o Robotics
o Scientific programming
o Supercomputing
o Computer Aided Design/Modeling (CAD/CAM)
o Virtual reality
o Computer graphics - Computer graphics is usually wrongly confused with graphical design or graphical user interface design. Computer graphics is the field of studying how to represent and manipulate graphics in computer systems.
3. Consider getting a higher academic degree such as M.A. or even PhD.
4. Learn the technologies and programming languages related to your programming field of choice.

Source : wikihow.com

System Programmers

Part VI from How To Be Programmer

Programming scientists deal with the science of programming not the specific implementations of it. Do not tie yourself to a specific platform.
1. Follow the first three steps for Desktop Applications Programmers.
2. Take an introductory course in Linear Algebra.
3. Take a course in Calculus.
4. Take a course in Logic and/or Discrete Mathematics.
5. Introduce yourself to different bare operating systems. This can be done by:
o Getting an idea on how operating systems are installed.
o Learning how to install different operating systems on one PC(This is optional but recommended).
o Installing more than one operating system. Do not install any helping packages on the systems, use the bare functionalities provided by the operating systems.
6. Take a course(or alternatively read books) on computer hardware architecture.
7. Develop an understanding of the different computer hardware platforms.
8. 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)
9. Learn the ANSI C and C++ languages, along with the concepts of procedural programming.
10. Understand and practice C/C++ standard libraries on the platform of choice especially Standard Template Library (STL) and maybe Active Template Library (ATL).
11. Search online resources, books and courses to get an understanding of the C-flavor of your specific platform.
12. Practice creating advanced code with C and C++.
13. Learn more advanced Assembly
14. Take a course in operating systems design
15. 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.
16. Practice your acquired knowledge. First create small system utilities. It is usually useful to:
o Trying to recreate small tools that are already there on your system.
o Trying to port utilities available in other operating systems to yours.
17. 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++.
18. Restricting the first language to C and C alone is because systems programming requires that the programmer be familiar with the following concepts:
o Real and full compilation of source code.
o Low level object output files.
o Linking binaries.
o 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).

Computer and Information Scientists, Research in the USA have a Mean Annual Salary of $100,640

Source : Wikihow.com

Library/Platform/Framework/Core Programmers

Part V from How To be Programmer

Core programmers are merely advanced programmers who made the transfer from programming applications to programming code units to be used by other programmers.
1. Learn a programming language that supports building reusable components/packages if you have not done so already in 1.
2. Take an advanced course in UML and ORM. Most library developers use one or both of them.
3. Take a course in software engineering.
4. Learn at least modular, component-based, object oriented, and event-driven programming techniques and concepts. The more programming paradigms and languages you cover the more successful you become as a library/package programmer.
5. Learn more about the different operating systems and programming frameworks supported by these operating systems.
6. Focus your learning efforts on platform-independent frameworks, programming languages and technologies.
7. If the programming languages you learned so far have ANSI/ISO/IEEE/W3C standard versions, master the standards. Try to use standard code whenever possible.
8. Try to mimic simple, already established libraries, especially open-source ones. This is useful during the early phase of becoming a library/package programmer. Start with simple packages like units conversion and intermediate scientific calculations packages. If you are a collage student, make use of your non-programming courses by trying to implement their equations and scientific core as libraries.
9. Search for and try open-source packages in your field of programming. First download binaries/executables of the package. Try to use it and find its strong and weak points. After you've done that, download the source and try to figure out how it was done. Try to recreate those libraries or parts of them. At first do that after you've seen the code and later before you see the code. At later phases, try improving those libraries.
10. Learn the different approaches used to distribute and deploy components to programmers
11. Usually, library/package programmers tend to think recursively and/or iteratively of all problems they are presented with. Try to think of each problem as a collection of smaller problems (a sequence of simpler tasks) or as a repeated process of reducing the problem's scope to smaller scopes and then piling those scopes upon each other.
12. Library/package programmers tend to generalize. That is, when presented with a simple specific problem, they usually think of a more general problem and try to solve that general problem which will automatically solve the smaller one.

Source : wikihow.com

Related Links