1,665 karma · joined August 6, 2011
Honestly, I find 'nix users unwilling to learn PowerShell the exact same as Windows user unwilling to learn a 'nix shell and core utilities.
PowerShell doesn't have SED -- but it has pipeline replacement.
$ cat .\x.txt | %{$_ -replace "sed", "powershell"}
It also has ideas that are completely different... rather than plain text pipe, it has an object pipe, which lets you do stuff like: $ ps | sort company | ft ProcessName -groupby company
Which outputs your processes in table format grouped by company, like ...
Company: Greenshot
ProcessName
-----------
Greenshot
Company: inkscape.org
ProcessName
-----------
inkscape
Company: IvoSoft
ProcessName
-----------
ClassicStartMenu
Company: Microsoft Corporation
ProcessName
-----------
taskhostex
conhost
explorer
...There is a reason exceptions are often banned from environments and it isn't because they are awesome. They make code "exceptionally" (zing) hard to reason about.
The article wasn't interview advice, it was advice about avoiding premature abstraction.
The problem, simply stated by Emil Persson is "Premature optimizations can be troublesome to revert, but premature generalizations are often near impossible."
Or, less delicately phrased by Chris Eric -- "Premature optimization, that's like a fart. Premature abstraction is like taking a dump on another developer's desk."
The root problem is -- you think you know all the possible use cases, you don't. You think you can see the future, you can't. Solve for what is in front of you -- abstract it when you need to for reuse.
As for Alan Kay and his fight against complexity (which is fair and nobel fight, great video on it: https://vimeo.com/82301919) -- he is arguing for the RIGHT abstractions from the perspective of DSLs ... with all the good (and very, very bad) that entails. That said, it is 7 levels of bullshit when you get down to "deploy to metal". Sure, it is a few hundred lines of code for a DSL and OMeta to render geometry -- but skip to 1:40:00 for the real scoop. It was incredibly hard to get to run with any level of performance on ACTUAL hardware in the REAL world. Alan Kay even puts forth that you should always keep the option of "rolling your own hardware", which sadly speaks to a disconnect with ACTUAL software development (and hardware development for that matter). There is no doubt he is a legend of CS (and brilliant), but I simply think his perspective is too far away from reality.
"Software does not run in a magic fairy aether powered by the fevered dreams of CS PhDs." -- Mike Acton (https://youtu.be/rX0ItVEVjHc)
The alternative is of course supporting dozens or hundreds of copies of a library and every possible commit hash of said library. I contracted at a python shop that had 81 versions of a single library in use all pinned at different versions. The reason I know this is that I had the great joy of dealing with upgrading all of them after a critical hole was not only discovered (the company knew about it for some time, but just didn't want to bother updating all those apps) but exploited... repeatedly.
> it's perhaps not surprising that you can import code from github .... but not specify which version you want. (unless that is now fixed?)
If by "fixed" you mean there are dozens of solutions to pin versions -- then yes. If you mean baked into the go tool, then no.
>> -> I believe there are some plugins for but here i haven't seen anything good so far.
Language dependent, Go has "Oracle" for example, for finding callers, etc.
> * debug inside your IDE
>> -> good point. have to wait for Neovim for this - I believe. Installing current WIP version from neovim is on my todolist. ;)
Clewn.
> * auto refactor (I.E. extract method, move variable, extract class etc...)
>> -> good point. don't know any good plugin.
Language specific, Go has multiple and lots of people write small bits of script to do this -- but it is a place IDEs are far ahead of Vim.
> * showing when files are/aren't in version control and integrating version control so that you view history in your IDE.
>> -> if you need to do in the editor... there is plugin for that. However, i found git command line is usually find. and for more serious committing I use GitX (L).
Nerdtree & git-nerdtree.
> * no tabs
There actually are tabs, but they probably don't work the way you expect, they are closer to viewports or workspaces, but they are there. You can also use assorted plugins to improve tabs and/or emulate them.
> * no project structure
Not sure I understand this way -- no enforced structure? Neither to IDEs, no tree viewer -- there are bunches of tree based file viewers.
> * in my IDE (eclipse based or intellij based) I can ctrl-click a class/object/other to navigate into that object's definition
This is supported by the tags system in Vim, which depends on ctags. :tselect, C-], lots more -- this exists out of the box.
> * in my IDE I can search for classnames, I can press ctrl-T to find who inherits from something, ctrl-alt-H to find who uses something etc...
This obviously very specific to some language you have in your head, as many of those things don't make sense in some languages. That said, this is supported in various languages by various plugins (In Go, Oracle for example).
> when I find myself actually writing code, it's usually a line or two in each of several files (because modern programming paradigms tell us we should split code as much as possible), or modifying some copy pasted snippet I found on google - so navigation is extremely important even when editing.
Agreed, which is why Vim has so many ways from jump-to-def to jump-to-file to various smart plugins for rails and C and <X>.
> * auto-complete(with annotation to tell you what the function variables are)
Gobs of plugins do this for Vim -- normally language specific and they tend to work rather great.
> * debug inside your IDE
See Clewn, full gdb support integrated with vim.
> * run code-lint, auto-build on typing to detect errors, etc...
Vim has all of that, syntastic will show errors in the left bar as you type, setting things to autorun is trivial, all major languages already have this.
> * auto refactor (I.E. extract method, move variable, extract class etc...)
Language specific (as is your IDE's features, because to do requires understand the language), but this exists in limited form for Go and C++ -- and I am sure others. The level isn't up to major IDEs. That said, many of these things are easily scriptable in vim.
> * format all your files according to your pre-specified project guideline.
Tons of vim support for this, even supporting standard 3rd party like EditorConfig.
> * sharing you IDE configuration with other contributors
I think you will find far more vimrc files shared in the wild than any IDE.
> * showing when files are/aren't in version control and integrating version control so that you view history in your IDE.
Fugitive has great time travel features for flipping through versions of files and seeing differences. Use git-nerdtree to add git status to nerdtree.
Right now that Deep Note has good feeling by association, it will grow to be your nemesis as your alarm. Then movies will remind you of your alarm. :(
Years ago I switched from Cherry to Topre when that was a fancy import-only thing. Now, you can get Topre all over the place. I use the Novatouch TKL currently with dampeners (which come right in the box) -- which is office friendly, has MX compatible stems and is just an all around awesome keyboard.
That said, I suspect "outside signaling" will become a huge thing. You tell your recruiter you need $X, your recruiter tells Reddit that you need $X, you get offered $X, how convenient for both you and Reddit! On the executive side, over dinner you discuss what it would take you to leave your current company -- of course, not negotiating, just two people talking -- and low and behold, the offer will be exactly what was discussed, of course, no negotiating.
If you are automating a large organization -- Powershell has one massive edge, already deployed and able to be managed sanely via the domain management tools with a permission model around it.
Some large (30k+ machine) organizations actually have fairly decent sized research projects on best ways to automate deployments and system management. It ends up being far trickier than it appears on the surface and any tool blessed by MS and shipped by default has a huge edge. Powershell might not be great -- but it is already on the machine and the competition is batch files.
Just realized I didn't mention the actual keyboard, too much inside baseball on this thread I guess -- you knew what I was talking about at least, the Novatouch TKL: http://gaming.coolermaster.com/en/products/keyboards/novatou...
It is interesting that in the time since I purchased it, they toned down the gaming aspect in the marketing.
It is almost assuredly a lie (as someone who is working on a project scaling to PBs -- I pressed a lot of vendors on "unlimited" or "infinite" and most said they simply couldn't scale to X).
I was able to get my hands on one, and it felt perfect... tenless, nkey rollover, topre, cherry mx keycaps, removable cable and built like a truck (thing is like 2 pounds).