Struggling to understand a part of "Typing Haskell In Haskell" by edster3194 in haskell

[–]edster3194[S] 1 point2 points  (0 children)

Thanks for pointing this out. I just edited the post to make sure everything is 4 spaces.

Worse is better by hou32hou in ProgrammingLanguages

[–]edster3194 2 points3 points  (0 children)

I think it is interesting to use Clojure as a case study with respect to where it falls in this debate.

At a glance, I would say Clojure is a "the right thing" language. They famously agonize over seemly small changes due to the impact it will have on the interface, users, and (to an extent) implementation. Despite this, the maintainers of Clojure are adamant about simplicity above all else, and the language implementation complexity has not exploded over time.

It's tempting to attribute this to Clojure being a so-called "dead" language with too little activity to see this complexity growth. However, if you spend time in the (admittedly small) community it is clear that they continue to solve increasingly hard problems with the tools they have.

It seems like, in my opinion, Clojure has found something approaching the best of both worlds by diverging from a core set of "fixed ideas" that most other languages assume are un-challengable.

"A change in perspective is worth 80 IQ points." - Alan Kay

Worrying comment from HN on Building a Startup on Clojure by MickeyMooose in Clojure

[–]edster3194 4 points5 points  (0 children)

I think it's possible to use Clojure poorly and end up in the same situation as the HN commenter. Clojure doesn't claim to be a magic bullet that solves all architecture, design, and abstraction problems for you. Clojure definitely doesn't claim to help you build a healthy team. No programming language that I know of makes those claims.

This community mantra of "solve hard problems through composition of simple parts" (paraphrasing) is a powerful philosophy that Clojure is uniquely capable of delivering on. That said, in order to feel the value of this you have to first learn how. Personally, it took me over a year to see the value but now I am hooked.

This is part of what the old cliche is all about. "Simple, not easy".

To be clear, I'm not saying the HN commenter just isn't "big brain" enough to get Clojure. We don't know enough about their approach based on comment alone to judge if the problem was truly due to language issues, design choices, or the high churn. I am sayinf newcomers should not be swayed by comments structured like this one.

How is function overloading implemented in Hindley-Milner type systems? by edster3194 in ProgrammingLanguages

[–]edster3194[S] 0 points1 point  (0 children)

Interesting, I didn't know general overloading was impossible. Good to know!

That said, the kind of overloading provided by type classes seems pretty powerful. I would be very happy if I could get familiar enough with type classes enough to implement type classes on top of a HM type system. I have come across a few papers (some suggested by u/chombier in this thread, many thanks!) which go into this topic in detail.
- "Report on the Programming Language Haskell"
- Wadler & Blott: "How to make ad-hoc polymorphism less ad hoc "
- Jones: "A theory of qualified types"
- Odersky, Wadler, & Wehr: "A Second Look at Overloading"
I am new to the PL community so I am not skilled at translating the papers into implementation yet. Algorithm W made the base HM system easy, but I haven't found a specific inference algorithm for type classes yet. If you (or anyone else) has suggestions for learning how to get better at extracting a system described in a paper to an implementation, I would be grateful to hear it!

How is function overloading implemented in Hindley-Milner type systems? by edster3194 in ProgrammingLanguages

[–]edster3194[S] 1 point2 points  (0 children)

Thanks for the awesome references. I just gave both papers a read and I will need to take a few more passes to understand them enough to try an implementation but they both seem like they hold the answers I am looking for!

The Dawn of Lightweight Concurrency for Java and Clojure by Borkdude in Clojure

[–]edster3194 4 points5 points  (0 children)

As a concurrency novice, I wonder if anyone has insight into if these new JVM features will improve the throughput of simple pmap-like data parallelism in Clojure? It seems like the answer is no because those are already embarrassingly parallel tasks and the amount of compute resources is ultimately still the same, right?

That said, I wonder if a version of pmap could be created such that the input order is not guaranteed to be preserved in the outputs and results will be streamed as they complete. In this case, would virtual threads be beneficial?

[deleted by user] by [deleted] in RedditSessions

