HNHacker News
TopNewBestAskShowJobs

valand

921 karma · joined September 12, 2019

submissionscomments
valand··on Why has stoicism gained popularity in modern times?
What's more curious is why is it becoming popular nowadays. The internet, of course, factors into it. But ideas don't stick only through dissemination. The adopters of the idea need to be able to relate to the idea to some degree.
valand··on Why is Java so weird?
One factor of why Java is so crowded is because the capital city, Jakarta, is in Java. Back when I was a kid (I lived in Java), urbanization is quite popular thing. People from all country go to Jakarta and other major cities in hope that they can make money or to study. At the same time these cities grow to its maximum potential. More people cause growth, and growth invites people. It caused a positive feedback loop.

On volcano, I could talk about one particular volcano here, mount merapi. It regularly coughed some lava, not too big to cause countrywide panic, enough to fertilize the land around.

valand··on Remote work is the best thing to happen to families in decades
I do creative work. Doing house chores in between work often put my mind into an idyllic state and it gives me flowing ideas, akin to when we procrastinate.
valand··on Ask HN: Why are so many PHP projects moving to Node?
For me, the reasons are:

- PHP's capability is limited in a sense that its main use case is akin to a template engine rather than a full fletched executable. This puts a lot of limit in PHP

- TS steps up JS' game. Like what other have said, TS brings the hassle of maintaining complex codebase down quite a lot.

- NodeJS is a stepping stone for many frontend developers to learn backend because of the same language used.

- JS' syntax and capabilities, while having inherent unavoidable footguns, allow expressive code (I might be partial on this, the last time I used php is a long time ago)

Edit: formatting

valand··on Ask HN: Strategies for working with engineers that are too smart?
No :v

I might have picked the wrong word "measurable". It's better to stay away from ultra-narrow measurement. "When a measure becomes a target, it ceases to be a good measure" Instead, put the phenomenon in their head. Make it their responsibility. Point out the impact of readability to the team velocity.

Or maybe, examine if the introduced complexity is actually incidental and not essential. IF it is essential, it makes more sense to upskill the rest of the team. Hold sharing session to hear everyone's thought. Hear what the smart guy thought about the code. Sometimes, what someone need to unlock a heap of more horse power forever is just a little nudge that makes them click. Create team conventions for making things easier for everyone, e.g. indirection through naming in which you need to pay a bit in performance.

valand··on Ask HN: Strategies for working with engineers that are too smart?
> But the overall system becomes a little more brittle, and a little harder to reason about

> minimize the amount of brainpower I needed to understand my code

> weighing it against the larger system.

If you haven't try converting these items into something more measurable, and put these problems in front of the smart engineer and let these be their problem?

Sort of delegating these stuffs as their problem too instead of taking it all your own.

valand··on Tech companies are irrational pop cultures
Sometimes people disregard history in a very obvious way.

One time there is a person who wants a system rewritten, because of some perceived complexity. The original builders who built the system from the ground up is still actively maintaining it, but there is no attempt to understand whether the perceived complexity is incidental or essential, which in fact most of them are the latter. Some people just want things to fit their world.

But, on the bright side, there are people who just don't know history, but they would be happy to learn. There's a hopeful number of those people!

valand··on Kids and music lessons: why do many promising players quit early?
I was enrolled to a piano course before I developed interest in music. And then classical guitar. While I knew the theories and excels in mandatory music classes at school, music didn't click at least until a decade later in which I realize my genre isn't popular. I've written some music to date, but it remains a secondary thing compared to other stuffs I'm more passionate about.

In contrast, my little brother was enrolled to drum after he developed interest, in jazz. He has the friends who are passionate with the same kind of music. He built several bands. Not only the music itself, he developed love for analogs, obsessed with building instruments and speakers.

I guess the timing of interest development relative to the push to the direction, and having the right people to reinforce your passion is imperative to the optimal development of "click" to music.

valand··on Code Smell of the Day: Type Keys (2021)
When I shared this to my colleague, I call it "dynamicizing statically-known info". It is in the same family as putting hardcoded values in a list and calling a .map to it. It almost always end as a premature abstraction.
valand··on Code Smell of the Day: Type Keys (2021)
It comes down to how deep the type system of a language support this kind of operation. It'll work well with TS, Rust, but it doesn't add much to golang, C++.

