Pragmatic Programming Understanding
I’m taking a break from my usual articles to write something for beginners starting to program: Brief, simple explanations of various concepts and programming terms. These came from explaining some concepts to my friend who was completing a curriculum in computer science.
Features vs Design vs Implementation
- Features: What the program can do
- Implementation: How the program does it
- Design: Planning features and implementations.
Programming paradigms
In programming we have logic (how), and data (what). Do note that these paradigms can be mixed.
Functional paradigm: It’s when you pass in data into logic, and have a new data as a result. E.g. Clojure.
Object Oriented paradigm: It’s when you place logic in data, and data uses signals to communicate between each other on what logic to trigger. E.g. Ruby
There are also paradigms that focus on what to control, the logical command or the logical result.
Imperative paradigm: You make logical commands that describe logic to change your data. E.g. C.
Declarative paradigm: You explain the final data result to program and it solves the commands to do it for you.
Types
Untyped languages are like maths. You focus on getting the algorithms right. Here we use schemas to restrict the range of data that can be correct. E.g. square root, but following schema of positive integers. This includes Python and Ruby.
Typed languages are like physics, you focus on getting the results right. Here types perform basic checking on intermixed values. For more complex checking to the level of schemas you need dependent types. This includes C and Haskell.
Mutability
Mutable means “can be changed. Immutability, the opposite, can prevent more human errors by making sure data can only be copied, but not changed. However, the trade off is that your program takes more space and is slower.
On the other hand, programs using mutable data structures can be very fast and use less memory but programmers will make more mistakes.
Project management
Scope: How much will you complete
Resources: How much can you use (including human resources)
Time: How long will you take
This brings us to the development styles:
Waterfall: Fixed scope, but flexible resources and time.
Agile: Fixed resources and time but flexible scope.
Spectrum of development
All of these require algorithm and data structure knowledge.
Front-end: User-facing application where you have less control over the environment. Can be web based, like HTML/JS/CSS, or native, like C++ or Java.
Back-end: Non-user-facing application where you have more control over the environment. Any language can be a backend language.
Infrastructure and Operations: Applications that host the front-end or back-end applications, and how to transfer the front-end application to the user etc
Data engineering: Applications that gather and clean data for use in other applications like AI applications.