Hacker News new | past | comments | ask | show | jobs | submit | ludston's comments login

That's a cool project, but learning music via music theory is a bit like trying to learn English via grammar theory. It's backwards, and out of the hundreds of musicians I've met, I've never met one that walked that path.

Strong recommendation: Hire a teacher. Even with experience playing four instruments, and when I decided to learn another, I still hired a teacher.


One of my goals for this years was to get a jazz teacher, specifically for guitar.

A layoff killed that goal for the foreseeable future.

Theory has helped me practice like I think you're supposed to. More structured, more analysis. It also tickles the same part of the brain the certain comp sci topics do.

I think it came from wanting to learn how to improv, and then wanting to make my own songs. So I make a few tracks a week, of different genres, depending on what I'm interested in at the time. I've seen improvement, and I take notes about what I learned/what works.


To be fair, there is a massive percentage of non-productive jobs that are mostly security guards for goods and locations, and many inefficient roles related to ticket clipping, inefficient distribution and marketing that all stimulate the economy without being productive.


It's like how when you buy something now you need to take a photo and email it to your local police station to prove you weren't buying drugs or something.


I know, imagine what would have happened to society if people unwinded after a long day of work in their own home with weed, or if they drank coffee every morning. /s


I know it is cynical, but this is such a puff piece that to me it feels like an advertisement.


A lot of people like to tell themselves that breaking into other people's computers is about curiosity or activism or some other such virtue.

I don't see it. What I see is post-hoc rationalisation to justify lust for a feeling of power and control over others.

Practically any virtue you ascribe to "hackers" you can give to those kids that break into people's cars and take them on joyrides.


To me its more about the intent and actions. If you figured out how to hack something, and possibly leave a note for the admin to fix their systems, thats one thing.

If you figure out how to hack something, and your first thought is to trash / destroy the system, thats the crime.

So personally: > "where Stanley, at 15, bragged about fucking up servers" is more damning to me then the actual hacking part.


I disagree. I definitely have the curiosity to break into things all the time. There's a difference between unlocking a car, leaving a note saying "I unlocked your car" and locking it again, and unlocking it to crash it.


That's not as innocuous as you put it. From Godfather's horse head to the Bibilical story of Saul's robe, that can have a very different meaning and feeling.


I think both of those things do give people that rush of power and control over others. Certainly one is harmless and the other... not so much.


It doesn't give me a rush of power or control, I just like solving puzzles, and locks are puzzles.


I don't know how to explain that the feeling of solving a puzzle is a "rush of power". If it weren't, you'd be equally happy fiddling with a pile of puzzle pieces and making no attempt to solve it as you were to searching for a solution.

There isn't anything inherently unethical about enjoying power, but neither is it in any way virtuous.


This comment redefines the "power" as it's defined above, in particular by forgetting that it's "over others":

> I think both of those things do give people that rush of power and control over others.

That was presumably unintentional; I just wanted to point out that it's a different philosophical topic.

I don't strictly disagree with the idea but it's not the same as saying that someone solving a sudoku is doing it for the sake of having power over the puzzle's creator and/or the curator of the book/app that included the puzzle. It seems more likely that they're doing it instead because when they would solve puzzles in the past they would get a hit of dopamine, which taught them that solving puzzles is rewarding. I think this seems to fall under "rush of power" per this meaning but it's not "rush of power and control over others" per the initial one.


I still disagree. You're making a false dichotomy that there can be either "rush of power" or "nothing". Instead, I feel a sense of achievement at a job well done. To say that that's "power" requires stretching some definitions.


You can take the position of "achievement isn't a feeling of power" if you'd really like to, in which case I simply say find and replace all prior uses of "feelings of power" with "feelings of achievement" and the argument still stands. I'm happy to use whatever definitions you want. Taking joy from your success in doing things (whether you refer to it as achievement or power) is simply not an valid ethical justification when it is at the expense of violating other peoples right to control of their possessions.