But well, usually dynamicizing statically-known types yields premature abstraction

valand··on How to write unmantainable code (2015)
Be even more DRY by having function that does quite a bit of everything, accepts different arguments, and returns different type. You only need to supply different strings to the first parameter
valand··on Ask HN: What is your favorite front end state management solution?
It can be combinations of both. Many deeply nested small ones is convenient for objects/actors/agents/entities with different lifetimes.
valand··on Ask HN: What is your favorite front end state management solution?
Similar to some strong sentiments in this thread, we don't use common state managements. Mainly because they doesn't suit our need and requires us to learn more unnecessary patterns.

My company is building app with quite a set of complex features and structure (e.g. stateful integration with game consoles, background custom upload protocol, varying lifetime of modules, etc).

- The state management we always come back to is closure-based objects.

- Styled as agents, rather than passive storage (e.g. redux store-like construct). Thus providing separation of concern both in type definitions and code execution scheduling (can't find better words for these :'))

- In house event utility is used by the agents to communicate outwards.

- Combine with useEffect, useState, useMemo, and our in-house event utility to "escape" React's lifecycle by default and selectively subscribe to events, thus avoiding unnecessary-rerenders problems.

- Designed to abstract its domain and expose its internal data via methods.

- Optionally be designed to allow both code reuse and object reuse. Allowing devs to share or to not share states. Common use case for object reuse is agents acting as background-service propagated via React Context. It works really well with React Context.

- Optionally self-managing via buffers and async loop. The buffer is not exposed to its consumer directly, and the async loop works on the buffer.

- Can be useful for dependency injections too.

- Well isolated and optionally injectable so that you can unit-test against it without import mocks.

A caveat, this pattern isn't as usable when written with pure JavaScript. We relies heavily TS on FP patterns supported by fp-ts and io-ts as well as IDE's auto-complete and jsdoc to unload a whole stuff off our mind.

We've sometimes evaluated common state management solution and often found them requiring us to remember more things, but it doesn't yield valuable abstraction. In fact, most state management is abstracting the wrong thing.

valand··on Ask HN: Who wants to be hired? (December 2022)

  Location: Indonesia (with high possibility to move to Stockholm, Sweden next January)
  Remote: Yes
  Willing to relocate: No
  Technologies: Rust, TypeScript, React, NodeJS, Electron, SQL, NoSQL, Docker, Git
  Website: https://valand.dev
  Résumé/CV: https://drive.google.com/file/d/1p0iGur8l5pZUcQud34hiMBcG3_zRoqAZ/view
  Email: kelerchian@gmail.com
5 years experience in game publishing and developer toolings industry.

Contributing as a technical lead to 3 projects that are now running in production.

Have sufficient experience experimenting through unknown territories, building abstraction for the team, and encouraging people to do the same.

Primary interest and expertise = system design and engineering, information architecture, product design, knowledge organization.

valand··on What is spacetime made of?
Reminds me of this quote "A wizard is never late, nor is he early, he arrives precisely when he means to"
valand··on Ask HN: Do you genuinely enjoy your developer job?
I used to enjoy it. We make a platform and toolings for game devs and publishers. Back then when it was small everyone is thoughtful toward everyone else.

Then there's the hypergrowth phase. It's good for the money. But the culture downgrades for both the communication, the engineering, the product. People complain a lot but don't slightly ever make a plan to fix things.

It is tiring to be one of the few who still care.

valand··on Ask HN: How to deal with burnout and its consequences?
It might sound cliche and not based on a professional psychological, but the advice I'm about to give is working at the least. I had been at your position too and it helps.

You are losing and with that state of mind you might be attempted to keep losing, but I don't think you want this to continue, do you?

The first thing is to start winning. Realize that winners keep winning and you are going to be one. Create small goals! Inside and outside work. Move! Do 5 push ups, 10, 15! Doodle simple toons, sing some music! Write a simple game on a simple framework! Sleep on time! Wake up early!

Focus on things you can control. The corporate environment, you cannot control, at least for now. Treat them like a child demanding things to their skewed worldview.

