Settings

Theme

What's your essential tools for every programmer?

5 points by business007 5 years ago · 7 comments


pmdulaney 5 years ago

1. vi/vim/MacVim - it simply becomes second nature, without the laborious keystrokes of the "major competitor".

2. Command line stuff: grep, tr, awk, find, od.

3. Pencil and paper. Draw a picture.

"Never cut what you can unravel." - Joseph Joubert

  • gregjor 5 years ago

    Exactly. Unix was the original programmer’s workbench and still is.

    Programming should mostly happen between the ears. I do most of my work thinking and writing notes, diagrams, and pseudocode on paper.

    • justinlloyd 5 years ago

      I cannot stress this enough to new programmers. Think before you code. When your hands are on the keyboard you should either be investigating an unknown system to figure out how it works, or you should be implementing that which you have already designed & built in your head.

      If the code I am writing right now doesn't involve me poking at a system because I don't understand it and learning it, then at a guess, I would say I spend far more of my time thinking about the production code I will write than writing the actual production code. Hands on keyboard for hours at a time is a sure sign you're working on a problem you don't really understand. It took me decades to come to that realization because many companies measure productivity by "number of hours of your butt in a chair multiplied by lines of code written."

      In my current role I am considered one of the most productive developers on the team. I am physically at the keyboard writing code or debugging code for maybe three hours a day.

      • gregjor 5 years ago

        Measure twice, cut once is a good guideline.

        I learned desk checking my code (and other people's code) early in my career when computer time was expensive and I had to wait to run my code. I still do a lot of desk checking. I find that process helps me understand the code and data structures better. After a while it becomes second nature, you can learn to "run" code in your head.

nikivi 5 years ago

Karabiner Elements https://github.com/pqrs-org/Karabiner-Elements

Why: https://wiki.nikitavoloboev.xyz/macos/macos-apps/karabiner

justinlloyd 5 years ago

I run all three major OS for development work. Windows 10 is my daily driver, but not used for everything. Today, even though I am at two machines running Windows, both have a Linux OS running in a VM that I am using predominantly for today and probably the next several weeks whilst I rebuild firmware images and create/update Linux device drivers for an embedded system.

Hardware wise: You can never have too much. I have a Windows workstation, a Surface Book 2 and a Macbook Pro, lots of monitors, keyboards, mice, tablets. A Linux server running Docker containers for various services, e.g. adguard, firewall, proxy server, gitlabs and mercurial, backup, and so forth. These are all optional, I could probably get away with just a powerful laptop if pressed.

Software:

VMWare Workstation Pro or VMWare Fusion, that permits access to Windows, Linux & macOS.

Visual Studio Pro on Windows

VSCode on Linux & macOS

SublimeText3

The full Jetbrains suite on all three platforms

Android Studio

XCode (macOS)

The various terminal tools, as mentioned by someone else.

OneNote for notes, installed on every computer in the house, and every tablet and my phone too.

A physical sketchbook/ruled notebook (half sketch paper, half is ruled pages) with two mechanical pencils, and a straight edge. I cannot emphasize a physical notebook strongly enough, even though I am dyslexic and disgraphic and have lousy handwriting and it makes my hands cramp, a physical notebook is invaluable.

Microsoft Office Lens for scanning physical notes and whiteboard sessions in to OneNote

OpalCalc on Windows, Soulver on macOS, Speedcrunch on Linux

Bitwarden with self-hosted server installed on all Windows Subsystem Linux on Windows

ConEmu for Windows

DirectoryOpus for Windows, PathFinder for macOS

WinMerge on Windows, Kaleidoscope on macOS. Though I also like Araxis Merge and Beyond Compare.

Tower (old version) because fuck you and your subscription model.

Synology Drive for file sync between devices

Synology Backup for backing up the machines

IDA and Binary Ninja for reverse engineering and diving in to binaries

I am sure there are things I am missing that I use almost daily but have slipped my mind. These tools make up my workbench and let me tackle a lot of different work, much like how my workshop contains many different tools for different aspects of woodworking, metalworking and other fabrication and maker-type tasks.

edit: blank lines because I forgot HN doesn't separate lines without it.

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection