Live data from Hacker News

My guiding principles after 20 years of programming (2020)

alexewerlof.medium.com

91–100 of 193 posts

Re: My guiding principles after 20 years of programming (2020)

#91
post #86

Few problems with this: > Don’t attach your identity to your code Others in your team will. Example here is a craftsman taking pride in their work. Think about that the next time you are reviewing someone elses work. > Security > Reliability > Usability (Accessibility & UX) > Maintainability > Simplicity (Developer experience/DX) > Brevity (code length) > Finance > Performance Performance is last ? Code length is mor…

I can see where he's coming from. I started around the same time he did and from my point of view from my experience, perhaps I can further explain how I see it. >Performance is last ? Code length is more important than performance? That's wrong. Also correctness is not mentioned at all surely that has to be in that list. Depends on the scenario. Early in my career I was maintaining a scheduling DSS. You would enter…

Eeek

> our system could do it in about 10 seconds, give or take

> user's don't care about the difference between 10 seconds and 1 second

They d,o but your boss doesn't. That is until they complain. Happened to me multiple times over the past 16 years. No one cares about Performance until it's too bad then suddenly it a huge problem. I've been in several projects where fixing performance was a rewrite due to this attitude. Performance should be much higher on the list period. Also not having correctness is insane.

> I've been burned by external libs plenty of times

Yes and you're not the only one but the "I've been burned therefore noone can use 3rd party libs" is childish.

> A lot of it is just check boxing.

That's presumably coming from someone who has a lot of experience and is very familiar with the domain. For those who are new to the company and new to working in tech in general good documentation is a godsend.

> Get out ASAP

Ah yes, heard this many times. It's completely impractical and often comes from people in an privileged position. Not all devs are paid high amounts and can quit their job on a whim.

Re: My guiding principles after 20 years of programming (2020)

#92
post #86

Earlier quoted context omitted.

I can see where he's coming from. I started around the same time he did and from my point of view from my experience, perhaps I can further explain how I see it. >Performance is last ? Code length is more important than performance? That's wrong. Also correctness is not mentioned at all surely that has to be in that list. Depends on the scenario. Early in my career I was maintaining a scheduling DSS. You would enter…

Eeek > our system could do it in about 10 seconds, give or take > user's don't care about the difference between 10 seconds and 1 second They d,o but your boss doesn't. That is until they complain. Happened to me multiple times over the past 16 years. No one cares about Performance until it's too bad then suddenly it a huge problem. I've been in several projects where fixing performance was a rewrite due to this atti…

>They d,o but your boss doesn't

You don't know. You don't work there. You're just making stuff up to bolster your position. Users never complained about the speed of the system based on that algorithm.

>Yes and you're not the only one but the "I've been burned therefore noone can use 3rd party libs" is childish.

No one said that but you.

>is childish

If you can't attack the position, attack the person, right?

Well we'll just have to agree to disagree. I'll run my team how I see fit and you run your team how you see fit.

Re: My guiding principles after 20 years of programming (2020)

#94

> Never start coding (making a solution) unless you fully understand the problem. While I agree with this in general, I find that to reall fully understand a problem, I need to attempt to code, or at least formulate, a solution to it. a) because when I break down a problem into its code-able component parts, I learn a lot about it b) because in the process of then actually implementing these parts I often discover ed…

Yeah, it could just be me, but I prefer to make two false starts, toss them, and then get it right on the third attempt rather than attempting to whiteboard the problem for two weeks.

Not only is it more interesting to me to try three different ways to tackle a problem, but I have been burned when the two weeks of whiteboarding missed something and I'm back to having to iterate anyway.

To be sure, I do a little whiteboarding, but generally it might be about 2 hours or so of sketching out ideas, major structures, code flow ideas.

I generally was nodding along to most of the author's points though.

I definitely have grown to divorce myself from my ego and always try to not only try to shine the spotlight on my younger coworkers (new engineers) but try to give them "ownership" of key pieces to allow them not only some sense of autonomy/ownership but a sense of pride as well.

That does go slightly against some of the author's points about collaboratively working on a project. Engineers need a part of the code (let's say an image cache manager, as an example) that they can "own" though in order to grow. You don't want an engineer to always have "training wheels" on. (And frankly, I think this is one of the things I dislike about code reviews, I think it dis-incentivises autonomy.)

The team though, let me be clear, is the most important part of any project, not the individual luminaries. The "team" though, to a degree, needs to have engineers who feel an ownership stake in pieces of the product.

(FWIW, I have probably 35 years of programming experience, ha ha.)

Re: My guiding principles after 20 years of programming (2020)

#95
post #74

Listing Performance as the lowest value bugs me. I understand that most software isn't performance-critical, you can probably afford to use a garbage collected language for most use-cases. But putting performance last contradicts the high priority of Usability in the list, because Usability strongly depends on performance. Your product might still work if it has a second of lag after every operation, but I won't want…

"Performance serves usability" is, to me, another very strong reason to do at least some prototyping very early.

Re: My guiding principles after 20 years of programming (2020)

#96

> Never start coding (making a solution) unless you fully understand the problem. It’s very normal to spend more time listening and reading than typing code. Understand the domain before starting to code. A problem is like a maze. You need to progressively go through the code-test-improve cycle and explore the problem space till you reach the end. I agree with a lot of the points made by the author (2, 5, 7, and 8 re…

I think it's key to think about the wording here

> understand the problem

> code-test-improve cycle

I think you're first trying to understand a non-programmatic problem, a business problem, a user problem. Then you start to explore the solution to that problem. Yes, you'll learn more about the "problem" as you solve it, but the cycle explores how you're solving the problem.

Re: My guiding principles after 20 years of programming (2020)

#97

Few problems with this: > Don’t attach your identity to your code Others in your team will. Example here is a craftsman taking pride in their work. Think about that the next time you are reviewing someone elses work. > Security > Reliability > Usability (Accessibility & UX) > Maintainability > Simplicity (Developer experience/DX) > Brevity (code length) > Finance > Performance Performance is last ? Code length is mor…

> Good code doesn't need documentation.

Here's the full quote from the article: "Good code doesn’t need documentation, great code is well documented so that anyone who hasn’t been part of the evolution, trial & error process and requirements that led to the current status can be productive with it. An undocumented feature is a non-existing feature. A non-existing feature shouldn’t have code." Maybe you're just objecting to the first part, but he isn't saying "don't document".

Re: My guiding principles after 20 years of programming (2020)

#98
All good guidelines. A corollary to 1) don’t fight the tools, use the right tool is that you have to know lots of tools. Or at least, enough of several tools to know when to pull out which tool. Otherwise, “if all you have is a hammer, all problems look like a nail”.

I implement this by reading industry news, “spiking” projects for interesting frameworks, ides, etc. I find it helps to go broad in learning- learn a little about lots of things, but then deep dive when interest or need arises.

Re: My guiding principles after 20 years of programming (2020)

#100

> Never start coding (making a solution) unless you fully understand the problem. It’s very normal to spend more time listening and reading than typing code. Understand the domain before starting to code. A problem is like a maze. You need to progressively go through the code-test-improve cycle and explore the problem space till you reach the end. I agree with a lot of the points made by the author (2, 5, 7, and 8 re…

It should be easy to talk a pointy-haired boss (PHB, see Dilbert) into "readme-based development" (RBD). In fact, you can probably get funding for training, aka pizzas.

That's because RBD is basically Amazon's "write the press-release first" methodology and no PHB will say "we won't use something that Amazon says makes them successful."

The pizzas come from another Amazon saying.

Post reply on HN