Computer Programming - A Rough Guide
Tags: career, beginners, discuss
Published: 2020-12-27 02:33:11

*A rough guide intended for absolute beginners who want a quick overview of what learning programming leads to, and the kind of skills that are useful to programmers.* 

## Styles of programming

**Back-End**

Work with servers and databases. By definition this is non graphic, and also gives perhaps the widest choice of languages and tech, since installation woes and cross platform support are not an issue.

- Languages: Java, PHP, PERL, SQL, Go, Python
- Related: Cloud solutions (AWS, Azure), Docker, Serverless, Node.js

**Mobile**

Program forward looking hardware (accelerometers, multi-touch, AI chips, styluses) and overall spearheading innovation in software design and interaction. Most apps simply don't leverage these features but even then, a hugely dynamic market and startup space.

- Languages: Swift (iOS) and Java (Android)

**Game Development and VR/AR**

Modern game dev is mostly through standalone game engines managing the gritty details such as high quality graphics and scene management; still perhaps 30% of high profile video games (ex mobile) use proprietary game engines.

- Languages: C#, C++
- Related: Unity, Unreal, Godot

**Web apps**

Though using only a small subset of programming languages, web apps may still account for most advertised coding jobs. High visibility, dynamic community.

- Languages: HTML, CSS, JavaScript, TypeScript
- Related: React, AWS, Azure, Firebase

**Desktop apps and systems programming**

Easier languages (Java, C#) are used for business apps, whereas "systems languages" (C, C++, Rust) are used in programming operating systems, IoT things and high performance apps such as game engines and machine learning libraries.

- Common languages: C#, Swift, Java, C, C++, Rust
- Related: Visual Studio, XCode, Eclipse

**Shell-scripting**

Every programmer end up with a little knowledge of so called command line tools - aka shellscripting - which are used to perform simple operations (such as compressing or copying files) and automate programming workflows.

- Languages: Bash, Powershell
- Related: Linux, Docker

## The best platform/language to start with?

Perhaps Python, Javascript, Processing, C or C#

**Python** falls in the "easy to learn, hard to master" category. A neat feature is the so called interactive console, which allows typing commands and directly evaluate the result.

**Javascript** is easy as a language; every programmer know some javascript too (because, what programmer did not setup their own web page at least once?)

**Processing** is a multimedia platform derived from Java. Where most languages easily output text, processing is adept at producing graphics and sounds.

**Unity** uses standard C# and provides a comfy environment for playing with 3D, physics and multi-agent systems.

**C** is recommended before learning C++ or Rust. Learning C means a better understanding of memory and performance.

**Arduino** is (perhaps) a bit limited on the coding side but a great place to start if you are interested in both programming and electronics.

## Where to try languages?

Sometimes the language is available on your system, or some installation/configuration is needed.

Online IDEs are a great resource for a quick dip into (almost) any language:

- https://ideone.com
- https://www.tutorialspoint.com/codingground.htm

## What are the important skills in programming?

**Attention to detail**

On a day to day basis, programming is a petty activity where 'a slip of tongue' is not okay - since computers do not understand saying "approximately" the right thing.
Practice makes perfect, and for most of us patience is key to overcoming the initial "missing colon, mismatched bracket" phase.

**Abstract thinking, and staying organized**

Programs are models so the ability to think categorically and organize ideas really helps; **leads to**: Software/solutions architect.

**Information gathering**

While languages and programming patterns stick around for decades, libraries, frameworks and the hardware evolve *quickly* - fast enough that beyond a few commonly used functions, learning keywords and commands is pointless.

What works is knowing how to search - which comes with reading about programming and acquiring the culture/jargon needed to ask questions other programmers can even answer. **Leads to**: technologist, CTO

**Team spirit**

After you overcome the "what" of getting programs to work, you are primed to learning how to write programs that other developers can read and enjoy contributing to. Good teamworkers understand that programs are written for humans to read, and 80% of a coder's working time is spent reading and analyzing existing code.
**Leads to**: team lead

**Puzzle solving**

Often programming requires an understanding of *algorithms* which are methods to solve (apparently) simple problems such as sorting lists or finding contours in an image. Still you need not be very good at logic or maths to be a good programmer. **Leads to**: computer scientist, data scientist, working for the big four, hacking and security.

## Should I learn more than one language?

Sooner or later, you will. Fortunately computer languages look like each other. Learning a "first programming language" is the one big step.