On your firing, you're looking at the worst case. There's a chance to improve, there's also a chance to explore new fields.

If you intend to keep the job, tell to your manager that you are dealing with your problems and your're getting more and more succesful. Fake it till you make it, but stay on the course so you can make good with the job.

valand··on Robot Framework: generic open source automation framework
I feel you in this regard.

I presume low code/no code comes from the simplest notion of programming language, which is a medium between human and machine. And the easier it is to read and write means the "better" it is. Therefore pitching it to a non-technical or even semi-technical people is as simple as teaching people to write code at surface level.

However what people don't understand deeply is that any language is a set of symbols and rules requiring a certain amount of cognitive space and a certain time to absorb it. The more ambiguous the symbols are, the closer the growth of the number of the rules to exponential. This is a fundamental point that happens in real-life but is rarely understood, moreover to programmers, surprisingly.

I believe a proper low-code/no-code should have natural language processing capability and understanding context, not just providing syntactical aliases.

valand··on How to maintain engineering velocity as you scale
Reminds me of the PAGNI posts from a couple of days ago.

2. This depends on how much you want to have control over your core business technicalities. Open source works wonders if we're dealing with complex standards, but not when the subject needs to change often.

4. Can't argue with that. Go for the extreme route of business object modelling the functional way.

5. Or add analytics when ethical!

valand··on How to maintain engineering velocity as you scale
> They don't actually move with speed, but with haste. All possible corners are cut.

This sentence strikes me at my trauma center.

The company I'm in is at the critical phase of startup. 4 years down the road of hypergrowth, the knowledge gap and quality gap is apparent. But then I realize that corners are cut because of a lack of expert in the area whose authority is recognized.

Most experts and brilliant minds have the same idea about the corner cutting. When foundations are designed to be reliable, velocity may jump exponentially, they know. Reliable isolation, version gating, and enablement over service is how they should move, they know. Product design and physical constraint has at least one coupling string, they know.

But these people aren't given the authority, not invited into the room where the decisions are made. In the end, those who bring the immediate money prevail over those who bring mere potential of 10x more money.

As the article said, hire the best engineers. But what the article miss is to hire the best engineers who is invested, can thrive in the politics of startups and use the attained power to bring everyone to success.

valand··on How to maintain engineering velocity as you scale
An alternative way to deal with an unreliable prototype is to make a reliable wrapper around it.

Such as paying time in exchange for reliability (e.g. TCP/IP, retry and backoff), disclaimer for unreliable behavior and law-related issues, version gating for file formats/protocols, redundant storages, and killswitches for going rogue-prone machineries.

valand··on Ask HN: Has anyone managed to find enjoyment in their work after burnout?
I kind of did. Tldr: gather some allies, create a secret council, push changes from the inside.

It is an ongoing thing, but I found friends with the same values and we are trying to change the environment that cause the burnouts. At the same time I have to convince myself that coding and managing is not the actual root cause of the burnout.

Having friends who share the same sentiments helps. But the most important thing was to identify what exactly is the root cause and bash it.

Talking about it to your manager will help alot if your manager cares. In my case, my manager talked and get the head of department hire a veteran that becomes my mentor and take over some of my workload.

Hiring properly actually helps! It lets good people in. Once onboarded, they alleviate your burdens so you could think of strategies that to change the environment so it's better for everybody. This changed my mind about hiring people, since I previously had a bad experience with hiring when my company was in a hypergrowth phase.

In my case the cause was the classic pm-does-not-know-technical-stuffs-yet-plan-everything-ahead-behind-closed-door-and-say-the-final-decision. Fixed deadline, immature product desig that doesnt account for technical limitations. So often either we had to: 1.) Propose a fix now and add more to our plate so we crunch, or 2.) Not propose a fix and risk ourselves getting woken up in the future.

We kind of had to learn a bit of PM-ing so we "understand their language" and have the ability to persuade them into understanding what happens on the other side and making changes that beneficial for the whole team.

Things are changing slowly. Processes changes within the orgs for the better. Some external influences still could reverse the progress. But a celebration for small steps is in order! Party with the people you care and cares about you.

