Hacker Newsnew | past | comments | ask | show | jobs | submit | ndriscoll's commentslogin

One thing I've learned in life is to accept that I'm in many ways an outlier, which means that even if the research is done, it frequently doesn't apply to me anyway.

Like I wouldn't doubt that research could show that more time spent on youtube is inversely correlated with learning. But if you just use it to watch lectures or tutorials for some skill, obviously you will be an outlier.

Or when "research shows that dieting doesn't work," obviously the result there is "research shows that most people don't maintain a healthy diet," and it shouldn't dissuade you from doing so. Choosing to do so anyway is what makes you the outlier.

And so it will likely go with AI's effect on the brain. Most people will likely use it to avoid thinking, and the research will show it to be a disaster. A small group will use (or already is using) it to challenge them and expose them to new ideas. You can choose to be in the latter group if you'd like.


> One thing I've learned in life is to accept that I'm in many ways an outlier, which means that even if the research is done, it frequently doesn't apply to me anyway.

This is a complete logical fallacy. It is quite literally mathematically impossible for you to not be "typical" for at least some aspects of your life. If you weren't, you'd probably be dead, or immortal.


Sure, I expect that if you gave me the LD99 of some poison, I will die. But there are still many things (and my point is this is one of them) where all it takes to be an outlier is to decide to be one.

I am pretty sure that likewise in the 1950s many smokers did indeed decided to be the outlier who smokes occasionally, and for the right reasons, and using the “correct” method/brand of cigarettes. And that every one of them decided that they were not gonna get addicted to nicotine. I am also sure that every single one of them did indeed get addicted to nicotine, and many of them died from cancer.

>You can choose to be in the latter group if you'd like.

And now you inherit the burden of proving you are "one of the good ones" after a mass amount of disappointment from the normal use case. I don't think the "it's okay, I'm different" methodology ever works out unless you can prove you are so utterly beyond the competition that you can't be ignored.

But an outlier is just that. And as we see here, outliers cannot change society single-handedly. You at least need to be an outlier good enough to convince a lot of "normal" people that you are to their benefit and be willing to lead those "normal" people.


You don't need to prove anything or lead anyone or change society. You have a tool in front of you that can help you achieve your goals or distract you from them. You decide how you want to use it. Just do your thing.

> It is easy in the world to live after the world's opinion; it is easy in solitude to live after our own; but the great man is he who in the midst of the crowd keeps with perfect sweetness the independence of solitude.

Ralph Waldo Emerson


So you're just saying "it's okay I got mine" in that case, and don't care if the rest of society rots because "I can use it well". Fair enough.

And I assume you never need to worry about applying to a W2 job with that mentality


I mean sure I care. I'd love for my kids to grow into a world where everyone around them is a super jacked highly competent and motivated ubermensch, but what are you supposed to do? How are you supposed to get people to not let themselves rot other than to remind them that it's an option, and all they need to do is to decide to take it. If anyone doesn't care, it's the person who's resigned to the inevitability of rot even in the face of someone telling them they're looking at a tool for self-improvement.

>I'd love for my kids to grow into a world where everyone around them is a super jacked highly competent and motivated ubermensch, but what are you supposed to do?

I just gave an example. Use your power to lead and improve your community, and society as a whole. Use your leadership to add guardrails so the tools assist the user, as opposed to the current state of unchecked capitalism that simply extracts funds with no care for results.

You dismissed it and said to focus in yourself. Which is exactly how we get to such a situation.

This contradictory feeling of powerlessness while simultaneously striving to use such tools to influence the community simply shows why the wider population is gaining mistrust for the tech. Telling people to be better people because ot works for you has never ended well.


Simple: if you don't publish your work, we don't fund you. Why is this even a question?

This is about cooperation before publishing results. And they will keep everything medieval secret, else some big company steals it and claims it their own.

So then the solution is to publish more often (e.g. on a public blog) even if your ideas are not fully developed in order to establish priority and show you are doing something.

Analogously with software development, it's always been good practice to write things down, but since the start of this year it's become dramatically more important for everyday work.


I don’t follow… if you publish your underdeveloped ideas, these companies will develop them for you, which is the problem