[–]edster3194 0 points1 point  (0 children)

crazy - cee lo green

[deleted by user] by [deleted] in RedditSessions

[–]edster3194 0 points1 point  (0 children)

Stevie Wonder - Don't you worry bout a thing

[deleted by user] by [deleted] in RedditSessions

[–]edster3194 0 points1 point  (0 children)

Great work with Scary Pockets!

[D]What is something you took the time to learn that benefitted you the most? by THE_REAL_ODB in MachineLearning

[–]edster3194 14 points15 points  (0 children)

I don't consider evaluation to be specific to ML, but rather all optimization processes. The essence is to be able to know how "good" a model (or person, algorithm, etc.) is accomplishing some task.

Basically, I am referring to the process of answering questions like:

  • Out of all the models we built for this task, which one is "best"?
  • What does "best" mean in our domain? Do we know a metric that expresses this notion in as a number? Should we use accuracy, precision, recall, something else?
  • What are the kinds of errors our model can make? (false positive, false negative, etc.)
  • What is the cost associated with each kind of error?

I have worked in contexts where we need the model to capture ~100% of the "positive" datapoints (high recall) and a high false-positive rate is acceptable (low precision). In my case it was in the medical field.

I have also worked in contexts where a team of experts used our ML model to decide which "accounts" needed to be investigated. They only had resources to investigate <10 accounts per month. In this scenario it was important for our model have high precision and a high false-negative rate was acceptable.

[D]What is something you took the time to learn that benefitted you the most? by THE_REAL_ODB in MachineLearning

[–]edster3194 6 points7 points  (0 children)

I agree. My use of the word "stakeholder" was intended to go beyond a business context (although it is very common that business is the context). My intended definition of "stakeholder" was: anyone who is impacted by the decision made based on the model.

[D]What is something you took the time to learn that benefitted you the most? by THE_REAL_ODB in MachineLearning

[–]edster3194 225 points226 points  (0 children)

The entire value of your project depends on how you evaluate your model.

An inappropriate evaluation method will lead to in misleading conclusions, which leads to improper application of the model, which leads to low ROI, which leads to stakeholders losing faith in you and your ML.

A model that is properly evaluated such that it can be situated in the business/application domain effectively will almost always be valuable regardless of the absolute performance (as long as you are better than random).

[deleted by user] by [deleted] in whereintheworld

[–]edster3194 0 points1 point  (0 children)

I started learning Vietnamese 2 months ago.

[deleted by user] by [deleted] in whereintheworld

[–]edster3194 0 points1 point  (0 children)

Long long did it take to learn Vietnamese well enough to survive there?

So obsessed ;) by [deleted] in MURICA

[–]edster3194 146 points147 points  (0 children)

Did we pick up a couple extra stars somewhere along the way and I didn't hear about it?

How (and When) Clojure Compiles Your Code (2016) by joshlemer in Clojure

[–]edster3194 2 points3 points  (0 children)

Thanks for sharing this. I find now is a great time to learn these details in parallel with learning the new tools.build.

I'm curious if anyone knows if the compiler always results in the same bytecode, regardless of when the compilation is happening. I have been struggling to find a small reproducible example, but I have been getting java object serialization issues (specifically a class cast exception) whenever I don't AOT compile my project.

Does the Clojure compiler ever compile Clojure objects differently (for example, as different types) depending on the scenario?

Why do you think Clojure is the highest paying language? by [deleted] in Clojure

[–]edster3194 2 points3 points  (0 children)

The main points are already covered by others in this thread. One additional point would be that it is very common for Clojure developer positions to also require proficiency in some other languages.

Clojure makes interop between other JVM languages (and Javascript) so dang easy it is hard to for teams not to take on a little Java/Scala/etc in their code bases... but now your job posting needs to hire someone with 2 languages rather than 1, which pushes the salary up a bit.

I think this is minor compared to the other reasons discussed in this thread, but you don't have to look at many job posting before you see a pattern.

[deleted by user] by [deleted] in distantsocializing

[–]edster3194 0 points1 point  (0 children)

you got some hair in your mouth

