Language version
This article also has a Czech version.
TL;DR ✨
Ordinary users are accustomed to their workflows, which differ slightly between home and work environments.
Over the years, the software on their machines has gradually evolved alongside them and has now settled into a fairly stable form.
A Work Ecosystem for an Ordinary Developer Joe¶
✨ 🚀 An Introduction to Evolution¶
Ordinary users are accustomed to their workflows, which differ slightly between home and work environments.
Over the years, the software on their machines has gradually evolved alongside them and has now settled into a fairly stable form.
Ordinary users and their use cases can easily be divided into:
- Home users
- Office users
Both groups are quite clearly defined and well bounded. Most PCs come with a selection of software that meets their needs. The environment is therefore easy to configure according to individual preferences with a little customization, but the final toolsets still converge on more or less the same thing. Here are some specific examples:
✨ For a Typical Home User¶
a computer is characterized by these main functions:
- Looking something up.
- Watching a film.
- Printing something.
- Letting a child (or dad) play a game now and then.
- Occasionally cobbling together a document for the authorities.
✨ For a Typical Office User, on the Other Hand¶
The needs are similar, but somewhat broader and more focused on collaboration:
- Working fully with Excel, Word, and other office tools throughout a shift.
- Communicating with the world through chat and email.
- Finding information and working in web or local applications.
This offers a glimpse through the window of evolution: from primitive organisms to more complex creatures at the level of a flatworm with a ladder-like nervous system.
One evolutionary milestone has deliberately not yet been mentioned: the ordinary developer Joe.
It is time to examine this silky specimen as well and perhaps even draw some inspiration from him.
✨ The Ordinary Developer Joe¶
The ordinary developer Joe is an abstraction of a user who has become slightly enlightened in the sense that he has surpassed his predecessors (the ordinary home Joe and the ordinary office Joe) and moved up another level in his work with computers. He could typically be described as a creature who paid for his increased specialization with a considerable degree of antisocial behavior, caused by few opportunities to spend time among ordinary end users, combined with limited muscular development and the characteristically hunched spine of his species. These traits emerged as side effects of adapting to a chair. His aversion to light will be left aside.! His main advantage is that he does not concern himself with lesser matters such as holy wars over which is better:
- Windows vs Linux.
- Vim vs emacs.
- Apple vs Hemeroid.
He simply uses whatever is suitable wherever it happens to be suitable.
The mark of a mature and advanced developer is that he can do everything.
He has no trouble with keyboard shortcuts and is three times as efficient as his predecessors, at a fraction of the cost. His goal is a mouseless environment. Touch typing is as elementary as the multiplication table. Derivatives and integrals will be discussed later, so there is no need to dwell on that here.
Such a developer workspace can be divided into several categories that overlap contextually and may even jump around a little.
Here is the complete outline for a better idea of what will be covered step by step:!
✨ Hardware¶
✨ Power PC¶
A development machine is a full-fledged desktop computer, only somewhat more enhanced with (server-grade) steroids.
Its absolutely essential specifications must be:
- At least 32-64GB of RAM. The more, the better.
- The more cores, the more Adidas. Twelve cores is the bare minimum for a professional.
- Virtualization capability (and therefore containerization).
- A graphics card only for those who like playing games.
- An NVMe drive; the more capacity it has, the happier the developer.
The machine must be a desktop computer. Laptops are UNUSABLE in the long term. They do not have enough room to ventilate their components and are significantly more expensive simply because everything is squeezed into a small space like a sandwich. It is like buying underwear one size too small. It will also split before long, preferably just when maximum performance is needed.
Hardware that makes sense for professional performance: the latest Apple Mac Mini.
- The iMac is for beginners.
- The Mac Studio is for graphic designers.
- That leaves the Mac Mini, ideally with 12 or more cores, for developers.
!
✨ Backup Laptop¶
Having a backup machine appears absolutely essential. And yes, this is where having a laptop makes sense for a developer. It can easily be weaker, perhaps 35-50% less powerful than the primary machine, but it serves as a backup in case the primary machine happens to die. It is also useful for trips, in other words when the developer needs to leave the cave and venture into civilization among customers.
Recommendation: MacBook Pro
✨ Backup Philosophy¶
Two machines make backups necessary. On macOS, this can be handled elegantly with Time Machine Backup (which is essentially just a stolen rsync) to a Synology NAS.
Office and other data can be stored in iCloud for a paltry monthly fee. Everything else is in repositories, so there is no need to back it up locally.
✨ Monitors¶
Everyone prefers a different number, but in the author's subjective experience, the minimum is three to four monitors. Three is ideal, with the fourth used as overflow space.
✨ Matching Ports and Synchronization¶
It is a good idea to match the ports. With three monitors, the primary machine must have all the connectors required for those cables, and the secondary machine must have the appropriate adapters too. It is not cheap.
The Belkin F4U098 is an excellent adapter for a MacBook Pro, providing a setup that mirrors the Mac Mini very closely.
✨ Software¶
✨ Contexts App¶
Contexts is an absolutely essential tool for working in macOS when more than eight applications are open. It makes finding open applications significantly easier, enables fast switching, and can search among open applications.!
✨ Stage Manager¶
A major thorn in the author's side is the overall inflexibility of the spaces concept in macOS. It is designed for ordinary users who have a single monitor and spend all day clicking around with a mouse.
But a developer wants freedom from the mouse, because mouse = sore hand + carpal tunnel syndrome. Surprisingly, Stage Manager has therefore proved to be an excellent concept for working with multiple monitors.!
🔍 Monitors as the Basic Classification Criterion for Contexts¶
If additional spaces in macOS are ignored and the setup is limited to four monitors as a maximum of four workspaces, each contextually identified by a single keyword, it becomes clear exactly where each application belongs, multiplying work efficiency. The division into additional spaces will be discussed individually for each monitor.
✨ An Example of Context-Oriented Desktops:!¶
This is what it looks like in practice:!
✨ A Quick Overview¶
| Monitor | Contextual name | Number of spaces | Example applications |
|---|---|---|---|
| 1 | Other | A single space = monitor | Everything that does not fit elsewhere |
| 2 | Browsing | One profile per space | Safari |
| 3 | Remote servers | One separate application per space | RDP, Citrix, Parallels |
| 4 | Local terminals | A single space = monitor | iTerm2 |
For a better understanding of this essential section, the contextual monitor areas can now be described in detail.
✨ Browsing¶
Browsing is a context focused on everything related to viewing and browsing the internet.
One separate monitor is dedicated to browsing the internet. It is the middle monitor, the one used most often.
The rule here is: If necessary, multiple workspaces can be used on monitor 2 in macOS (one space = one Safari profile, for example), but it is better to keep everything in a single space.
Vimari¶
An absolutely crucial plugin is Vimari, which uses familiar shortcuts from VI(M) to assist with browsing. It completely eliminates the need to use a mouse. The plugin is priceless and the increase in speed is tremendous.
Safari Profiles¶
For working across multiple contexts within browsers, dedicated profiles with separate bookmarks have proved useful. They provide a mental and logical separation between different groups with a common denominator. Another advantage, when combined with Focus mode, is the logical separation between times designated for work and times when work ends and rest begins.
A practical example based on a Monday-to-Friday schedule:
| Focus mode | Time | Activity |
|---|---|---|
| Personal | 07:00 - 08:00 | Getting up, morning activities |
| Work | 08:00 - 17:30 | Work, coding, availability to clients |
| Personal | 17:30 - 22:00 | Leisure activities, time for friends; clients and work applications are silenced. |
| Sleep | 22:00 - 07:00 | Sleep, everything turned off |
This is what the Focus mode configuration for Personal can look like!
Safari Tab Groups¶
When research produces a large number of tabs, they can be saved as tab groups. A much more common scenario is a client with dozens of customers, each of whom has a tab group containing the static web links used repeatedly, such as Scrum boards. Tab groups are then an excellent tool for organizing context within a profile.
🪟 🏠 Remote Servers¶
The remote servers context is where everything associated with virtualization or connecting to remote desktops elsewhere is concentrated.
Examples of applications representing the Remote servers context:
- Microsoft RDP
- Citrix WorkSpace
- Parallels
- VirtualBox
The rule here is: One remote server connection = one separate space. The use of a graphical environment is typical here.
More specifically, the author has two remote connections, with each entity having its own space:
- Parallels
- Windows Server
! For Windows/Linux machines, nesting provides a useful form of granularity. For example, multiple windows can be used in Windows through the Windows workspaces concept, adding another layer of abstraction within the contextual window for further logical subcategorization.! There is no need to look far; exactly this granularity can also be found in GNOME.!
✨ Local Terminals¶
The local terminals context is where everything associated with terminal work is concentrated.
Examples of applications representing the local terminals context:
- iTerm2
- Terminator
- Terminal
- Docker
The rule here is: One monitor = one space. A text user interface (TUI) or command line is typical here. There is no need for multiple spaces because everything can be handled with a tiling manager or tabs. Ideally, the mouse is not used at all.
Representatives and tools for everyday work:
| Tool + link | Description |
|---|---|
| mc | A legendary TUI tool for browsing directory structures. |
| vim | The purest tool for writing text without needing to reach for the mouse. |
| ohmyzsh | An excellent framework that speeds up terminal work. |
| dracula | The most comfortable theme for the eyes. |
| nerdtree | A file explorer inside Vim. |
| mcfly | A better search tool for CLI history. |
| iTerm2 | The absolute best terminal, with a tiling manager by default and tmux under the hood. For those without a Mac, the equivalent is Terminator | tmux. |
Useful Vim plugins.
Practical aliases in .zshrc:
#preklepy
alias gc='git clone'
alias cta='cat'
alias gerp='grep'
alias sl='ls'
alias vm='mv'
alias c.='code .'
✨ Modifying tmux in .zshrc¶
if [[ $- =~ i ]] && [[ -z "$TMUX" ]] ; then
tmux attach-session -t ssh_tmux || tmux new-session -s ssh_tmux
fi
Cheatsheets
✨ Other¶
A context focused on everything that does not fall into any of the previously listed contexts.
This section is deliberately placed last because absolutely everything that does not belong elsewhere goes here. In short, all the other applications such as Apple Music, Photos, Finder, messengers, WhatsApp, Signal, calendars, reminders, notes...everything.
Stage Manager provides the excellent capability for a single desktop to contain several dozen open applications. They can easily be found using Contexts, with no need to struggle with multiple macOS spaces, which in this case are a burden that cannot be controlled without a mouse.
✅ Final Summary¶
This overview briefly summarizes the development and evolution to date of one of many ordinary developer Joes. Reaching this stage took approximately ten years of trial and error and constant memorization of keyboard shortcuts across different operating systems. It cost an incredible amount of time that cannot be expressed in financial terms, but the result is an accumulated investment that makes it possible to accomplish in one hour what takes others three hours 🚀.
It takes its toll, just as every other job does! And so glory to the heroes who have read this far and keep this world together with code.