Difference between revisions of "Category:Pragmatic Programming"
Jump to navigation
Jump to search
(→Topics) |
|||
(26 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
__NOTOC__ | __NOTOC__ | ||
+ | =Rationale= | ||
− | "Pragmatic Programming" is a course which was designed for new postgraduate students and members of staff | + | "Pragmatic Programming" is a course which was designed for new postgraduate students postdocs and members of staff alike. |
− | + | It is designed to address two key issues: | |
− | + | * The first pertains to the word 'science' and the key tenet of reproducibility. A well engineered model will be robust to a change of hardware or compiler. Too often, however, we find that running a model developed by one research group on the systems of another yields different results. How much are we to trust results which we cannot replicate? Not to mention the time wasted trying to track down the cause of the discrepancy. This considerations carry particular weight when model results are used to inform environmental policy in the face of climate change. | |
− | A | + | |
+ | * The second reason is that we simply cannot bear the cost of an ill-considered approach to model development. Time is money and grappling with poorly engineered, or simply un-designed models wastes huge amounts of time. One science experiment is often a slight variant upon another. Well engineered code can be quickly adapted for a following experiment. However, a change to Heath Robinson style creations which we often witness can present an impasse which requires huge efforts to overcome. Imagine this situation repeated hundreds of times over and a sobering waste of resources comes to mind. And this is before we contemplate the cost of tracking down bugs. | ||
+ | |||
+ | =Course content= | ||
+ | |||
+ | ==Foundations== | ||
+ | |||
+ | * [[Linux1|Linux1: Linux for beginners]] | ||
+ | * [[Linux2|Linux2: More advanced Linux]] | ||
+ | * [[Linux3|Linux3: Starting administration]] | ||
+ | |||
+ | ==languages== | ||
− | + | * [[Python1|Starting Python]] | |
+ | * [[MATLAB1|Starting MATLAB]] | ||
+ | * [[R1|Starting R]] | ||
+ | * [[Fortran1|Fortran1: Fortran for beginners]] <!--This is friendly introduction to Fortran and will guide you from '''writing your first program''' through to using more advanced data-types, such as '''arrays'''. Along the way, you will encounter Fortran's '''intrinsic data types''', logic such as '''conditionals''' and '''loops''', program structure and '''subroutines''' all the while providing pointers to '''good style''' and '''bug avoidance''' techniques.--> | ||
+ | * [[Fortran2|Fortran2: Intermediate Fortran]] <!--This tutorial follows on from Fortran1 and introduces features from Fortran90 which help us to write better, more maintainable programs. The topics covered include; dynamic memory allocation using '''allocatable arrays'''; flexible and easily extensible data-types through the use of '''user-derived types'''; enhanced modularity, encapsulation and error checking provided by '''modules'''. Linking your program to third party '''libraries''' is also covered, using '''NetCDF''' as an example.--> | ||
+ | * [[StartingC|StartingC: C for beginners]] | ||
+ | * [[CtoC++|CtoC++: Progressing from C to C++]] | ||
+ | * [[Polyglot|Polyglot: Mixed language programming]] <!--offers some concrete examples of '''mixed language''' programming, including the new '''Fortran2003 interoperability features'''. Mixed language programming provide huge time-savings if you have access to, say, a third party library of routines written in C which you would like to make use of inside your existing Fortran project.--> | ||
− | = | + | ==Tools== |
− | + | * [[Subversion|Subversion: The Subversion version control system]] <!--is fantastic tool for '''collaborating''', '''debugging''', '''disaster recovery''' and, well, '''general sanity preservation!'''. This tutorial gives you hands on practice for all the essential features.--> | |
+ | * [[Make|Make: Project building using Make]] <!--guides you step-by-step through the otherwise opaque magic of '''Makefiles''' and highlights how they can be brought into service not only for '''code compilation''', but also for '''automatic documentation''' creation and program '''testing'''. The combination of Subversion and Make opens the door to a nightly build for your project--a proven way to catch and correct bugs.--> | ||
− | = | + | ==Topics== |
− | * [[ | + | * [[Data|Working with data]] |
− | * [[ | + | * [[Profiling|Performance Analysis]] |
− | * [[ | + | * [[Debugging|Debugging]] <!--provide tips to help you find and improve any '''slow running regions of your program'''; and hints and tips for '''avoiding, finding and correcting''' any '''bugs''' that find their way into your code.--> |
− | * [[ | + | * [[Parallel|Parallel: Parallel programming using OpenMP]] |
− | * [[ | + | * [[NumMethodsPDEs|Numerical methods for solving PDEs]] |
Latest revision as of 15:07, 20 September 2013
Rationale
"Pragmatic Programming" is a course which was designed for new postgraduate students postdocs and members of staff alike.
It is designed to address two key issues:
- The first pertains to the word 'science' and the key tenet of reproducibility. A well engineered model will be robust to a change of hardware or compiler. Too often, however, we find that running a model developed by one research group on the systems of another yields different results. How much are we to trust results which we cannot replicate? Not to mention the time wasted trying to track down the cause of the discrepancy. This considerations carry particular weight when model results are used to inform environmental policy in the face of climate change.
- The second reason is that we simply cannot bear the cost of an ill-considered approach to model development. Time is money and grappling with poorly engineered, or simply un-designed models wastes huge amounts of time. One science experiment is often a slight variant upon another. Well engineered code can be quickly adapted for a following experiment. However, a change to Heath Robinson style creations which we often witness can present an impasse which requires huge efforts to overcome. Imagine this situation repeated hundreds of times over and a sobering waste of resources comes to mind. And this is before we contemplate the cost of tracking down bugs.
Course content
Foundations
languages
- Starting Python
- Starting MATLAB
- Starting R
- Fortran1: Fortran for beginners
- Fortran2: Intermediate Fortran
- StartingC: C for beginners
- CtoC++: Progressing from C to C++
- Polyglot: Mixed language programming
Tools
Topics
Pages in category "Pragmatic Programming"
The following 34 pages are in this category, out of 34 total.