1. 2

    This is a really fascinating concept.

    It seems to really test some of the ideas laid out by Rich Hickey several years ago in this talk. It’s been some years since I watched the talk but I remember walking away thinking “wow, we really all do versioning of dependencies wrong”. A core argument seemed to be around this idea that once we depend on a function, it should NEVER change out from under us.

    Applying immutability as a value (heh) and applying it to source code itself is really, really intriguing to me.

    1. 2

      philosophical question, who do you pay back technical debt to? I think this is where the analogy breaks down. Ward Cunningham invented the term to explain what his engineering team was doing to a bunch of finance people. While the analogy may have made sense to said finance people, it makes less sense to me.

      I prefer the idea of entropy instead of technical debt.

      1. 7

        Your (future) self. We often speak of living on borrowed time, even though there’s no time bank from which to borrow time. Possibly alternately phrased as the devil always gets his due.

        The financial metaphor is very accurate. It’s all about time value. Having a feature today can be worth much more than the cost of building it twice over the long term.

        1. 1

          I don’t think it is that simple. What about when you leave the org? Maybe the org owns the debt? Who does it get the debt from? Itself? What about when the org fails, does the debt disappear? Maybe they open source it and the greater society takes on the debt? Does the debt have an interest? Usually you have to conciously acknowledge taking debt. How often do you find engineers decide consciously they are taking on “technical” debt? Debt typically has a schedule for payback, does technical debt have a schedule?

          It’s not that simple.

          1. 1

            The debt is like a lien against the code. As the owner of the code today, you get to make the decision to incur debt. When you leave and give the code to somebody else, they get the debt too.

            No, technical debt doesn’t require sitting down with a loan officer and filling out forms in triplicate and waiting for approval.

            1. 2

              BRAINWAVE: securitizing technical debt. GET ME A16Z, this bad boy isn’t going to last!

              1. 1

                Now you are getting into some classic religious territory about debt to the universe type stuff. We have a lien against the code which we borrowed from the gods.

          2. 4

            My favourite metaphor is a comparison to either a legal system or a tax code.

            As a society evolves, laws are re-written and supersede (parts of) previous laws, but the old laws aren’t usually retracted explicitly. The legal system becomes more complicated to interpret and reason about in general over time. Each legal document or law often references other clauses elsewhere as exclusions or edge-cases, requiring you to read or be familiar with those other parts in order to make sense of the document you’re interpreting. Anyone who has done taxes in the US knows how difficult it can be to work within complex tax codes.

            It is possible to aggregate and “compress” the effective laws or tax code into a simplified and revised set of documents that would bee less ambiguous, easier to interpret/change, and which read mostly linearly. Refactor it, if you will.

            1. 2

              Does it really break the analogy? How much does the other party matter? I suppose in theory it’s possible to renegotiate the terms of your real-world debt, but how often is that an actual concern for the business?

              I think entropy is a worse analogy in many respects. It suggests an inevitable law of nature rather than a choice, and that’s to the people to whom it suggests anything at all.

              1. 1

                I think it is more accurate because typically you have to consciously take on more debt. While most developers don’t even acknowledge they are taking any “debt”. Often many decisions are not conscious. It’s more like an inevitable law of nature you are fighting. And if you don’t fight it you die.

              2. 1

                To me, entropy carries the sense of inevitability and so removes the sense of it being worthwhile to oppose it.

                I prefer the debt metaphor since you are borrowing some effort from the future to have something today. If you are lucky you can write it off and have nothing to pay back.

                1. 1

                  You are fighting entropy just by being alive. Life IS about fighting entropy. And yes death is inevitable.

              1. 5

                Closing one’s laptop is perhaps the easiest if you’re running OSX. For the life of me, I cannot understand why there isn’t a fast lock hotkey for OSX (like Ctrl + Alt + L [Ubuntu variants] or Win + L [Windows]).

                The closest thing OSX has is Cmd + Opt + Power, which puts the machine to sleep. This isn’t useful if I want to step away from my machine while I’m SCP'ing a large file to a remote server! Just because I’m stepping away from the physical machine doesn’t imply I want it to go to sleep.

                1. 8

                  There is a hotkey: Alt+Shift+(Eject or Power, depending on your Mac). You just have to set up in system preferences that after monitor shutdown, it has to prompt for a password.

                  This way, the screen will turn off and when you reactivate it, it will ask for a password.

                  1. 7

                    *Ctrl+Shift+Eject

                    1. 2

                      Ah sorry, yes! It’s been a while since I’d last used my Macintosh computer.

                      1. 1

                        Thanks! Can’t believe I never came across this particular hotkey after all this time of using a Mac :)!

                    2. 7

                      On my Mac I configured a hot corner to lock the screen, so I just swipe the mouse down to the lower right corner of the screen and it locks immediately. Here’s a tutorial: http://it.emory.edu/security/screensaver_password.html

                      1. 5

                        I use Alfred (Spotlight search replacement), which has a lock command, along with other useful commands like eject.

                      1. 2

                        I’ve been using xhyve indirectly via dlite which is a transparent way to use docker on OS X which works superbly (for local dev scenarios at least—not production). It’s a really nice combination of tech IMO.

                        1. 4

                          Some of these are great, but the creator obviously got carried away with the likes of #{. Not every two symbols which sit next to each other in code need to or should be a ligature. However, I really like >=, ->, !=, >>, &&, ||, <=>, etc. Particularly silly are the comment prefix ligatures. I think I’d be happy if all the ligatures which reduced the kerning were dropped and the ones which substituted in symbols of significance remained.

                          1. 4

                            Yes. I like the idea a lot more than I like the implementation. If a symbol isn’t legible, it shouldn’t be in the set until a better rendition is invented.

                            I hope the ones that just tweak the kerning are done via the actual kerning table, and not the ligature tables. :) But I suppose that only matters to the font maintainer…

                          1. 3

                            Fantastic article @tylertreat. This very closely echoes my own experiences with Go, though ultimately the experience led me to put Go to the side. I spent a long time (too long) in a frustrating love/hate relationship with it. Thanks for writing this up—I’ll be linking to this often, I think.

                            1. 1

                              This was very interesting. Conclusion: don’t use any grammatical structure in your passphrases a la http://xkcd.com/936/

                              1. 1

                                I don’t know, a “more than 50%” decrease in search space isn’t that significant if you’re dealing with search spaces of the size that secure passwords have.

                                (Also “correct horse battery staple” doesn’t have any grammatical structure.)

                              1. 1

                                <3<3<3

                                1. 3

                                  Mostly I’m curious: aside from VimScript (which, at this point, I think is honestly a straw man in these conversations) what is it about Vim that its users don’t like? I’ve been using Vim for about 18 months; I’ve put together a vimrc that works for me and a small set of plugins that add functionality that I find useful.

                                  What is it that drives people who really grok Vim to explore other editors—and then do their best to make them like Vim?

                                  1. 4

                                    VimScript is more than just a straw man, IMO. VimScript is the entire gateway to extensibility of Vim and it’s abilities and flaws directly affect the experience in the editor. The main thing other than VimScript is how atrociously it handles external processes — especially if you want to interface with that process via a buffer (e.g. a terminal, REPL, whatever). Vim’s extensibility model is also complex and finicky.

                                    Don’t get me wrong… I put a lot of love into my .vimrc to get it right. But, when I have to use another editor, the things that are truly integral to the essence of Vim and the powerful abilities it brings are actually a pretty small part of Vim.

                                    I explored Emacs mostly because I was doing more Lisp and, being partially written in a lisp, Emacs' lisp support (esp with things like Paredit) is phenomenal.

                                    1. 4

                                      I had a pretty elaborate vim setup https://github.com/mbriggs/dotvim, and now I am using emacs with evil. I’ll go through the reasons why, with a giant caveat being I actually don’t care what editor anyone who reads this uses, so long as they learn it and it works for them. As someone who has used both, vim shines for people who aren’t in to heavy customization. You can heavily customize vim, but it is so easy to make it dog slow, and even with a ton of work you won’t hit what you can accomplish in emacs. Here are some examples, and also essentially why I am no longer using vim, YMMV If I want to run a command and have it pipe to another buffer AND not completely lock up the editor, I can do that with a few lines and compilation-mode. This is next to impossible in vim. I can split my editor window and have a shell running on the other side, that i can use all the keys and tools on that I use to edit code, again, not possible in vim. I can have a repl connected to my editor that the editor uses for auto-complete targets, and to pass code to to evaluate it. You can fake some of this in vim with a bunch of hackery, but it is nowhere near as nice. There is also a pretty wide range of modes that are possible to do in vim, but for whatever reason just aren’t there. Some I use constantly all day: smex lets me fuzzy narrow a list of all commands in the editor to find what I want (kind of like sublimes command pallet) auto-complete will put up a light grey outline of text as you type if it finds things you can complete, if you want to select it you hit tab, if you ignore it it won’t intrude on your life. magit is sort of like fugitive, just way more full featured, and the UI is quite a bit nicer. I have tried a bunch of git gui tools, and even those costing ~80$ really don’t hold a candle to magit (once you learn how to use it) flymake tells me about syntax errors as I type js3 mode has some of the best js indentation I have seen, and does full AST parsing, which means it can tell you things that are wrong with the code as you type. Linting on save works as well, but this is nicer. org-mode is an amazing tool for many things. I use it for notes, team brainstorming sessions, todo lists. Lets say I am testing a csv output, if I paste it into an org mode buffer, I can c-c |, and it becomes a tablle that I can navigate, modify, sort, etc. Haven’t used any general purpose structured text tool that even comes close. If you pair it with deft, and store your org files on dropbox, you can have an amazing searching interface to a directory of your notes/todos/etc that auto-backups/replicates. This is just scratching the surface. calc-mode is the most advanced calculator app i know of on my computer. regex-builder i use regularly. IDO mode is so sweet it is really painful to watch vim people use :Explore Finally, the last piece is elisp vs vimscript. I got to the point with my vim usage that I needed to learn vimscript to do what I wanted to do, and I hated it. elisp has its own quirks and baggage, but it is so far ahead of vimscript in every way that you can barely compare the two. vimscript is a giant hack tacked on to a massive existing set of commands, compared to emacs which is an elisp platform that happens to have implemented editor functionality.

                                      1. 2

                                        The formatting of your comment got messed up – it’s all one big paragraph. Here’s a version I made that corrects that, making the comment easier to read.

                                        Use two consecutive newlines for a paragraph break, not just one newline. See my version’s Markdown source for an example. You can check your formatting with “Preview Comment” before posting.

                                        1. 2

                                          I wish I had read your comment before reading the entire über-paragraph.

                                          1. 2

                                            I think I actually hit some sort of bug. It was nicely formatted, but I edited, which created a new comment. Then I copy pasted the edit into this one, and made mega-paragraph. Now I cant edit :(

                                      1. 1

                                        The feature list says it has an A8 processor, but the photo shows it with an A10…

                                        1. 3

                                          Having have done a bunch of Clojure recently, the prospect of using it’s varying data representations in other contexts and languages makes me very excited…

                                          1. 1

                                            it’s –> its

                                          1. 2

                                            This article is neat because I think that it explains the difference between NJ style and MIT style on a personal level, rather than on a project-wide level, looking into the root causes of the MIT style. Although Ritchie could just dig in and make what people wanted, the lispers got stuck doing the right thing. CL was something of a concession, with loops, etc, but not “hack”-ish enough to cut it.

                                            My favorite part of this is definitely the Into the Woods quote though.

                                            1. 3

                                              My favorite anecdote about MIT vs. NJ style comes from Richard Feynman in “Surely You’re Joking” (pg 62). Feyman graduated from MIT undergrad and entered a PhD program at Princeton, because all the best results from experimental physics were coming out of their cyclotron. When Feynman showed up he realized why. Everything at Princeton was a hack job — wires strewn everywhere, a real mess. But they were agile, hacked things fast and got the best results the fastest. But all that chaos eventually caused a fire that destroyed the cyclotron.

                                              http://books.google.com/books?id=7papZR4oVssC&pg=PA62&lpg=PA62&dq=%22incidentally+they+had+a+fire+in+that+room%22+feynman&source=bl&ots=esR-ggmPZ0&sig=E3O347XzCtTKYP8G0CvplUV7UMs&hl=en#v=onepage&q&f=false

                                              Startups hack because that’s how you make big wins. But once you’re established the risk of fires outweighs the potential gains, so you slow down and do things MIT style.

                                              1. 1

                                                My favorite part of this is definitely the Into the Woods quote though.

                                                <3 Sondheim

                                              1. 3

                                                Being a hacker has come back to bite me in some ways, though. Poor architecture decisions can really slow you down once you’ve gotten past the proof-of-concept stage. I’ve rewritten products from scratch after POC and I gained iteration speed because of it, but I do wish I had thought a bit harder about the arch before I jumped in.

                                                1. 2

                                                  Agreed. That’s what pushed me the other side. I think the answer is somewhere in the middle… at least, for me.