A maybe example that springs to mind is how Gauss discovered the FFT in the early 1800s (predating even Fourier analysis) but didn't find it interesting enough to publish, so while his work was important, it was also forgotten and had to be rediscovered.

Goddamn Gauss, man.

How is that a gotcha? If there aren't two elements how could you possibly expect a function with two arguments to be called? What would you call it with?

You can easily write the code with only one-arg functions. Example:

  myStream.min(Comparator.comparingDouble((obj) -> { ... }));
You might think: it will map over the objects and convert each object to an number, and take the object with the lowest value. Except that's not what it does. You'd be wrong!

Comparator.comparingDouble returns a comparator, which is a two argument function, which is what min expects. Min can't know how your comparator is defined without reflection to do that kind of peeking, and as you point out, that kind of peeking would cause observable differences in behavior.

min is a generic method. All it knows is it has a Stream<T> and a function taking two Ts. The only thing it can do is plug in Ts it gets from the stream.


It just means if you have some functor F (generic type with a well-behaved `map` function, like List), then you have a `flatten` operation F[F[_]] - > F[_], and like a monoidal product, it's associative. So if you have a triply nested List, you can flatten inside first or outside first. Also, like a monoid, it has an "identity" function wrap: A->F[A] (e.g. x -> [x]). Identity in the sense that "multiplying" (flattening) with wrap does nothing. i.e. wrap(flatten(x)) = flatten(wrap(x)) = x when those things make sense.

So basically wrapping and flattening behave in a sane way. Flatten is your multiply, wrap is your multiplicative identity, and it's like a monoid if you squint.


You have become the meme.

"The meme" literally comes from a book that was offering it as an intuitive explanation of a long definition, assuming you know what a monoid is. All the laws and stuff boil down to "if you generalize the idea of a monoid a little bit, and if you have some functor+flatten+wrap forming a monoid, we call that a monad." If you don't know what that stuff means then obviously it's not for you, but if you do, then it's actually a concise way to give an intuition for "what (or why) it is," which is basically just that flatten is associative and wrap is neutral.

Like if someone says they know about rings and modules, you might say that an ideal is just an R-submodule of R, which grants an interesting perspective and gives a quick, memorable definition. But if they don't know about modules, you might not give them that definition.


The point is that the terminology surrounding this is impenetrable and non intuitive. Rather than acknowledge that, we get a lesson on category theory, which is missing the point.

  def reduce(acc, f): 
    for v in self:
      acc = f(acc, v)
    return acc
The current acc goes out of scope each time you call f. There's no shared reference (assuming f doesn't sneak store it elsewhere, which for string combining, f should just be `return a+b`?).

The binding for acc in the reduce call is still active during the f call, which means there are at least two references to acc.

Why is it still active? Even an interpreter with no lookahead could see that it goes out of scope immediately when f returns (it gets shadowed on that line), so as long as there's no guarantee about when finalizers get called, it should be able to mark it dead inside of reduce as soon as it's passed to f. Like move semantics here should be a general pattern for optimization, no?

Does Python actually do that? If the f call throws, you can still observe the (unchanged) binding of acc in reduce.

Fair, I suppose there's no end to the level of insanity that a programmer can do in a dynamic language. I'd think it could perhaps still look to see there's no catch, but maybe eval makes even that impossible.

I don't see why that's a technicality. Youtube has plenty of rules already for their business partners. They could definitely make it so e.g. no paid advertising is allowed, or all paid advertising must have metadata attached so that premium users never see it, etc.

I write software for a living and think we should abolish software copyright, and furthermore, source availability should be a basic consumer protection requirement. Basically the free software definition should be law.

And you don’t think abolishing copyright would impact your career or your ability to feed your family?

Of course I think it would change things. You think I haven't considered that? But I also think society would be a better place if we worked to produce new software that people desire instead of gatekeeping what already exists, and if the law banned this one-sided gatekeeping. The goal of all people should be to build lasting wealth for the next generation to inherit, not to hoard what is naturally infinite.

Plumbers don't extract subscription fees from your use of the toilet. Electricians don't get a fee for your use of a light fixture. They don't get a monopoly on fixing your things because you bought it through them. The whole idea of IP is absurd. It should be the opposite: anyone should always be free to go to someone else if they become unhappy with us, taking the work they bought from us with them. The law should bar any attempts to stop them/build roadblocks.

