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

Dynamic languages can execute code without type annotations, so you _can_ just dismiss types as redundant metadata. But I don’t think that’s wise. I find types really useful as a human reader of the code.

Whether you write document them or not, types still exist, and you have to think about them.

Dynamic languages make it really hard to answer “what is this thing, and what can I do with it?”. You have to resort through tracing through the callers, to check the union of all possible types that make it to that point. You can’t just check the tests, because there’s no guarantee they accurately reflect all callers. A simple type annotation just gives you the answer directly, no need to play mental interpreter.


I don't disagree, dynamic languages require better writing skills, so for example, in case of bilingual teams, metadata helps bridge the language barrier. However, if your team is good at expressing how/what/why[1] in your dynamic language, you will not have much issue answering what things are. Again, there are costs with either choice.

[1]: https://max.engineer/maintainable-code


This is the eternal selection pressure that slows new C++ adoption.

The kinds of places still waiting C++ aren’t usually the ones that put much emphasis on using a compiler from the past decade.

Java 8 and C++98 will be here forever lol


Stacked diffs are a core part of my workflow, letting me “work ahead” without being blocked waiting for reviews.

Setting them up in git is not to bad. Adding a change to the bottom of the stack, and restacking everything on top… that’s hell in git.


Check out the rebase.updateRefs option: https://dev.to/onepoint/git-update-refs-in-a-nutshell-574c


git rebase -i lets you reorder commits easily, as long as they don’t have conflicts. If they do, you’re in for a rough time. I struggle to see how a vcs could help with that, even if I’d be happy to be proven wrong.

One cool tip to help with conflicts is the revert trick. If you have a conflict that you need resolved earlier in your commit chain, you can commit a cleanup that hides the conflict, revert it instantly and reorder the commits with interactive rebase to insert the revert first. It’s a bit hard to explain without an example, once you’ve tried it you will understand.


> as long as they don’t have conflicts. If they do, you’re in for a rough time. I struggle to see how a vcs could help with that, even if I’d be happy to be proven wrong.

A vcs can allow you to commit conflicts and then commit their resolutions whenever necessary. This has been pioneered by darcs (IIRC) and jj also allows that.


`git rebase -i` lets you reorder one branch of commits easily

in a stacked PR workflow, after the bottom PR merges, you now want to rebase the whole stack atop the main branch. if that's 3 PRs, that's 3 branches, 3 rebases

one thing `git rebase` doesn't let you do but `jj rebase -s source -d dest` does is move a commit from one branch to another (`git switch dest`, `git cherry-pick source`, `git switch -C source source^`, `git switch dest`)


Try git-spice!


Ah yes, [a Dutch toilet](https://noplacelikeanywhere.com/destinations/dutch-toilets-a...)! A most regrettable invention.


I would be more than happy to see gift cards disappear.

Limited strings-attached IOU that’s worse in every way than the cash paid for them.


The unrefactorable ball of mud problem is real, which is why both Stripe and Shopify have highly statically typed code bases (via Sorbet).

Btw Stripe uses Ruby, but not Rails.


I'd say sorbet largely adds to the mud, but to each their own.


Some Stripe services are Rails.

Having types helps, but it's not a necessity. When I was at Chime we faired very well with just rails and no types.


How many declarations did it have in C++ in total? Technically those were all unsafe, just implicitly so.


Exactly, you write them with AI


IDEs have been auto completing braces, inserting imports and generating framework boilerplate for decades.

We don’t need AI for this and it’s 10x the compute to do it slower with AI.

LLMs are useful but they aren’t a silver bullet. We don’t need to replace everything with it just because.


Yeah, but the management achievement is to call 'autocomplete' AI.

AI doesn't mean LLM after all. AI means 'a computer thing'.


I’ve been calling if-statements AI since before I graduated college


Such is the issue with bad defaults. Opting into the sensible thing makes most of your code ugly, instead of just the exceptions.


Engagggge. Consume the slop. Shareholders demand it!


Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

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

Search: