Why you code?
Tags: beginners, motivation, codenewbie, career
Published: 2019-12-22 19:44:50

How would be your answer the question:

**Why you code?**

Let me know in the comments below and read on the story.

## Motives

I'm not a software developer not by training nor experience. I never worked as a professional software developer. Software is a tool for me, like math. I'm a physicist, after all, 🙂 I love doing math and writing code, but I prefer to stay in the physics lane for the majority of my time. So to no surprise, the conversations like the one below occur over and over:

- *Colleges*: Why do you code? 
- *Me*: Because it gives me an edge.
- *C*: Huh OK.

## Start

I started coding (simple web site) in high school. As I started, I was really frustrated by coding. I would spend days banging my head against the wall. Most of the time, I had no clue what was going on. But I forged on because my studies required me to do some basic coding. I kind of despised coding. Physics and math was more fun.

But it wasn't until my 2nd year at uni before I took a deep dive into coding. I realised that every physicist that was an excellent coder was perceived as an expert in the community. Those mini experts new something way better they anyone else. If you needed help with coding, you went to them. I figured that the coding skills could be my secret weapon.

## Competition

This will depend on your field of expertise. Still, no matter the profession, there are several things that the majority of people find hard and confusing. The harder or more boring the concepts are fewer people know then. As a result, you face less competition. There's a good analogy:

**A lot of people go to the mountains, but a few well-trained enthusiasts climb the highest peaks of the world. Higher we go thinner the air. There's far less competition at an altitude of 8km.**

Use this to your advantage. Figure out what others despise. Most probably they don't like certain areas because they don't understand them. Dig into those, and your skills will be sought by others for the rest of your career.

## Old technology

Physicists,  write a lot of (shitty) code.  OK, a few can code really really well. I would claim that I'm somewhere in between the two poles.  As long as the code works (most of the time), we don't bother staying up to date with all new fancy tools and concepts. Yes, some are still convinced that `FORTRAN` is easy. Some still send emails via `vim`.

So to no surprise, the first language I really learned was `C` in 2013. Even the website we used for the course looked like it was written in the eighties. I found my sanity and at least switched from Windows to Unix in 2013. So I started my path by going down the `C` rabbit hole. Then came across something called `C++`. Then the dependency hell, build systems... you know how the rest of the story goes.

# Frustration is the way

Every time I tried something in software, I asked myself. Why is this so hard? It's not rocket science nor theoretical physics. I should be simple right? Yet on the contrary, when I decided to build my first proper web site, I read online that:

I needed to sign up for **AWS** account create an **EC2 server** that runs on **ubuntu**. **SSH** to the server through **bash** shell. Then install **Nginx**, **SSL** and **uwsgi**. Then my application should use on the **back-end** the **python** **Django** engine with **PostgreSQL** database. On **front-end** I should use **react/vue/angular** with some **HTML, JavaScript, CSS**. The application should be running in **docker** containers so it can scale based on the web site traffic.  

I knew that `python, CSS, HTML, JS` were languages heard of `git` and `bash`. The rest was foreign to me. In a few years, I mastered enough of the above concepts that I'm capable of running a simple personal web site. Though I still have nightmares from time to time about the first experience with `Django`.

After coding for a while, I came to realise that:

**Experienced developers fail a few times faster than junior ones.**

After coding for years, I still get stuck and frustrated every day. But these days I'm somehow cable of getting over the frustration in a matter of minutes instead of days 🙂 I guess that comes with experience so hang in there and embrace failure. 😉


## Why?

When I was picking up the software development skills, it took me years before I started seeing progress. The hard truth is:

**You learn how to write good software through years of practice.** 

There are no shortcuts. If you want to get good, you'll need to practice the craft. Nothing new here. But make sure you know the answer to the question:

**Why you code?** 

For me, software development is all about being able to:

**Write fast code as fast as possible.**

As long as the code get's the job done in the reasonable amount of time I'm happy with it. There are cases where I have to take care of documentation, tests, share code with others then the **why** slightly changes. 

For you the answer to the **why** will probably be something completely different. Nothing wrong with that.  The **why** should dictate how you improve your craft.

As a result of my needs, these days, my proficiency lies in `python` and `C++`.  My work is mostly oriented around big data processing and simulations on clusters. Still, I come across other languages like `CSS`, `HTML`, `JS`, `latex`, (`bash`) every day. A server crosses my desk from time to time. For me, quick and dirty solutions usually do the job. Though I sure kick my self later for writing the bad code.