I don't know that the argument stands with "feelings of achievement". I agree that you can't justify a moral infringement by taking pleasure in it, but upthread you were trying to distance the motivation from virtuous ones like curiousity and activism. Being driven by achievement is absolutely a virtue. I'd argue it's the same virtue that drives curiousity, and you've essentially just said exactly that ("the feeling of solving a puzzle is a 'rush of power'" s/power/achievement).


solving puzzle pieces is trivial. you just keep looking for the right parts till it fits. it is designed to be solved. unlike a car door.


Security systems also give you power and control over others. Whether or not it's harmless to break them is a case-by-case question.


> I don't see it. What I see is post-hoc rationalisation to justify lust for a feeling of power and control over others.

There's always two sides to a medal. I think that the executive branches of government - across the Western world - suffer from lethargy caused because barely anyone in public service is willing to question, much less stretch or even bend, the rules in power.

A government obviously cannot be purely made out of rulebreakers and, frankly, toddlers and imbeciles. We see this in the current US administration. But it cannot be made out of "we always did it this way" people either, because that's how you end up with systems and processes that are so hopelessly fossilized that no one even understands why these systems are the way they are.


I'm talking about the virtues that you've just tried to paint on people that practice breaking into other peoples computers for fun.

It seems like what you are looking for is a discussion about whether or not it it is ethical for bureaucrats and elected officials ought to circumvent or ignore their countries democratic processes and laws.

I'm sure there are some ethical justifications for doing this in some hypothetical situations, but really I'm not sure it's as useful to be discussing hypotheticals rather than specifics in this space.


> It seems like what you are looking for is a discussion about whether or not it it is ethical for bureaucrats and elected officials ought to circumvent or ignore their countries democratic processes and laws.

What was the saying, three felonies a day? Society doesn't work out when people behave like role models all day long, the economy would grind to a standstill. That's why you get stuff like "shadow IT" and whatnot. Processes tend to grow ("scope creep") and no one is interested in cutting the crap.


We need modules so that my search results aren't cluttered with contamination from code that is optimised to be found rather than designed to solve my specific problem.

We need then so that we can find all functions that are core to a given purpose, and have been written with consideration of their performance and a unified purpose rather than also finding a grab bag of everybody's crappy utilities that weren't designed to scale for my use case.

We need them so that people don't have to have 80 character long function names prefixed with Hungarian notation for every distinct ___domain that shares the same words with different meanings.


I agree, but also agree with the author's statement "It's very difficult to decide which module to put an individual function in".

Quite often coders optimise for searchability, so like there will be a constants file, a dataclasses file, a "reader"s file, a "writer"s file etc etc. This is great if you are trying to hunt down a single module or line of code quickly. But it can become absolute misery to actually read the 'flow' of the codebase, because every file has a million dependencies, and the logic jumps in and out of each file for a few lines at a time. I'm a big fan of the "proximity principle" [1] for this reason - don't divide code to optimise 'searchability', put things together that actually depend on each other, as they will also need to be read / modified together.

[1] https://kula.blog/posts/proximity_principle/


> It's very difficult to decide which module to put an individual function in

It's difficult because it is a core part of software engineering; part of the fundamental value that software developers are being paid for. Just like a major part of a journalist's job is to first understand a story and then lay it out clearly in text for their readers, a major part of a software developer's job is to first understand their ___domain and then organize it clearly in code for other software developers (including themselves). So the act of deciding which modules different functions go in is the act of software development. Therefore, these people:

> Quite often coders optimise for searchability, so like there will be a constants file, a dataclasses file, a "reader"s file, a "writer"s file etc etc.

Those people are shirking their duty. I disdain those people. Some of us software developers actually take our jobs seriously.


One thing I experimented with was writing a tag-based filesystem for that sort of thing. Imagine, e.g., using an entity component system and being able to choose a view that does a refactor across all entities or one that hones in on some cohesive slice of functionality.

In practice, it wound up not quite being worth it (the concept requires the same file to "exist" in multiple locations for that idea to work with all your other tools in a way that actually exploits tags, but then when you reference a given file (e.g., to import it) that needs to be some sort of canonical name in the TFS so that on `cd`-esque operations you can reference the "right" one -- doable, but not agnostic of the file format, which is the point where I saw this causing more problems than it was solving).

