Live data from Hacker News

Ask HN: Which tools have made you a much better programmer?

news.ycombinator.com

151–160 of 519 posts

Re: Ask HN: Which tools have made you a much better programmer?

#151
I'll add two really simple, but also very effective tools. Search: in the form of things like "the silver searcher" (https://github.com/ggreer/the_silver_searcher) or "fd" (https://github.com/sharkdp/fd). And, Replace: with tools like sed (https://www.gnu.org/software/sed/).

These are really simple tools but they are also very powerful. I have surprisingly often needed to change from version X.Y.Z to version A.B.C in some set of files (be it package.json or requirements.txt or *.csproj) and tools like these make it happen in an instant.

Most recently they have helped me with some spaghetti code where the software is used in several places and I need to ensure exactly which places use the KerfuffleManager. Can I trust my IDE to find all places where it is used? Maybe, but with proper search tools it stops being a trust thing.

Re: Ask HN: Which tools have made you a much better programmer?

#153
post #26

The Jetbrains suite. Lightens the cognitive load, makes it easier to refactor and keep code tidy. All of which allow me build better software. For almost everything else e.g. git, learning how to use the command line instead of a UI is the best way for me to learn how the tooling works.

Just downloaded the GoLand 30 day trail. First impressions are I now remember how slow and stuck in goo java based IDEs feel.

What cool stuff should I look at as I am willing to be sold on this.

Re: Ask HN: Which tools have made you a much better programmer?

#154
post #94

Earlier quoted context omitted.

My life was also improved with some additional aliases in my git config: [alias] dfif = diff idff = diff grpe = grep

Nice! I create two-letter aliases, it truly helps: gc = git checkout gs = git status etc...

Here's mine:

    alias g="git"
    __git_complete g _git # enable git autocompletion (braches, etc.)
    alias gc="git commit -am"
    alias gp="git push"
    __git_complete gp _git_checkout # checkout is more useful than _git_push because it autocompletes the branch
    alias ga="git add -A"
    alias gd="git diff"
    alias gb="git branch"
    alias gx="git checkout"
    __git_complete gx _git_checkout
    alias gs="git status"
    alias gl="git log"

Re: Ask HN: Which tools have made you a much better programmer?

#155
my json toolkit has been a huge boon for me, it complements jq very well: https://github.com/tyleradams/json-toolkit

There's tools for converting between json and other data formats like xml as well as misc tools like json-diff which diffs json files and formats the output as json.

Re: Ask HN: Which tools have made you a much better programmer?

#156

Jetbrains IDEs have been mentioned already, but I'll add a specific feature of Jetbrains IDEs, the Productivity Guide[0]. This contains a list of keyboard shortcuts and tracks your usage or non-usage of them, identifying various ways you can speed up your workflow in the IDE using keyboard shortcuts instead of the mouse. Building on this, the Key Promoter[1] plugin will notify you when you could have used a shortcut…

Interesting...

Does something like this exist for Excel? Asking for a friend (seriously).

Re: Ask HN: Which tools have made you a much better programmer?

#157

Putting this in my hosts file helped me maintain my focus. 127.0.0.1 news.ycombinator.com 127.0.0.1 reddit.com 127.0.0.1 facebook.com

I waste time when I go to YouTube because of all the recommendations I get. I added custom css to Safari and added display: none to all those divs so now I never see recommendations and just watch the thing I'm looking for.

Re: Ask HN: Which tools have made you a much better programmer?

#158
- xmonad

No distractions and I can program my window manager to organize my windows.

- git

I was once fan of mercurial, but I like git better now. Everytime I find new interesting ways to use it. Also outside it's traditional uses.

- (n)vim

I use other editors, but I turn them into vim. It is easy to use and makes typing in your solution of your problem in the language of choice less boring. (The coding part)

- awk

God, I love awk. It is like the swiss army knife of unix. You can do everything with it.

- latex

If I want to order my mind by writing a bit or making a nice design, create some documentation. Latex is your friend.

- dot

If I want to sketch something, dot will help. Dot also helps with other stuff, dependencies between things. It is easy to write out a dot file.

