HNHacker News
TopNewBestAskShowJobs

joncampbelldev

335 karma · joined July 28, 2015

submissionscomments
joncampbelldev··on Mailchimp insiders react to employees getting no equity from Intuit sale
NOT OP but there's very little I would not sell or change my mind for $5bn.

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)

joncampbelldev··on Mailchimp insiders react to employees getting no equity from Intuit sale
I believe they're getting $5bn each. Though of course your point still stands.
joncampbelldev··on Mailchimp insiders react to employees getting no equity from Intuit sale
I don't see the promise impacting an employee's decision at all:

1) Founders promise not to sell. Employee is offered salary without equity.

2) Founders say nothing about selling. Employee is offered salary without equity.

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.

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

joncampbelldev··on Nerds don't respond to marketing; try technical documentation instead
Not the person you're responding to, but those comments are not saying the same thing at all.

One asserts that nerds want to know the details for ego reasons.

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.

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.

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

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.

joncampbelldev··on Six Years of Professional Clojure
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): https://news.ycombinator.com/item?id=28041219

Not wanting to misquote the above / Rich himself I would TLDR it to:

- flexibility of data manipulation

- resilience in the face of a changing outside world

- ease of handling partial data or a changing subset of data as it flows through your program

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)

joncampbelldev··on Signal community: Reminder: Please be nice
TFA and the person you're replying are not suggesting you can never complain (at least I don't think they are).

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.

joncampbelldev··on Signal community: Reminder: Please be nice
Was the game free? And did the people working on the game contribute a lot of their time to it for free?

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.

joncampbelldev··on Why Clojure? (2018)
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).

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.

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

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

[0] https://github.com/tolitius/mount

joncampbelldev··on Always leave the code better than you found it
Please may you specify what consultant you're referring to here so I can answer more thoroughly.

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

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.

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.

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?

joncampbelldev··on Always leave the code better than you found it
Thank you for explaining much more clearly and succinctly than me.
joncampbelldev··on Always leave the code better than you found it
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.

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.

If someone cannot be trusted with the advice "make small improvements regularly" then what the f* can they be trusted with?

joncampbelldev··on Always leave the code better than you found it
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.

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?

Or something else? Not being sassy, genuinely unsure.

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.

joncampbelldev··on Always leave the code better than you found it
Your article was very clear. Thank you for writing it.

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.

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.

joncampbelldev··on Always leave the code better than you found it
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).

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

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.

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.

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.

joncampbelldev··on Always leave the code better than you found it
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.
joncampbelldev··on Always leave the code better than you found it
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".

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:

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

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.

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?

joncampbelldev··on Always leave the code better than you found it
This sounds very different to the process described in post. Are you raising this anecdote as an argument against the boy scout rule?

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.

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.

joncampbelldev··on Apple’s M1 silicon is all about platform control
Funnily enough that is the inverse of the historical meaning of decimated (to destroy 10% of something).
joncampbelldev··on Professor suspended for using Chinese word that sounds like Racial Slur
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.

A course on business communication in a segment apparently about "filler words" seems completely appropriate.

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.

[0] https://www.youtube.com/watch?v=xNRgHUs17vY&t=15s

joncampbelldev··on Simple Made Easy (2011)
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).

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

joncampbelldev··on The Unfriendly Robot: Automatically flagging unwelcoming comments
TFA appears to address this, the automated system is used to help identify comments for human moderators. The human is the one responsible. And according to stack overflow they plan to use this system only to help the human moderators.

If you don't believe them and suspect they will have a fully AI flagging system in the future (in direct contradiction of this post) thats fine but it might be better stated as such, since human judgement is currently still paramount.

joncampbelldev··on How I gained commit access to Homebrew in 30 minutes
I can confirm that buildkite is a fantastic replacement for jenkins.

- pipelines stored in source control

- hosted on your own servers (with easy one click setup in AWS if you're too busy for all that)

- excellent cloud hosted UI

Also not affliated, just a happy user who replaced a large jenkins setup where I work with buildkite.

joncampbelldev··on Should I Learn Java in 2018
A language with no built-in multi-threading capabilities is unlikely to suit every backend. Running multiple copies of the same lightweight process works quite well for stateless http interaction (request -> database -> response), but it's a lot of overhead to cross process boundaries every time you want to run something in another thread.

I also have a question about the loss of mindshare. What new technologies are unaccessible from Java, but are accessible from at least 2 other languages (one of which is TypeScript / JavaScript)? A loss of mindshare would likely mean smart people aren't around to build libraries / integrations to the latest hotness.

My background: Originally a Java developer, now mostly Clojure. Also a Javascript (mostly react) developer.

joncampbelldev··on The Machine That Builds Itself: The Strengths of the Lisp Languages (2016)
Can you list some of these metrics?
joncampbelldev··on Sprintly Is Not Shutting Down
Same, was reviewing alternatives to mingle a short while ago, saw nothing of this product.
joncampbelldev··on How many deaths make a disaster newsworthy?
This comment would be less silly if the above hadn't made it clear that the "honour" is entirely from a western point of view.

It is then up to any japanese / non-western readers whether they give a shit about the honour conferred by some westerners.

Honour (like most things) is subjective and varies from culture to culture. Perhaps the day a universal register of honour is established you can post your comment again when some westerner applies to give honour to the japanese again.

joncampbelldev··on Unroll.me to close to EU users saying it can’t comply with GDPR
So to say it "came into force" before its being enforced is at best a poor choice of words.
joncampbelldev··on Over 30? Too Old for Tech Jobs in China
As a programmer approaching 30 I can confirm this for me. I am horrified that a company would prefer the long hours / low quality output of my earlier years compared to my current fewer hours / more thinking / higher quality output. I can only hope that I will improve a bit more as I cross over 30.

Who knows, perhaps I will immediately plateau and never learn or improve after 30 ;)

joncampbelldev··on Redux – Not Dead Yet
Just wanted to say thank you for mentioning rematch, it's exactly what I've been looking for.

I've built a couple of apps with redux and always wished it was closer to clojurescript's reframe in terms of minimal boilerplate. Rematch does exactly what I need.

joncampbelldev··on Ask HN: Will my comments/topics on HN be deletable under the GDPR law?
Most likely the enforcement would be applied as a restriction on any future business done in the EU assuming the US company refuses to pay the fine.
Page 1 of 6Next →