Live data from Hacker News

Expectations of professional software engineers

adamj.eu

101–110 of 116 posts

Re: Expectations of professional software engineers

#101
post #29

Earlier quoted context omitted.

I think it has a so what problem. It sounds nice but then so...? I failed to understand what exactly the author wanted to convince people to do. Expectations - for who? Let's say someone does exactly this, then failed to actually ship something that people want then it's as useless as not knowing the list at all.

> I failed to understand what exactly the author wanted to convince people to do. He’s writing a list as part of his imaginary shower argument with his boss and coworkers as to why they are all inferior and he’s perfect and why all the problems they are facing are easily attributed to his list of 50 points of things he feels he does that they are failing to live up to. At least that’s my take away.

Oh good. I had a feeling it was that and didn't bother reading it.

Mind that this instinct was born from prior experience with my own imaginary shower arguments.

Re: Expectations of professional software engineers

#102

> 1. I can articulate precisely what problem I am trying to solve. > 6. I have a Plan B in case my solution to my current problem doesn’t work. > 9. I can clearly articulate unknowns and risks associated with my current problem. These rules imply one of 3 things about the author: * That author only encounters problems that have been fully solved before * The manager gives zero weight or value to discovery * The manag…

This is a strange interpretation. It does not matter whether you are working on the simplest web page or a brand new problem that no one has solved before: it is absolutely necessary that you clearly articulate the problem you are trying to solve. Even if you’re a scientist working in a purely exploratory, theoretical setting, you still have to be able to articulate your problem. You may refine that as you go, but if…

It’s reasonable to have tickets that are “is this API interesting to us?” or “how do clients use this new system?” It’s not a “problem”, and there aren’t definite goals. The task is open-ended, and it’s ultimately up to the developer’s judgement to decide that they are done.

To define terms, “the problem” is the issue faced by the client or the customer. The task isn’t the problem. A team should tackle tens or hundreds of tasks while still learning to understand the full problem. This is the motivation behind iterative processes like Scrum.

The author’s message is that if you don’t fulfill all 50 requirements _at all times_, you don’t even deserve to be a software developer (not even a junior). I disagree. I think I get the message that these rules are trying to send, but I think they are, as a whole, unreasonable in a professional, business environment. Everyone should be a product engineer, but being product-focused necessitates speculative activities that exist for no other reason than figuring out the boundaries of the problem being solved. And those activities need to be repeated as the problem is being solved, to evaluate if the problem is correctly understood. Someone, whether that’s a junior or a senior, needs to be spending time doing things that aren’t articulateable so that everyone else can articulate exactly why they are working on their current tasks.

As I become more senior, I’m starting to appreciate all of the tasks that don’t go onto the sprint board and aren’t articulateable. They exist because I need to know enough about Product’s or Account Management’s job to communicate with them, and I won’t know what exactly “complete” is until I’ve reached completion on those tasks. That’s part of the job, and I reject any list of rules that leaves no space for those activities.

Re: Expectations of professional software engineers

#104

> 1. I can articulate precisely what problem I am trying to solve. > 6. I have a Plan B in case my solution to my current problem doesn’t work. > 9. I can clearly articulate unknowns and risks associated with my current problem. These rules imply one of 3 things about the author: * That author only encounters problems that have been fully solved before * The manager gives zero weight or value to discovery * The manag…

Having a plan B for things is a bit silly sometimes. If you need to parse some data, your plan A is to write a parser, and your plan B is...to write a parser in a slightly different way? Pair program as you write the parser? That's not really plan B, it's just redoing plan A if you mess up.

Plan Bs make sense for external dependencies, but for internal work they imply your current solution has feasible alternatives, which is often nonsensical.

Re: Expectations of professional software engineers

#105

Personally - I don't see a lot of value in this list (I read all 50 items and watched the video and I regret wasting the time). There are certainly some valuable concepts - but the presentation is fairly incoherent (including the video of the talk he gives) and not particularly helpful. Many of these items are utterly unrelated: Some are fairly specific to gaming (profiling/memory layout/timing) some are basic profes…

I find it ironic that the lists focused so much in communication, and yet it had me confused and lost (ie: It failed to communicate to me what this list is about).

Communication is hard.

Re: Expectations of professional software engineers

#106

Personally - I don't see a lot of value in this list (I read all 50 items and watched the video and I regret wasting the time). There are certainly some valuable concepts - but the presentation is fairly incoherent (including the video of the talk he gives) and not particularly helpful. Many of these items are utterly unrelated: Some are fairly specific to gaming (profiling/memory layout/timing) some are basic profes…

Most of the points seem to be 'Do I have situational awareness of how what I'm doing fits into the bigger picture.' Generally a good thing to have.

