diff options
| author | Karan Jayachandra <me@karanj.com> | 2026-02-04 12:06:34 +0100 |
|---|---|---|
| committer | Karan Jayachandra <me@karanj.com> | 2026-02-04 12:06:34 +0100 |
| commit | c3a37c3f39bf24ba0d9cf6f1533d937ab024709e (patch) | |
| tree | 4a85c2edc19a76089805917adaa21286827e27ff /content/posts | |
| parent | 603541802e587c599289f852ff74a3f986e91189 (diff) | |
Added new post about software engineering
Diffstat (limited to 'content/posts')
| -rw-r--r-- | content/posts/software_engineering.md | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/content/posts/software_engineering.md b/content/posts/software_engineering.md new file mode 100644 index 0000000..12bcc1c --- /dev/null +++ b/content/posts/software_engineering.md @@ -0,0 +1,58 @@ ++++
+title = "Notes on Software Engineering"
+date = 2025-02-04
++++
+
+I worked at a large software company, [SAP](https://www.sap.com) for three years. But I didn't get to learn much about software engineering. SAP has its own tools and process that have already dictated how things work. But over the years, I have realized how important software engineering can be. Here I outline some of the lessons I have learnt (some with a lot of pain) about this.
+
+Key Learnings:
+- Don't reinvent the wheel
+- Craft bespoke only when needed
+- Code is a liability; tame it and limit it.
+- Automation isn't always necessary.
+---
+Write simple code. Use existing [data formats](https://stackoverflow.com/a/27713489). You don’t need inheritance, you don’t need that shiny new data structure. Keep to the basics and things will be much more easy to manage in the long run. It is not about how many lines of code but how few lines of code. Reduce the number of moving parts.
+
+The [Joel Test](https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/) is a great way of pointing you in the right direction:
+1. Do you use source control?
+2. Can you make a build in one step?
+3. Do you make daily builds?
+4. Do you have a bug database?
+5. Do you fix bugs before writing new code?
+6. Do you have an up-to-date schedule?
+7. Do you have a spec?
+8. Do programmers have quiet working conditions?
+9. Do you use the best tools money can buy?
+10. Do you have testers?
+11. Do new candidates write code during their interview?
+12. Do you do hallway usability testing?
+
+[Taste](https://www.seangoedecke.com/taste/) and skill are different! Taste is dependent on your values. An immature engineer is inflexible in taste.
+
+Sajid on YouTube has created a really good [resource](https://www.youtube.com/watch?v=vvPklRN0Tco)
+
+Documentation: Maintain at least a [README](https://www.makeareadme.com/) file.
+## Tools
+### Terminal
+Learning to use the terminal will be much more efficient in the long run. You will be able to do basic tasks as well as complex ones using just the keyboard. GUIs also take up much needed space on the screen as well as in your brain with distractions. The terminal is as distraction free as it can get when using a computer despite all the [arguments](https://jvns.ca/blog/2025/02/05/some-terminal-frustrations/) against it. I found that the Linux shell is much better to use specifically [ZSH](https://ohmyz.sh/) using WezTerm.
+### Editor
+VS Code because I am casual but I would eventually like to switch to neovim.
+### Version Control
+Even if you are the only person working on a project. Use [git](https://git-scm.com/). This is crucial. If you want to work with other, it is doubly more important. git is not restricted to software projects but any text files that require frequent revision. Even this blog is under version control. Do not have 10 versions of your code floating around. Work on two branches, `main` and `feature\<feature-name>` and keep them regularly in sync. [Beej’s guide](https://beej.us/guide/bggit/) is an excellent resource.
+- Keep the repository clean and with text files only
+- Link unrelated project with sub-modules
+- If large files need to be store use the Large-file Storage (LFS) feature
+- Common commands: clone, add, commit, pull, push, checkout, branch
+- If you need to remove old git history, use the git-filter-repo tool
+- Merge source code form different repositories by adding a new “remote”
+
+## References
+- [Cognitive load is what matters](https://minds.md/zakirullin/cognitive)
+- [Big O](https://samwho.dev/big-o/)
+- [Tigerstyle](https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/TIGER_STYLE.md)
+- [Periodic Table of System Design](https://github.com/jarulraj/periodic-table)
+- [Tiger Style](https://tigerstyle.dev/)
+- [Refactoring Guru](https://refactoring.guru/refactoring/catalog)
+- [21 Lessons from Google](https://addyosmani.com/blog/21-lessons/)
+- [Is it work it](https://griffin.com/blog/is-it-worth-it)
+- [Sean Goedecke's Blog](https://www.seangoedecke.com/)
\ No newline at end of file |