valand··on Ask HN: Is a single source of truth not just a single point of failure?
The difference is that database is an external entity. The physical representation of the database's state is not owned by your app. On the other hand your redux instance is owned by your client side app. It lives and dies with your app.

At least that is how your user expected your app to be.

There are no strict rule over your system design other than "whatever makes sense the most"

valand··on React I love you, but you're bringing me down
Preach!

Data modelling and managing complexity (or I prefer to say knowledge organization) is a prerequisites for every software program ever.

I'd add one more: System design.

Basically dealing with many asynchronous moving parts, managing entities' lifetime, separating and categorizing domain/data, and understanding what-is-important-to-whom. It is a knowledge that's applicable whether you are programming a kernel scheduler or managing people and projects

valand··on ‘Return to the office’ rhetoric needs to end
As someone who watched a company grow from 15 to 400 people in a rushed time, I found that distinguishing good manager from the bad ones is easy. Good manager cares and bad manager don't.

Bad manager asks questions, but then discard the part that is not important to them, even though the team needs the manager to understand it.

Good manager asks questions and understand (at least try to) if this is important for the team, for the project, and for the company. When they ask about deadlines and estimate, they ask why, and they try to deduct, and they remember. Good manager that works in the business selling technical product attempt to understand the technical part of the product instead of blindly "delegating" it and demanding things done.

Good manager tries to improve all aspect in the team. The process efficiency. The communication blockers.

I've seen first hand a manager, having no technical background, getting capable of reading C++ code over time to help the struggling team, and yet does not realize to have been so technical. Kind of having an impostor syndrome. Because they care so much.

I've also seen first hand a manager that only cares about deadlines and presenting good stuff upwards. They don't care about details unless asked by their superior. And once asked for details, they act like messenger owls and echo servers.

valand··on If You Want This Job, We Must Interview You Forever
I found it quite hard myself, but there are a couple of values that I use as heuristic:

- it is either looking to get sustainable as early as possible,

- or, if not, it is a research into the unknown (e.g. quantum computing, different purpose of db, new kind of AI, space exploration, green earth initiatives, even the early phases of blockchain)

Another points would be if the founders have the motivation to give back rather than take as much profit. My current company's founder have a dream to make an incubator for aspiring game makers, for example.

> I have never worked in an early stage startup.

The young company I have been in is when it was 1-year old. Founders are not looking for a mere "engineer", but one that can drive the team "above and beyond" style, because it is important for a small company. But, it is very difficult to see in people. The common mistake of many is to look for their own virtues in other people, which pretty much limits the other set of people not having the same virtue. E.g. Founders that focus on verbal communication and sales filter out people that cannot speak fluently, even though those are excellent product and engineering people.

valand··on If You Want This Job, We Must Interview You Forever
Been doing it for 2 years because I specifically am looking for company looking for founding staff which is hyper-selective.

The worst thing is to be refused without knowing what's wrong so you're kept wondering why. Is it geographical reason? Is it national border reason? Legal reason? Culture fit? Personality fit?

Another worst thing is to be denied without any tests. Nowadays, I'd pick difficult and time consuming technical tests over being denied by technical merits due to incomplete CVs

valand··on Music for Programming
Their songs speak controlled chaos. I've known them only for 4 years and I have been captivated with how meditative their songs sound, inspite of the genre.
valand··on Music for Programming
> I absolutely cannot listen to music with words when I code

Same here. Med to high pitch does the same effect as words for me. But undecipherable words or ambients does not have the same paralyzing effect as words, things like metal growl, mumble rap, or ambient acapella. My goto music would be extreme polymetric metal music with dark tone (bright guitar tone doesn't work for me. Check out my fav band Meshuggah), noir jazz (jazz which accompany noir detective/mystery film), or muted song whose mid-to-high pitched instruments arent quite prominent.

And then there is a friend of mine who can program while listening to podcast. A mad lad he is I say.

valand··on DRY is an over-rated programming principle?
People forget that DRY means "Every piece of knowledge must have a single, unambiguous, authoritative representation within a system".

The principle concerns the duplication of knowledge, not code.

Author's reference to "accidental duplication" is caused by two similar code that represents different code that is when joined becomes the code that is ambiguous in meaning.

← PreviousPage 2 of 11Next →