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.
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.