Not just that, but also "am I in the habit of doing things that are conducive to situational awareness" which is perhaps the even more important bit! You can have all the situational awareness in the world now, but when it really matters is when the context changes.

Re: Expectations of professional software engineers

#107
post #71

Earlier quoted context omitted.

You only implement the Plan B if Plan A fails. Plan B doesn’t have to be elaborate. It can be as simple as, “I’m going to look into using this third-party service to solve 99% of this problem, but if it isn’t a good fit or it’s too expensive, I think we can put together a home-grown 80% solution in a couple of sprints.”

One of the points is "I have already implemented my Plan B in case my solution to my current problem doesn’t work." So that's not what they're advocating. Though I think they're 100% wrong on that point, and most managers would probably think so too.

Well one case where it can make a lot of sense is when Plan B is a quadratic/exponential solution that can be written in one day but there are complex to write/research item solutions that are much faster for Plan A.

Same for single threaded vs parallel etc.

Re: Expectations of professional software engineers

#108
post #31

Earlier quoted context omitted.

> I can articulate how all the data I use is laid out in memory. That's not a high bar, it's an arbitrary hoop. It'd be like saying "I always know which processor cache my variables are sitting in". In modern languages it may be literally impossible to look at a block of code and know what's sitting in the heap vs. on the stack, and the heap is often broken into many different components only fully understood by the…

Not sure if you're familiar with Mike Acton (as mentioned in the article). One of his key points of focus is data-oriented design, and that when designing software, ignoring the architectural realities of the hardware is ignoring one of your responsibilities as an engineer to deliver performant software. Now, it's possible to argue that writing performant software is not important. The prevailing modern sentiment def…

> Now, it's possible to argue that writing performant software is not important.

The quote I'm arguing against is "I can articulate how all the data I use is laid out in memory." Indeed, writing performant code is not important, most of the time. It is critically important a small amount of the time (actual percentages heavily dependent on the type of software), and yes, in those times, understanding the architectural realities of the hardware is somewhere on the list of things you need to understand to do so, just below a solid understanding of complexity analysis, a wide knowledge of useful data structures, proper design of queries and use of indexes (if relevant), etc. A good software engineer does not say "I always know exactly how all my data is laid out in memory", they say "I know when and how to care about that, and the rest of the times I ignore it." Just like they do with many, many other concerns. Anything else is just premature optimization. The most important problem solving skill by far is knowing what you can safely ignore.

Re: Expectations of professional software engineers

#109
post #31

Earlier quoted context omitted.

> I can articulate how all the data I use is laid out in memory. That's not a high bar, it's an arbitrary hoop. It'd be like saying "I always know which processor cache my variables are sitting in". In modern languages it may be literally impossible to look at a block of code and know what's sitting in the heap vs. on the stack, and the heap is often broken into many different components only fully understood by the…

> We want to abdicate responsibility of this kind of memory management to the interpreter, just like we want to abdicate responsibility for handling processor cache levels. If you can articulate how all the data you use is laid out in memory all the time, you are majorly micro-managing the runtime. Unfortunately, in practice, it's not possible to be oblivious of the layout of data in memory if we want to write fast c…

If the slowest part of your program is waiting for RAM to get into your CPU registers, then you have one of the most blazingly fast programs ever written. Grats! The vast majority of software has much, much, much lower-hanging fruit than that: things like O(n^2) algorithms where O(n) exists, SELECT N+1 issues, missing database indexes, missing easy wins with caching, repeated work, threads blocking each other, loading more data than necessary, throwing and then suppressing exceptions everywhere, bad netcode, doing work serially that could be paralyzed, etc. In this software, fixing these issues will be 10x easier and result in 10x larger speedups than worrying about organizing your data to get loaded from RAM into CPU caches more quickly. That makes this advice counterproductive for most programmers to hear.

Re: Expectations of professional software engineers

#110

Earlier quoted context omitted.

This guy in particular has collected some serious credibility. In the past he's worked at Insomniac Games. He is also credited for popularizing Data-Oriented Design and has delivered at least one talk that went viral and that video thumbnail of him in his red flower shirt has become a meme for a no-bullshit and requirement-focused engineering approach. Go check him out on Youtube.

You wrote: > I'm confused. The blog post is written by Adam Johnson. Are you referring to Mike Acton or Adam Johnson? I never heard of Adam Johnson before this HN post. From his books, he appears to be an expert in Django. Yes, I agree about Mike Acton and his ideas around Data-Oriented Design. It sounds like a very interesting approach to programming in a resource constrained environment.

I'm referring to Mike Acton (as you already figured out). As I understand it, the author is only summing up a talk by Acton to written form.

> It sounds like a very interesting approach to programming in a resource constrained environment.

It's more of an approach that is maintainable and straightforward, and only coincidentally (well, not really...) also straightforward and fast to execute.

Post reply on HN