What should I know about software engineering?
Tags: beginners
Published: 2023-11-28 03:25:12

Today, I received the following text from a close acquaintance with no engineering background.

> Hey Daniel. I've really been considering a job in coding. I've always enjoyed working with computers. Can you tell me if you enjoy coding and what do you think I should know?

Suddenly, I realized there was much to share about software engineering as an occupation, too much for a text message.

### Do you think like a programmer?

All programmers have some shared characteristics.  Donald Knuth, possibly the most decorated professor of computer science, said this during an interview.[^1]

> the psychological profiling [of a programmer] is mostly the ability to shift levels of abstraction, from low level to high level. To see something in the small and to see something in the large.

![Picture of Donald Knuth](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g1c2h6znp4binthirxry.jpg)

He explains:

> When you're writing a program, you're saying, "Add one to the counter," but you know why you're adding one to the counter. You can step back and see a picture of the way a process is moving. Computer scientists see things simultaneously at the low level and the high level.

Then, he identifies two more shared characteristics.

> The other main characteristic of the computer scientist is dealing with nonuniformity of discreet, nonuniform things. We have ten cases instead of one. We don't have one law of thermodynamics, or something. We have case one, case two, case three -- each is different. **We build models out of nonuniform parts.**

> We have this aesthetic of cost, how much work it takes to do things. If your mental model is APL, you optimize in different ways than if your mental model is a RISC machine.

#### Make programming fun again

When you search the internet for "make programming fun again," you'll find many helpful articles and videos covering that topic.  In fact, a driving factor shared by many new programming languages is the creator's desire to "make programming fun again."

Programmers must share this characteristic also:  In the beginning, _it was fun_.

One of your early goals should be determining if you share all these characteristics.  If you're dealing with adult life, how do you find time for that!?

### Make it a hobby *first*

When you find time, you should make programming a hobby.

![The 'Home Improvement' hot rod was a hobby project I saw every Friday night as a kid](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0hvuxj88p1tlcxstmxax.jpg)

These are the best ways I know to do that.  Try all of them for the best results.

#### Work on coding problems

[Advent of Code](https://adventofcode.com/2023/events) and [Project Euler](https://projecteuler.net/) are a couple I have enjoyed before.  These teach you to enjoy problem-solving.

#### Invent a passion project

For a beginner, this is where you can have the most fun.  Your passion project can be anything, but to maximize enjoyment, you should try to induce ['flow'](https://en.wikipedia.org/wiki/Flow_(psychology)) state.  To maximize your odds, try solving a problem at the very edge of your ability.

#### Contribute to an open-source project

Choosing an opportunity that is well within your ability would be best before attempting this.  It gives you a sense of satisfaction and has numerous other benefits if you turn your hobby into a career.

### Temper your expectations

![Thumbnail from "the expert", a short comedy about consulting](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tnal37luszalwwo6b6h8.png)

You think like a programmer, and coding is fun.  Now it's time to make money.  Maybe you're gifted and can launch a killer app straight away.  But if not, brace yourself.

In a software engineering job, much of the work differs from what you enjoy.  You must be able to read and write code, but odds are you only relish one of those things.  Often, you have to review code, help manage infrastructure (commonly called Operations/Ops), perform quality assurance, and manage releases.  You'll find business processes that turn simple tasks into 8-hour ordeals, and you'll often need to wait for other people to finish tasks with unaccommodating deadlines.

Lots of technical components can affect your enjoyment of the job as well.  These things run the gamut from your editing environment to your business' deployment platform.

Nothing is special about those things: every white-collar office job shares similar grievances.  Software engineering is not your "get out of jail free" card.

But this next part might be unique.  If you live in south-central Kentucky (like me) or many cities outside of California, your hobby and job is a black hole where socializing goes to die.

- Don't go into detail about work kicking your butt: **nobody** understands what you do.
- Don't go into detail about your accomplishments:  **nobody** understands what you do.

#### Sidebar: You probably won't become a game developer

Lots of beginning coders want to work on games. Those who succeed have immense energy and are willing to live in their car for peanuts to get started. That isn't most people. It probably isn't you. You'll probably work on something relatively boring.

#### Learn to love _boring_

You may have heard other developers talking about this.  "Boring" means nobody is panicking & nothing is breaking.  You can only afford this luxury by staying behind the curve and making releases at a reasonable pace.

#### Here be dragons

Software engineers "have it pretty good", but even perfect work environments can yield psychological and physical problems.  Many developers deal with [imposter syndrome](https://en.wikipedia.org/wiki/Impostor_syndrome).  Jamis Buck offers a [cautionary tale](https://corecursive.com/025-burn-out-and-recreational-programming/) about burnout, another common issue with developers.  RSI, carpal tunnel, and "emacs pinky" are all possible dangers.

You may transform into a keyboard enthusiast who wastes [hundreds](https://ergodox-ez.com/) of [dollars](https://kinesis-ergo.com/) on keyboards and has lost touch with friends and family. 😱 (this is a joke)

### Will you enjoy it?

That's hard to say.  Some people regret turning their hobby into a job, owing to the age-old anecdote[^2], but I see no other way to be a developer.  Others say they're blessed because they would do it for free, owing to another age-old colloquialism[^3]. The truth is likely somewhere in the middle.

[^1]: https://www.drdobbs.com/an-interview-with-donald-knuth/184409858
[^2]: "don't make your hobby your job."
[^3]: "Choose a job you love, and you will never have to work a day in your life."