- profilers

Any fucking profiler will make your a better programmer. It will test your assumptions about the underlying model.

- debuggers

You can't do things without them ^_^

- static type systems

Learn to think in types is a big win and not a weakness. You can encode properties in type systems.

- mathematics

Learn it, use it. It will give you new ways to think. E.g. algebra is about composability. So first thing I do is when I have a problem is write out the data types and think out its algebra. And it keeps your mind active, just churn through some mathematical topic once in a while. I loved type theory. Lambda calculus, abstract algebra, linear algebra and am know learning point set topology.

- esoteric languages

They are fun and force you to rethink what computation is. Design a couple yourself. I can compute in any language with weird constraints. I just need to build a machine in it.

- keep playing around

Not everything you do needs to be a project, just make something useless. E.g. I like jotting down shit in netlogo, which is utterly useless, but fun to watch.

- zsh

Where am I without you? ZSH can interface with everything. I write small tools from finding ec2 instances in the cloud by tag to presenting searchable menus binded by keys with a little help of small programs.

- the core utils

Learn them by heart, you will never have to click ever.

- Learning new programming paradigms

I loved stack based programming, functional programming, thinking in excel (data flow). There is no one solution to everything.

- domain specific languages

Learn to make them, it is fun and an extremely powerful tool in the programmers toolbox.

- parsers

Don't be afraid of them, they are your friend. And often easier than regexes.

- learn how to search

Big skill, not everybody does this right.

- Programming notebooks

Why is this not standard? Mathematica is brilliant with this and while I don't like python, but jupyter is very good.

- IDE's

They are useful. Don't be vain.

- Make designs

Plan what you are going to make. That helps a lot.

- Property style testing

Checkout quickcheck ^_^

That is my list. It is not exhaustive.

Re: Ask HN: Which tools have made you a much better programmer?

#159
post #94

Earlier quoted context omitted.

My life was also improved with some additional aliases in my git config: [alias] dfif = diff idff = diff grpe = grep

Years ago Interlisp (does anybody here remember Interlisp?) had a function called DWIM (AKA Do What I Mean). It was an (optionally enabled) part of the REPL. If you typed something that made no sense, DWIM would try to figure out what you really meant to type, and offered to run the corrected command. I have often wondered why that functionality disappeared, and why no one has tried to resurrect it. Search engines of…

Quaxity quuxity,

Teitelman's Interlisp

Has a DWIM feature that's

Really a screw;

MACLISP has evident

Superiority

Letting its customer

Mean what he do.

--The Great Quux (Guy L. Steele)

This poem indicates the frustrations that hackers had with DWIM at the time, which may explain why no one tried to resurrect it. Too-clever-by-half features intended to help tend to drive people nuts, especially when they fail. Even when they succeed, they interrupt the user's flow and become like that dialog box Windows users just dismiss.

Re: Ask HN: Which tools have made you a much better programmer?

#160
post #22

- GNU/Linux + i3wm; complete control over my programming environment. - bash + GNU coreutils; seriously, take the time to be able to write helpful bash scripts which can run basically anywhere. - git; use it even when you're not pushing to a remote. Add helpful aliases for everyday commands. Build a good mental model of commits and branches to help you through tough merges. ( my ~/.gitconfig: https://gist.github.com/…

An excellent list. Regarding functional programming, I recommend starting with a gentle approach that doesn't require picking up a new language: 1. Stop creating counters/loops and become facile with map, reduce, and the like. This will shift your thinking away from blocks and toward functions. 2. Take the time to really understand what side effects are, and start avoiding them everywhere they are not necessary. Keep…

Agreed on gentle approach. I've started using libraries like Ramda for JS, which is especially designed to ease people into functional patterns.

I then moved to FP-TS, which makes more heavy use of haskell-like patterns and monads.

The hard part isn't the syntax of whatever language, but understanding the new patterns and way of thinking, which you can do with a simulation layer like FP-TS (for typescript/javascript).

The functional patterns and emphasis on types makes your code robust and more correct. It emphasizes correctness, which is ultimately what your job is as a programmer. Optimization comes after.

Post reply on HN