Happily, I see LLMs have great potential to make everything effectively FOSS now anyway, so all we really need is regulations against anti-competitive behavior like requiring signed firmware.


> I also think society would be a better place if we worked to produce new software that people desire

That's the entire point of copyright -- to incentivize this work by conveying ownership to those who produce such software. Without ownership, others would be free to take it and give you nothing. The world doesn't work for free. I doubt you do, either.


That's the ostensible point, and I think does the job extremely poorly, and is often if not usually counterproductive. Without payment, there'd be nothing to take, since as you say, the world doesn't work for free.

Software either has some functional purpose, so people will pay to see its creation (e.g. device drivers; no one will buy your hardware if there's no software for it to do anything), or it exists as e.g. art, in which case patronage avoids the damage of copyright. Either way, if you want to incentivize creation, then you should want a system where payment is for creation, and where further creation (e.g. paying a different developer to modify it) is freely allowed. Copyright is a system where people pay to rent, so once it's created you can rest on your laurels forever unless someone undertakes the inefficiency of recreating the same thing for no reason before they can add to it.


> if you want to incentivize creation, then you should want a system where payment is for creation, and where further creation (e.g. paying a different developer to modify it) is freely allowed.

Why is that? I would think that the possibility of exclusivity over derivative works is an even greater incentive to creation.


And yet we have proof right in front of us that e.g. Apple will not port their GPU drivers to Linux, and people had to reverse engineer it, so clearly the evidence says it does not create that incentive. In fact, copyright law for software is quite frequently used to manipulate and control appliance owners or end-users, even when the software itself is not really "the point" of the thing (e.g. putting ads and spyware in cars or locking out the ability of the owner to use their heated seats).

> And yet we have proof right in front of us that e.g. Apple will not port their GPU drivers to Linux, and people had to reverse engineer it, so clearly the evidence says it does not create that incentive

On the contrary, Apple engineers--paid professionals--wrote the driver to make MacOS work with the integrated GPU.

I don't know why you think not writing a driver for Linux is proof of anything, other than that Apple does not care one whit about Linux. They have no interest in that. They build integrated computer systems (hardware + software); to build them for Linux is, to them, an utter waste of resources.

> copyright law for software is quite frequently used to manipulate and control appliance owners or end-users, even when the software itself is not really "the point" of the thing

That's right. Builders of things get control over what they build. That control is designed to maximize profit, which is a strong motivator for building novel and useful things. If you don't like what they're building, buy something else, or build something better! That's how capitalism is supposed to work.


Okay, but nobody can pay a random software engineer to go take the Apple driver's code and use it to make a working Linux driver that they can use on the hardware they purchased. So Apple's monopoly on their source code is not incentivizing any creation (they had to write it anyway to make the hardware useful), and is in fact disincentivizing it (now if someone wants e.g. a Linux or Windows driver, they need to undertake the previously monumental task of also reverse engineering the hardware, which is much more difficult than the original software creation).

And product tying (requiring that if you want to buy Apple's hardware you must also use their software) is an anti-competitive practice that harms society, which is why I oppose it. The world is a better place when you can plug your Dell monitor into your Apple computer and it just works. It's also a better place when you can buy your operating system from Canonical if you'd like to run on your Apple computer. It means we all have more choice. Even if Apple doesn't want to have any part in making that work, we should say they have to release the necessary information to let you pay someone else to do it if you'd like, or at least let people re-use whatever they do get from Apple to make it work (e.g. look at what Apple's binary code does). As I said, it's a basic consumer protection requirement for the 21st century where everything has software now.

Society gains literally nothing from letting them have a monopoly on software necessary for their hardware to run, so why give it to them?


> The world is a better place when you can plug your Dell monitor into your Apple computer and it just works. It's also a better place when you can buy your operating system from Canonical if you'd like to run on your Apple computer. It means we all have more choice.

The thing is, you're suggesting imposing that choice on the unwilling. What if I, as a creator, don't want to see the software I put my blood, sweat, and tears into running on inferior (or less capable) hardware, or vice versa? Whether that is "better" for the world isn't obvious to me.

> Society gains literally nothing from letting them have a monopoly on software necessary for their hardware to run, so why give it to them?

I think it comes down to whether you believe hardware and software are always severable things, or whether you believe they comprise an integrated product. If you think like a hacker, they are the former. If you think like a product person, they are the latter. Woz was a hacker. Jobs was a product guy.


What if I, the owner of Standard Oil, don't want my oil in inferior cars? Or if I, the owner of AT&T, don't want inferior phones on my network? Too bad. The correct course of action to take with companies that try that is to dissolve them.

Programmable hardware and software are obviously always severable. This is not up for debate, but is a basic fact. You can always sell the product you want. That doesn't mean you have the right to control how the owner uses it. If they want to install Linux on it, that's their prerogative. If they want to shoot it out of a cannon or detonate it with an M-80, also their prerogative. If someone wants to sell an emulator for your hardware that runs your software, also fine (and explicitly ruled legal).


> What if I, the owner of Standard Oil, don't want my oil in inferior cars?

That makes no sense, either as a hypothetical or a historical reference.

> Programmable hardware and software are obviously always severable. This is not up for debate, but is a basic fact.

That's a fact you made up that sounds "truthy". It's an opinion. You're entitled to your opinion, but you're not entitled to make up your own facts. And yeah, it’s up for debate. You know how? Because people have been debating this for decades.

Think about all the gazillion pieces of hardware out there that have dedicated control software that works closely in tandem with the hardware. Practically nobody is clamoring for the absolute freedom to replace the hardware in the stability control systems for for their vehicles or the autopilot systems in airplanes.

> You can always sell the product you want. That doesn't mean you have the right to control how the owner uses it.

You must be unfamiliar with this thing called "the law." You don't "own" the software component of an object when it's purchased. What you do "own" is a limited transferable license to use it, which conveys with the physical object. Same with all forms of physical prerecorded media.

Perhaps you are arguing for how something should be. And that's fine, but that's different from what is.


It's literally not a statement of opinion. It's a factual statement about how computers work.

And yeah people hack their appliances all the time. Car modders replace all sorts of things; I don't see why they wouldn't touch software (in fact I already gave an example of an obvious piece of control software to mod: locked down seat heaters). Airplanes have a unique regulatory environment where "consumer" protection is less relevant, but for the same reason it's not like copyright serves a purpose.

I'm familiar with the law; I said we should change it. And no, when I buy a computer, I own the computer, not a limited license to use it. It is 100% mine. I can smash it with a hammer and no one has any recourse because they don't own it; I do. I can replace chips on the board if I'd like, or move chips onto another board. And I absolutely can install other software on it if I please.


> when I buy a computer, I own the computer, not a limited license to use it.

You own the hardware portion of the computer. You do not own the software portion. Look, if you don't believe me (IAAL who studied this in detail), ask your own attorney. If they tell you different, give me their contact info. :-)

> And I absolutely can install other software on it if I please.

You might be able to do that, mechanically speaking, but the vendor is under no obligation to help you either install it or make it work (safely, or even at all).


Yes, this is why I say we should abolish software copyright, and the vendor should have an obligation to provide their source code, and it should be illegal to use technological measures to try to stop you from making it work (e.g. firmware signature checks). Basically the Free Software definition should be made law. I wouldn't have had to say I support changing the law if it were already correct.

others would be free to take it and give you nothing

And that's fine, because I'm being paid to provide a service, actual labour (which might admittedly involve prompting an LLM), but it's still doing something new. There's tons of people being paid to work on OSS, and much of which would still exist by volunteer effort alone.


> There's tons of people being paid to work on OSS, and much of which would still exist by volunteer effort alone.

Those people are largely working on OSS as a hobby or for clout, i.e., to kickstart their career; or, they're working on a loss leader that will (if history is any indication) eventually lead to a license rug pull when they find out GPL/BSD/MIT licenes aren't a path to riches.

I'll concede that hobby projects that have led to Linux, programming languages, etc. do provide valuable connective tissue to the world, but most of the stuff that appeals to the end user isn't OSS.

> I'm being paid to provide a service

If you're like most of us, you're likely being paid to provide a service that depends on copyright as a foundation. Ask your company's lawyer their opinion on what the company would do if your work wasn't protected by it, or if someone broke into your company's source code repos and stole it.


Wouldn't B's publication of the information make it by definition no longer a trade secret? It is now public knowledge, regardless of whether the current or former engineers might be liable for the original leak.

Any other interpretation would mean trade secrets have essentially infinite protection/NDAs apply to all of humanity.


> NDAs apply to all of humanity

The NDA doesn't apply to people who haven't signed it, but copyright law does. If you know the material you're receiving is under copyright (eg proprietary source code), and you publish work based on that copyright material, the fact that it's now widely available is not an effective defense against claims of copyright violation.

Person B in this scenario hasn't violated the NDA, but they could be sued for copyright infringement.


The point of a clean-room implementation is that the only thing passing from A to B is a detailed specification written from scratch, because functional details cannot be copyrighted.

Which I think you know, so I don't understand your argument.

You said in another comment "However, this specific thread is about the scenario where an employee has inside knowledge and is passing that knowledge on to the implementer."

It being proprietary and/or secret information doesn't affect the copyright of the clean-room output. If there's trade secret implications those are worth discussing, but as a separate issue.


Functional details can’t be copyrighted, but once you’ve seen a copyrighted implementation, it’s an argument in court over similarity and function.

A clean room implementation by people who haven’t seen the original work means there can be no discussion of copying, which makes it much cheaper and more reliable to fight an infringement claim.


Assuming I understand what you mean by "people", then this comment sounds completely correct and contradicts your last comment.

Your last comment said person B could be sued for copyright infringement. But the essence of clean-room is that person B "hasn't seen the original work which means there can be no discussion of copying".

Person A is not giving the original documents to person B, they only give functional details.

One of your earlier comments had a vague description of clean-room that wasn't clear on this aspect. But you were responding to someone that gave a clear and correct definition, so I assumed you were also using the actual definition.

If you've actually been talking about fake not-really-clean-room then sure someone could get sued. But that's obvious. The suggestion by alightsoul was actual clean-room.


Most engineers don't get to decide to use a language either. Usually someone with the clout to pick a language has the clout to set style requirements too.

They do get to decide which jobs they take. And the languages involved are one of the easiest filters. A lot easier than checking whether the code a company actually writes is any good.

Theoretically you don’t need to write AbstractFactoryProvider in Java, but looking at languages mentioned in job offers, I have a pretty good idea of which of them have a high probability of working with such code and which do not, even if all of them say they have the best code ever.


There are plenty of reasons why someone might not have a wide range of job options available and need to prioritize based on other factors than the language they have to use.

For concrete example, it took me a long time to find a job last year due to only fully remote being viable since my wife's autoimmune condition means I'd be risking her health by commuting, and nowadays most places seem to either expect hybrid if you live near an office (I'm within the geographic limits of NYC despite being nowhere near Manhattan), restrict by time zone (there were quite a few jobs I was interested in where they only would accept remote with Pacific or Mountain Time), or have onerous travel requirements (multiple opportunities I interviewed for didn't work out because they expected me to fly to the west coast every couple of months, which between the time there and jet lag would mean I'm not productive close to a quarter of the time).

I was in a fortunate position to be able to hold out for a while and ended up finding a fully job with my preferred language after around eight months, but I had already come up with a timeline for when I should start relaxing certain constraints if it went on longer. Programming language was literally the first constraint that I was going to drop if it lasted a few more months because prioritizing my wife's health is non-negotiable, and I'd rather work in a language I don't like as much on something that I don't feel is actively making the world a worse place than work in my favorite language on adtech or at some cryptocurrency startup. It's not clear to me why it would be a problem for me to care about using my non-favorite programming language well if I happened to be employed to write it.


Yeah I don't take Java jobs. There's nothing wrong with Java per se, but it usually has implications.

I don't disagree, but that sounds more like a response to the person asking "what's the argument for picking Java?" than one to the someone who finds "Have you tried not returning null or constructing incomplete objects?" and "Why don't you have any coding standards?" to be poor takes.

If someone's asking "why Java" or is saying nulls make it a hard no, then you'd assume that they have a choice in the first place, which generally means they also have some ability to set coding standards at the same time that they're choosing a language.

Scala technically allows you to use nulls or throw exceptions pretty much wherever (necessary for Java compatibility), but it's not an issue because people simply don't outside of super niche situations (generally some low-level thing, or a shim). Similar to `unsafe` in Rust. Or casts in all sorts of languages.


Just for reference, Scala actually has proper null safety. You can turn it on with a compiler flag and then use union types to denote nullable types, like String | Null

> If someone's asking "why Java" or is saying nulls make it a hard no, then you'd assume that they have a choice in the first place, which generally means they also have some ability to set coding standards at the same time that they're choosing a language.

I don't understand that logic. I sometimes ask people to explain why they think a certain policy should be implemented by the government after they state their support for it, but I don't have the ability to set government policy. I have trouble imagining you genuinely assume that any time someone asks you why something should be the way you say that you think they have the ability to change it if you convince them.


Of course you assume that; if you're talking about what a policy should be, then you work in a hypothetical world where the policy can be chosen. You don't say "but what about some other minor detail! That would require an additional policy choice, and we can't change related policies."

Like if I think my business should open an hour earlier, and you say "but the employees won't be there yet so who will open the doors!" obviously the solution is to also change the work schedule. When you have closely related policies, generally the same person/people are empowered to make both changes.


Yes, a hypothetical world, not necessarily the real one. The first comment you responded to from me was me responding to someone who said "Why don't you have any coding standards?". It sounds like the answer to it that you're proposing is "I do, but they're just all hypothetical", which I guess isn't technically wrong but it's entirely irrelevant to the real-world circumstances that you still haven't addressed in any way from what I can tell.

Precise wording aside, the essential content of the back-and-forth here is:

> When should one use Java on projects?

> One shouldn't consider Java because it lets you use null.

> That's easily solvable by just not using null.

> But you can't just do that. People will use it.

> You can just do that. Tell them not to.

Like I'm not seeing the issue. This is like saying you can't use Rust because people will use `unsafe` because it lets them do C programmer things, and then claiming it is simply impossible to tell them not to do that (and set tool policies to flag anyone attempting to).

In the real world, if you're in a position to even ask "why use Java for a new project?" then you are presumably also in a position to have "don't use nulls" be a satisfying answer to "what about nulls?" If someone is asked what technology to use for a project in the first place, they are almost certainly also asked about how it will be used. The hypothetical here is not "do you have coding standards" but "are you a decision maker," and when the original question is "when should one decide to do X," you have to accept as a premise that you are placing yourself in the role of a decision maker in the first place.


> Like I'm not seeing the issue. This is like saying you can't use Rust because people will use `unsafe` because it lets them do C programmer things, and then claiming it is simply impossible to tell them not to do that (and set tool policies to flag anyone attempting to).

I'm not seeing how you can seriously claim that the amount of unsafe used in Rust over the past 11 years is anywhere close to the amount of null used in Java for the past three decades. The vast majority of Rust projects don't have any unsafe used directly in them. I have trouble believing that the fraction of Java projects that don't ever touch null is anywhere close to as high.

> In the real world, if you're in a position to even ask "why use Java for a new project?" then you are presumably also in a position to have "don't use nulls" be a satisfying answer to "what about nulls?

You keep framing questions as something people only ever ask if they happen to have the power to make decisions, and that still makes no sense to me.

> The hypothetical here is not "do you have coding standards"

That's almost the exact question I responded to initially! You responded to me responding to the question "Why don't you have any coding standards?". I feel like you're trying to argue against me as if I commented several levels above in the thread than I actually did, and then getting confused by me not accepting that premise.


The question was about greenfield projects, not all projects in existence. In a greenfield project, you can set your own standards, be judicious about what libraries you use, etc.

I'm not framing it as a question one only asks if they happen to have the power to actually decide to use it; obviously a curious student might want to know why large successful companies continue to use the JVM even for new projects. I'm saying that the answer can be given from the perspective of someone who does have that power, and that the question is really "if I can choose a language, why would I choose Java." That doesn't imply that the person asking actually has that power, but it prevents silly answers that are addressed by "don't do that."


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: