Software Engineering as a discipline
A software engineer is a software developer that embraces the task like a discipline. And as any discipline, like martial art, the various aspects get decomposed and trained individually.
As I didn’t find much literature, because I didn’t search to be honest, on the practice. This is my attempt at doing just that. Look at all the things that I have learned in isolation and try to describe them the best that I can.
Unstructured thoughts
Keep a software journal of your activities
This has a lot of benefits:
- context-switching becomes easier.
- the content can easily be extracted into a blog post.
- management relations; it’s good to be able to refer back to the work you did when asking for a raise or being evaluated.
- reading it later is useful to find meta patterns to your work
If you hit a difficult spot, step away from the computer!
The worse thing you can do is start filling your brain with other stuff like HackerNews / Twitter.
Use a paper notebook to write things down while away from the computer.
Being bored is the source of all creativity. Go for a walk, do some house chores that can be done on autopilot like the dishes.
Use bisect debugging
Bisect DebuggingLearn things in depth
Don’t become a slave of StackOverflow.
There is a loooot to learn though. Pace yourself.
Write some code every day
Like any skill, it stays shaped when trained regularly.
Read code every day
Learning is also reading what other people are doing. Study the masters.
V2
This article is for me and is more of a brain dump for now.
Is it possible to decompose software development as a discipline?
Communication
Learning how to describe issues, communicate with management, is an integral part of the discipline.
Learn English very well
Having the vocabulary to name variables accurately and precisely is important to convey what your code will do.
Being able to read fluently helps immensely to acquire new knowledge.
Learn how to talk to the business people
I like to take the Socratic approach and ask a lot of questions. Questions are rarely unwelcome in my opinion because they show interest.
Being able to accurately convey the state of the code base is crucial to get management buy-in for addressing code debts.
Reduce frictions
Being aware of frictions in the daily workflow and addressing them creates a positive productivity loop.
Reduce complexity as much as possible
Code has a mass. The less code you have, the easier it is to change it.
Learn how to type
Learn how to type faster than your train of thought.
Brain stuff
How much context can you hold into your brain at the same time? It would be interesting to know if this is a fix-sized limit or if it can be increased. What I know for sure is that the lack of sleep reduces that space dramatically.
Walk away from the computer
Thinking is best done away from the computer.
Stop when you are tired
I find that it’s hard to know when I stopped being productive.
I noticed that video games that require
Health stuff
Necessary to keep the brain in shape.
- exercise
- drink water
- healthy diet, whatever that is
ALWAYS get a good night of sleep!!!
This is so important. Sleep is an interesting subject.
One common misconception is that if you miss 1 hour of sleep one day, it’s enough to sleep another hour more the next day. This is completely false! It takes a long time to recover from a lack of sleep. Some scientists believe that we never entirely recover.
A lack of sleep has an impact on every part of the body: * more cancers * fewer muscles * less energy * less brain activity * fat storage
Move your body
30min of walk every day
Fighting procrastination
A big topic right there
Programming techniques
Obviously, software design patterns are important.
problem-solving and core coding skills.
Other Topics
Maintaining Open SourceThe Git staging areaTODO
- https://lobste.rs/s/xigh0i/what_makes_someone_good_programmer
- The Pragmatic Programmer book