<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: joncampbelldev</title><link>https://news.ycombinator.com/user?id=joncampbelldev</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 25 May 2026 01:27:10 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=joncampbelldev" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by joncampbelldev in "Mailchimp insiders react to employees getting no equity from Intuit sale"]]></title><description><![CDATA[
<p>NOT OP but there's very little I would not sell or change my mind for $5bn.<p>That much money just to go back on a promise to not sell would be a very easy decision (bear in mind that no material harm is done to the employees, no equity was promised, no equity was given, they never had a chance to share in the sale regardless of the founders' promise)</p>
]]></description><pubDate>Fri, 17 Sep 2021 13:10:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=28565041</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=28565041</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28565041</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Mailchimp insiders react to employees getting no equity from Intuit sale"]]></title><description><![CDATA[
<p>I believe they're getting $5bn each. Though of course your point still stands.</p>
]]></description><pubDate>Fri, 17 Sep 2021 13:07:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=28565013</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=28565013</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28565013</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Mailchimp insiders react to employees getting no equity from Intuit sale"]]></title><description><![CDATA[
<p>I don't see the promise impacting an employee's decision at all:<p>1) Founders promise not to sell. Employee is offered salary without equity.<p>2) Founders say nothing about selling. Employee is offered salary without equity.<p>In both cases the employee has lost nothing of value. Someone made the founders a pretty ridiculous offer ($12bn for $700mn revenue company). Why should they refuse? No one is being harmed by the sale apart from some employees incorrectly assuming a broken promise means they deserve a chunk of the sale .... a sale that they would NEVER have benefitted from regardless of the original promise.<p>Compare this to the usual startup "promise" of low salary but equity and fingers crossed we'll sell. Presumbly mailchimp had to offer higher salaries to compensate for the lack of equity offered. And if they didn't then that was a silly choice by the employee (low salary and no equity).</p>
]]></description><pubDate>Fri, 17 Sep 2021 13:01:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=28564964</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=28564964</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28564964</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Nerds don't respond to marketing; try technical documentation instead"]]></title><description><![CDATA[
<p>Not the person you're responding to, but those comments are not saying the same thing at all.<p>One asserts that nerds want to know the details for ego reasons.<p>The other asserts that he (presumbly as a self-proclaimed "nerd" in this situation) wants to know the details because otherwise he has no idea if the product is even useful.<p>If the product being sold is actually that simple e.g. "trade stocks with a few clicks" thats fine. But for anything that requires customisation, integration or any kind of technical support thats not true. You need to know the details to know if it will work.<p>This very much matches the stereotypical enterprise sales disaster i.e. buzzwords and flashy things sold to c-suite that are then suffered by those who actually use them and find that it doesn't do what they need<p>EDIT: also in this context where the article title specifically mentions "technical documentation" we are clearly not looking at the super simple type of product.</p>
]]></description><pubDate>Mon, 16 Aug 2021 10:39:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=28196665</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=28196665</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28196665</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Six Years of Professional Clojure"]]></title><description><![CDATA[
<p>This comment helpfully explains many of the reasons Rich had for choosing immutable, persistent, generic data structures as the core information model in clojure (instead of concrete objects / classes): <a href="https://news.ycombinator.com/item?id=28041219" rel="nofollow">https://news.ycombinator.com/item?id=28041219</a><p>Not wanting to misquote the above / Rich himself I would TLDR it to:<p>- flexibility of data manipulation<p>- resilience in the face of a changing outside world<p>- ease of handling partial data or a changing subset of data as it flows through your program<p>Please note that no one (I hope) is saying that the above things are impossible or even necessarily difficult with static typing / OOP. However myself and other clojurists at least find the tradeoff of dynamic typing + generic maps in clojure to be a net positive especially when doing information heavy programming (e.g. most business applications)</p>
]]></description><pubDate>Mon, 02 Aug 2021 21:23:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=28042855</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=28042855</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28042855</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Signal community: Reminder: Please be nice"]]></title><description><![CDATA[
<p>TFA and the person you're replying are not suggesting you can never complain (at least I don't think they are).<p>There is a difference between not complaining vs raising issues constructively and valuing the maintainers time at least as much as you value your own time.</p>
]]></description><pubDate>Wed, 13 Jan 2021 14:59:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=25762738</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25762738</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25762738</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Signal community: Reminder: Please be nice"]]></title><description><![CDATA[
<p>Was the game free? And did the people working on the game contribute a lot of their time to it for free?<p>If not then I can see the reason for your frustration, however it is not the same as free software being worked on (at least partly) by volunteers receiving the same lack of effort (or in signal's case nastiness) in bug submissions.</p>
]]></description><pubDate>Wed, 13 Jan 2021 14:51:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=25762637</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25762637</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25762637</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Why Clojure? (2018)"]]></title><description><![CDATA[
<p>Regarding REPL restarts: You don't need to use stuff like component. There are far lighter weight alternatives with no requirements for app structure. I use "mount" [0] for this. You define "start" and optionally "stop" code for anything in your app that you consider stateful and would like to reboot (like db conn pools, config loaded from files / env etc). No interfaces / protocols, easy app restarts within the same repl, no enforced structure in your app. You just use the resources as if they were def'd vars in a namespace (because they are).<p>Regarding ecosystem and interop, in my experience (using clojure for about a third of the stuff at my job) I've rarely encountered a problem directly interop-ing with a java library, things like "doto" and "reify" do a good job of smoothing the rough java edges off.<p>More importantly I've usually had the choice of either directly using the using a pure clojure alternative or direct interop with java lib or using a clojure wrapper around the java lib. Incidentally those are my preferred choices in order (assuming the features I'm interested in are supported equally).<p>Perhaps I have been lucky in my requirements from the clojure / java ecosystems. I find the most important lesson I learned was to only use clojure wrappers if they are of a supremely high quality (either auto generated like cognitects aws lib or with a massive amount of momentum behind them like clj-http (wrapping on java http components)). An average quality or not super actively maintained wrapper is much worse than direct interop (again leaning heavily on the provided macros for interop to sand off the nastiness).<p>[0] <a href="https://github.com/tolitius/mount" rel="nofollow">https://github.com/tolitius/mount</a></p>
]]></description><pubDate>Sun, 03 Jan 2021 23:21:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=25626251</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25626251</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25626251</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Always leave the code better than you found it"]]></title><description><![CDATA[
<p>Please may you specify what consultant you're referring to here so I can answer more thoroughly.<p>In general, I highly doubt anyone would hire a consultant just to "rewrite code". Rewriting code is not a business objective. Improving application performance is, delivering features more efficiently and reliably is. These are some examples of objectives that might involve rewriting code (or not, not every codebase is a swamp in need of draining).<p>In the context of this article though, the code to be "improved" should be anything you touch. Did you use a function in building some new widget and you noticed it had no tests and no docs so it took you ages to integrate? Then add a test and the minimal doc string.<p>In terms of who is watching the consultant, I'm unclear why you're asking me, a person who has just said they would never hire a consultant to do anything with code. But if I had to, I would get someone of at least equivalent technical knowledge. However I'm pretty sure thats not how it usually works, which is probably why inept consulting companies rinse big companies for so much money for such lacklustre results.<p>But overall I really have no idea what you're talking about with regard to consultants and rewriting code. None of which seems to have much relevance to this article about making tiny improvements regularly. Unless your comment was in the wrong thread?</p>
]]></description><pubDate>Sat, 28 Nov 2020 18:05:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=25239192</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25239192</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25239192</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Always leave the code better than you found it"]]></title><description><![CDATA[
<p>Thank you for explaining much more clearly and succinctly than me.</p>
]]></description><pubDate>Sat, 28 Nov 2020 14:55:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=25237868</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25237868</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25237868</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Always leave the code better than you found it"]]></title><description><![CDATA[
<p>I think another possibility in addition to what you mentioned is that the original design was incorrect, or even just not very optimal. Just as an aside.<p>However this is all becoming a wide ranging statement about the entire job of a dev team. So far removed from the extremely innocuous advice of the article around "make small improvements regularly". Whilst you can apply caveats to that around "test your improvements", "check your improvement with others more familiar with that code" etc etc, these are all things that should be expected of a professional. At the risk of talking about no-true-scotsman.<p>If someone cannot be trusted with the advice "make small improvements regularly" then what the f<i></i>* can they be trusted with?</p>
]]></description><pubDate>Sat, 28 Nov 2020 14:51:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=25237849</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25237849</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25237849</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Always leave the code better than you found it"]]></title><description><![CDATA[
<p>I'm not entirely clear what you mean. Are you referring to the disaster artist consultant mentioned in another comment? I don't think anything can stop someone like that from wrecking things short of not hiring them.<p>Or do you mean that small incremental improvements shouldn't be attempted because a proper review of whether they are worth it or not will be "wasted effort" if its decided they are not worth it?<p>Or something else? Not being sassy, genuinely unsure.<p>As for me personally, I would never hire an outside consultant to improve a codebase. The incentives are all wrong (long term maintenance to be done after they leave) and it's unlikely they'll be working on it for long enough to properly understand either the codebase or the domain.</p>
]]></description><pubDate>Sat, 28 Nov 2020 14:41:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=25237790</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25237790</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25237790</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Always leave the code better than you found it"]]></title><description><![CDATA[
<p>Your article was very clear. Thank you for writing it.<p>It is a common refrain against simple mottos or ideologies in programming for people to pick the worst memory they have of a coder or experience as an example of why it cannot work.<p>As if the problem with a bad team member is that they heard the wrong motto, if only they hadn't started incorrectly following the boy scout rule their contributions would be exemplary.</p>
]]></description><pubDate>Sat, 28 Nov 2020 14:23:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=25237654</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25237654</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25237654</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Always leave the code better than you found it"]]></title><description><![CDATA[
<p>So for the consultant: Yes he did, clearly this consultant was an absolute disaster. An excellent cautionary tale of arrogance combined with lack of ability and design thinking. Changes made without thought / design or discussion with the team are unlikely to be "improvements", unless they're being made by someone intimately familar with the codebase (which an outside consultant cannot be).<p>For your second point, I don't really see the applicability of this specific concept of the boy scout rule to the situation of "business critical code that is in such a bad state the whole team agrees it should be rewritten".<p>However, were I to try to apply the concept to your situation, the first question to ask is "why are people afraid to change the code?". There's usually 2 reasons for this. Firstly, the code and the problem are super complex and hard to understand, this just takes a lot of time, to develop the knowledge and intuition around the code. Secondly, the code lacks tests (unit / intergration / functional / manual spreadsheet of test cases) that assert the behaviour you expect. Therefore my (unasked for and probably already known to you) suggestions for "leaving it cleaner than you found it" would be to make a start on understanding the code better through a series of very very very small refactorings. Pick one tiny function that is a mess and clean it up. At the same time, ensure your changes are correct by asserting all expected behaviour of that function.<p>If you are now saying "duh of course" well thats the point. I do not think a single reasonable person would suggest that a full rewrite of a complex business critical system that is either poorly understood, poorly tested or both is a charitable interpretation of what the article is talking about.<p>At the end of the day it is super easy to shoot down any idea or concept in programming, because we have so much power to abuse and ruin anything day to day if we're not careful. It's the easiest thing in the world to take a machete to a codebase without thought. But the problem there is the person holding the machete, they can't be trusted with it. I cannot think of a single thing that wouldn't be misinterpreted or done badly by some of the terrible coders I've met during my career.</p>
]]></description><pubDate>Sat, 28 Nov 2020 14:21:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=25237638</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25237638</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25237638</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Always leave the code better than you found it"]]></title><description><![CDATA[
<p>Other developers, unless it's a solo dev at a small company. Then roll the dice and hope you hired someone with good design sensibilities.</p>
]]></description><pubDate>Sat, 28 Nov 2020 14:09:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=25237574</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25237574</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25237574</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Always leave the code better than you found it"]]></title><description><![CDATA[
<p>Whilst improvements shouldn't be done ad-hoc without consideration, I think the concept of "left alone" applies more easily to the concept of natural spaces. In code it is really stretching the metaphor to do much more than very basic tasks like renaming or code formatting (e.g. picking up trash). Adding a test doesn't feel like "left alone".<p>One of the examples in the article is upgrading a dependency. This could easily fall into the category you mention if the upgrade itself is not properly tested. A considered approach would be:<p>"I want to make a small improvement, oh I see this dependency is out of date and has some minor vulnerabilities or perf issues, or is missing a feature that could come in handy for XYZ. Hmm, there are no tests confirming our assumptions about the current library version, nor are then any tests are our code / systems that use it. I guess my improvement should be to add those tests, then next time someone has the same idea it'll be an easier upgrade"<p>I am unsure but I also interpret from your first sentence that you may have seen people use this rule as a defence for gold plating (the opposite of KISS or YAGNI). Similarly this should fall under the heading of changes made without proper discussion, thought or consideration.<p>Otherwise I think we're really stuck, if team members cannot be trusted to properly interpret the boy scout rule without messing up a codebase then how on earth can they be trusted to build the foundation of their company / team / system?</p>
]]></description><pubDate>Sat, 28 Nov 2020 14:08:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=25237572</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25237572</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25237572</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Always leave the code better than you found it"]]></title><description><![CDATA[
<p>This sounds very different to the process described in post. Are you raising this anecdote as an argument against the boy scout rule?<p>I don't think you would find many people who would consider his actions a reasonable interpretation of it. I think this person would cause damage regardless of their motto or underlying intent.<p>Taking a leaf from the guidelines for person-to-person,discussion on this forum about arguing against the strongest version of your opponents argument: I think there is great value to lots of small improvements over a long period of time (no silver bullet etc). Certainly it should be tempered with the knowledge that the change is indeed an improvement. That can usually only be decided by the person who originally wrote it OR a consesus of the team involved.</p>
]]></description><pubDate>Sat, 28 Nov 2020 13:56:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=25237519</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25237519</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25237519</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Apple’s M1 silicon is all about platform control"]]></title><description><![CDATA[
<p>Funnily enough that is the inverse of the historical meaning of decimated (to destroy 10% of something).</p>
]]></description><pubDate>Mon, 23 Nov 2020 14:05:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=25186852</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=25186852</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25186852</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Professor suspended for using Chinese word that sounds like Racial Slur"]]></title><description><![CDATA[
<p>I am currently learning mandarin and my wife is chinese. This word, Na Ge (sometimes pronounced Ney Guh), can be said in rapid succession with little to no pauses between syllables, like an english speaker saying "um-um-um-um" or "yeah-yeah-yeah". Difficult to find a spoken version of this online, but please have a listen to this song [0] timestamped to the appropriate point.<p>A course on business communication in a segment apparently about "filler words" seems completely appropriate.<p>What concerns can these students have beyond "I am unable to handle foreign languages spoken in my presence"? These people better not visit a macdonalds in china because all the children around them will be shouting na ge whilst pointing at the menus.<p>[0] <a href="https://www.youtube.com/watch?v=xNRgHUs17vY&t=15s" rel="nofollow">https://www.youtube.com/watch?v=xNRgHUs17vY&t=15s</a></p>
]]></description><pubDate>Wed, 09 Sep 2020 16:16:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=24422552</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=24422552</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24422552</guid></item><item><title><![CDATA[New comment by joncampbelldev in "Simple Made Easy (2011)"]]></title><description><![CDATA[
<p>I believe conditionals is referring to if statements (and their ilk, switch/case/cond etc). Rules is referring to rule systems and/or more generally declarative knowledge systems. Things like core.logic in clojure (or prolog, datalog and minikanren in the wider world).<p>Stuff like this is not specific to clojure, however it would be harder to have an embedded rules system in your language if its not a lisp. You'd probably have have to resort to a string based DSL (something like drools in java).</p>
]]></description><pubDate>Wed, 22 Jul 2020 23:04:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=23922516</link><dc:creator>joncampbelldev</dc:creator><comments>https://news.ycombinator.com/item?id=23922516</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23922516</guid></item></channel></rss>