I still think there's something there though, especially if the editing environment, programming language, and/or representation of the programming language could be brought on board (e.g., for any concrete language with a good LSP, you can re-write important statements dynamically).


Oops: important -> import


Indeed! The traditional name for the proximity principle is called "cohesion"[1].

[1] https://en.wikipedia.org/wiki/Cohesion_(computer_science)


Not to pick on Rails, sorting files into "models / views / controllers" seems to be our first instinct. My pantry is organized that way: baking stuff goes here, oils go there, etc.

A directory hierarchy feels more pleasant when it maps to features, instead. Less clutter.

Most programmers do not care about OO design, but "connascence" has some persuasive arguments.

https://randycoulman.com/blog/2013/08/27/connascence/

https://practicingruby.com/articles/connascence

https://connascence.io/

> Knowing the various kinds of connascence gives us a metric for determining the characteristics and severity of the coupling in our systems. The idea is simple: The more remote the connection between two clusters of code, the weaker the connascence between them should be.

> Good design principles encourages us to move from tight coupling to looser coupling where possible. But connascence allows us to be much more specific about what kinds of problems we’re dealing with, which makes it easier to reason about the types of refactorings that can be used to weaken the connascence between components.


We could get that without a hierarchical categorization of code, though?

Makes me wonder what it would look like if you gave "topics" to code as you wrote it. Where would you put some topics? And how many would you have that are part of several topics?


There is a similar question about message board systems.

Instead of posting a topic in a subforum, what if subforums were turned into tags and you just post your topic globally with those tags. Now you can have a unified UI that shows all topics, and people can filter by tag.

I experimented with this with a /topics page that implemented such a UI. What I found was that it becomes one big soup that lacks the visceral structure that I quickly found to be valuable once it was missing.

There is some value to "Okay, I clicked into the WebDesign subforum and I know the norms here and the people who regularly post here. If I post a topic, I know who is likely to reply. I've learned the kind of topics that people like to discuss here which is a little different than this other microclimate in the RubyOnRails subforum. I know the topics that already exist in this subforum and I have a feel for it because it's separate from the top-level firehose of discussion."

I think something similar happens with modules and grouping like-things into the same file. Microclimates and micronorms emerge that are often useful for wrapping your brain around a subsystem, contributing to it, and extending it. Even if the norms and character change between files and modules, it's useful that there are norms and character when it comes to understanding what the local objective is and how it's trying to solve it.

Like a subforum, you also get to break down the project management side of things into manageable chunks without everything always existing at a top organizational level.


I agree, but go farther:

Most things have multiple kinds of interesting properties. And in general, the more complex the thing, the more interesting properties it has. Ofc "interesting" is relative to the user/observer.

The problem with hierarchical taxonomies, and with taxonomies in general, is that they try to categorize things by a single property. Not only that, the selection of the property to classify against, is relevant to the person who made the selection, but it might not be relevant, or at least the most relevant, property for others who need to categorize the same set of things.

Sometimes people discover "new" properties of things, such as when a new tool or technique for examining the things, comes into existence. And new reasons for classifying come into existence all the time. So a hierarchical taxonomy begins to become less relevant, as soon as it is invented.

Sometimes one wants to invent a new thing and needs to integrate it into an existing taxonomy. But they have a new value for the property that the taxonomy uses for classification. Think back to SNMP and MIBs and OIDs. Now the original classifier is a gatekeeper and you're at their mercy to make space for your thing in the taxonomy.