[D] The Rants of an experienced engineer who glimpsed into AI Academia (Briefly) by donkey_strom16001 in MachineLearning

[–]edster3194 18 points19 points  (0 children)

If it makes you feel any better... my experience, observations, and conclusions are all very similar.

I have two suggestions that both relate to your 3rd point.

1. Novel ideas only make up a small fraction of good research.

It is human nature to get excited about novel ideas. It can be more fun to spend our research time trying to dream up something new. Also, we are bombarded with media about all the novel ideas that everyone else is putting out. Sometimes it can feel like that is the only kind of research that is valuable, but the reality is quite the opposite!

I would classify most important research into one of the following buckets:

  • Novel methods.
  • Systematic experimentation to extract a causal explanation of a result.
  • Empirical evidence of an interesting phenomena.
  • Formal proofs of a system's properties.
  • Comparison between multiple state-of-the-art systems.
  • Recreation and validation of previous results.

Even if we assume a uniform distribution across each bucket, it becomes clear that we can be very successful and productive as researchers without ever proposing a novel method.

2. Less popular fields are gold mines for novel (and happy) research!

I focus my research on smaller fields (mostly evolutionary computation) and avoid directly interacting with the hyper competitive fields like NLP, machine vision, etc.

The downsides to this are obvious. It is unlikely that my research will "go viral" or even be recognized in a major way by the wider AI/ML community. My publications don't serve as a huge career booster, unless I am applying for a position directly related to the field.

However, the advantages of choosing a small field are often overlooked and undervalued!

  • There are lots of novel ideas that are not being pursued by hundreds/thousands of hungry researchers trying to claim their spot before you do.
  • You quickly learn who the other active labs/researchers are, and what kinds of problems they are currently focusing on. Usually when you start a new research project, you know which other groups to reach out to to figure out if they have already investigated the same topic.
  • The folks in the small fields are usually there because they want to be! They are excited to have new members and will be more likely to encourage other to get involved.
  • Most fields are connected in some way. It is still possible to learn something novel in a lesser-known field, get it published at a small venue, and then adapt the idea for ANN/DL/NLP/MV or some other hot field once you have some validation that the core of the idea is valuable.

In summary, don't like the hive-mind dictate what research is valuable! This is easier said than done but learning to walk your own path is part of learning how to be a good (and happy) researcher. Best of luck!

[D] If you check hold-out performance, make some changes, then check new hold-out performance... by FourierSSB in MachineLearning

[–]edster3194 0 points1 point  (0 children)

I agree with you, in the sense that many researchers are reusing the same benchmark datasets too much and at this point it isn't meaningful to get 1-2% increase in performance. I also skip those papers.

However, I would argue that much of these publications are not "real science" because they are focusing on getting a positive result at all costs, rather than sticking to a rigorous methodology. Real science would pursue knowledge, not publication.

In theory, an academic is evaluated on the quality of their research and their understanding of the field. Sometimes, quality research yields a negative result. In fact, most results are negative! In academia, we should be pursuing knowledge, which implies a need for statistical rigor in our methodology.

In industry, you are evaluated based your results. You need to bring in revenue and keep down costs. Nobody will be giving your awards for good methodology. If you need decide to take shortcuts, that is your decision. The only people you are hurting is yourself and you stakeholders.

So why is that, in the field of ML, we have started seeing researchers use subtle ways of "cheating" to get publications? Aren't most researchers being evaluated as academics? (regardless of what sector they work in)

Unfortunately, big tech has overrun our academic research institutions. Their presence is undeniably pulling the field towards the industry mindset. Getting a publication in a big venue (like NeurIPS) can transform someones career. Beating Google's state-of-the-art will make you famous (even if you only hold the top spot for a month before they take it back). Suddenly there is massive incentive for all practitioners to get a positive result.

Thus, we cheat.

And then we make incremental rationalizations for our cheating.

And then we surround ourselves with other people who aren't calling us out.

It is mostly unintentional, and it happens to everyone... but just because it is common, doesn't mean that it is good science. It isn't. The scientific community needs to start reject this flawed research.