In my experience, the best way to classify things, ESPECIALLY man-made things, is to allow them to be freely tagged with zero or more tags (or if you're a stickler, one or more tags). And don't exert control over the tags, or exert as little control as you can get away with. This allows multiple organic taxonomies to be applied to the same set of things, and adapts well to supporting new use cases or not-previously-considered use cases.


Yeah, I suspect this is one where the general hierarchy does lift quite heavily. Such that it isn't that I would want to lose it, entirely. More that I think it is best seen as a view of the system. Not a defining fact of it.

Is a lot like genres for music and such. In broad strokes, they work really well. If taken as a requirement, though, they start to be too restrictive.


Tags are great only when hierarchical structures becomes cumbersome. And even then, there's some limit to how much tags you can have before they become useless.


I feel like you are arguing more for namespaces than modules.

Having a hierarchical naming system that spans everything makes it largely irrelevant how the functions themselves are physically organized. This also provides a pattern for disambiguating similar products by way of prefixing the real world FQDNs of each enterprise.


As another poster already said, providing namespaces is just one of the functions of modules, the other being encapsulation, i.e. the interface of a module typically exports only a small subset of the internal symbols, the rest being protected from external accesses.

While a function may have local variables that are protected from external accesses, a module can export not only multiple functions, but any other kinds of symbols, e.g. data types or templates, while also being able to keep private any kind of symbol.

In languages like C, which have separate compilation, but without modules, you can partition code in files, then choose for each symbol whether to be public or not, but with modules you can handle groups of related symbols simultaneously, in a simpler way, which also documents the structure of the program.

Moreover, with a well-implemented module system, compilation can be much faster than when using inefficient tricks for specifying the interfaces, like header file textual inclusion.


It is irrelevant until you have 4gb of binaries loaded from 50 repositories and then you are trying to find the definition of some cursed function that isn't defined in the same spot as everything it is related to, and now you have to download/search through all 50 repositories because any one of them could have it. (True story)


Modules don’t imply namespaces. You can run into the same problem with modules. For example, C libraries don’t implicitly have namespaces. And the problem can be easily solved by the repository maintaining a function index, without having to change anything about the modules.


The article references the true granularity issue (actually the function names need a version number as well, not sure in my scan of the article if it was mentioned).

Modules being collections of types and functions obviously increases coarseness. I'm not a fan of most import mechanisms because it leaves versioning and namespace versioning (if it has namespaces at all...) out, to be picked up poorly by build systems and dependency graph resolvers and that crap.


How do you imagine importing modules by version in the code? Something like "import requests version 2.0.3"? This sounds awful when you accidentally import the same module in two different versions and chaos ensures.


Import latest where signed by a trusted authority.


Don't forget about encapsulation, there's most likely a lot of functions that aren't relevant outside the module.


just deduce the ___domain from text similarity :o)


You can actually get completely stupid with this in Common Lisp using something called a "Reader Macro" which lets you temporarily take complete control over the interpreter.

For example, I have this joke project that defines a DSL for fizzbuzz:

https://github.com/DanielKeogh/fizzbuzz


> In February, the Bank of England reported an ongoing productivity slump so mysterious that its own economists “cannot account fully” for it.

And then goes on to immediately point out what I would expect to be the most obvious cause.

> Real wages have barely grown for 16 years.

Why would the general populous care to be more productive when they aren't going to see the profits?


I'm looking at this feeling anxiety about whether or not the implementation of `map.get` is threadsafe with memories of deadlocks in unsafe hashset implementations whilst accessing values during resizing.

When what they really wanted here for bug free multithreading is some kind of promise or async await abstraction.


This is Java, the use of wait() and notifyAll() means the whole thing is running in a synchronized method/statement.


But on the other hand, in all database systems the schema is used to determine how the files are laid out. Although I suppose the same thing could be argued for any data that is stored in a file, excepting that a schema is metadata that determines the organisation of data so it's a bit of a special case.


In a Microsoft Word document, the section headings also tell Word how to lay out the Word document file.


Do you mean that section headings aren't a file layout? That's their entire purpose.

Edit: If you're talking about the byte representation only, I don't think section headings indicate the placement of the body's bytes.


Does your interpretation not mean that(coupled with the court ruling that file formats can't be foia'd) any document with sections cannot be requested via FOIA?


If this format is reused across many files, they might want to give the contents of those docs in a different format from the original.


You have found an argument that proves too much.


Yea coupled with the courts arguments the interpretation of sections in a document as a "file format" means no files with sections can be released via FOIA requests


Arguably, all requests for files could be returned with all of the letters in the document but scrambled in a random order soas to obfuscate the file layout.


Consider applying for YC's Summer 2025 batch! Applications are open till May 13

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

Search: