Threads for Pushups

    1. 1

      A couple of clarifying questions:

      1. You state that if you haven’t received an ack within X milliseconds, to mark the current message as sent and proceed. If you don’t care about retries, why not remove the requirement to listen to acks in the first place?
      2. How important is event ordering to you? For most event architectures, it’s worth it to quash that requirement due to increased complexity.
      3. What’s worse: a user not receiving a message, or a user receiving more than one copy of a message?
      1. 2
        1. I get acks 85%-90% of the times. So, I would like to optimise it so that it is ordered for maximum number of users and let it go out of order for few. Also, by adding this X amount of delay, the message is usually sent to user as ordered. The messages are going out of order when I send them instantly.

        2. The current system is unordered and works really well (scale, maintainability). However, a lot of messages are sent out of order. So, ordering is very important. My naive solution is to add a delay of X ms after every message and it should solve for most cases. However, I would be slowing down simply and I don’t want to do that.

        3. User not receiving a message is worse. But I would try not send multiple times either.

        1. 4

          Have you considered enabling PubSub ordering, with the ordering key being the user/room? Some of the tradeoffs are that you will be limited in your throughput (1MB/s) per ordering key, and will be vulnerable to hot sharding issues.

          After enabling ordering, if the ordering issue still impacts a greater fraction of users than you would like, then the problem is most likely on the upstream side (Insta/WhatsApp). AFAIK there is no ordering guarantee for those services, even if you wait for acks.

          My advice: if the current solution is working great without ordering, I would strongly suggest sticking with it.

          1. 2

            Once I enable ordering on the queue, it becomes difficult to distribute the work within multiple workers, right?

            if the current solution is working great without ordering, I would strongly suggest sticking with it.

            I so wish to do this, but seems I can’t :(

            1. 3

              Has someone actually quantified how impactful out of order messages are to the business? This is the kind of bug that a less-technical manager or PM can prioritize highly without doing due diligence.

              Another suggestion is to make a design, and be sure to highlight whatever infrastructure costs are changing (increasing most likely), as well as calling out the risks of increasing the complexity of the system. You have the agency to advocate for what you think is right. If they decide to proceed with the design then go ahead and get the experience and you’ll find out if the warnings were warranted over time.

              Quantifying the impact is a good exercise for you to do anyway, since if you build the system you can then put an estimate of the value you created on your resume.

              1. 2

                Correct; you will only be able to have one worker per ordering key, or you lose your ordering guarantee.

            2. 2

              If you want to avoid duplicates and lost messages, the only solution is to use idempotent APIs to send messages. If you do not receive an ack within some time, resend the message idempotently; lost sends/acks are repeated and the API provider filters the duplicates. Only proceed to sending message N+1 once you eventually succeed sending message N.

              If your API provider does not provide an idempotent API, then you could try to query their API for your last sent message and compare it with the one you plan to send. But this is slow and, since it’s not atomic / transactional, is very racey.

          1. 2

            One solution I am thinking is, creating one queue per room. I can use Apache Pulsar, it is supposed handle millions of queues. However, just about anyone who have used it in production advising me to not to use it. From their experience, it is not easy to maintain infra wise and much complex than Kafka. So, I am exploring of alternate solutions too.

            1. 3

              If you’re looking into different queueing solutions you might find Tim Bray’s Eventing Facets series helpful.

              1. 1

                I’ve been courting pulsar quite a bit lately. I’d like to use it for an observability stack, I think I’m very in love with the idea of the pulsar functions… the main problem i have is that while everything can speak with kafka, there’s not much around for pulsar yet.

              1. 2

                Also one thing that hasn’t been mentioned is that there is actually a hotness penalty for aggressive self-promotion. I’m not sure if this has changed recently since I looked at the code though.

                I agree with most folks here that the mods are doing a good job and we shouldn’t blanket ban self posted content.

                1. 24

                  This is an advertisement for a Kickstarter and does not contain the type of technical content worthy of a Lobsters post.

                  1. 7

                    It links to these technical places:

                    1. 11

                      Those would’ve been better submissions!

                      1. 4

                        These are what I wanted to see, and I’d have been tempted to hide/flag if the content given had lacked any links to further technical detail.

                        But since that wasn’t the case, I think there’s value in highlighting the Kickstarter so people can support the project if they’re interested?

                        I’m often tempted to write comments like this on “does x belong here?” threads then abandon them to avoid spamming up the discussion further. So, an actual suggestion:

                        Perhaps in cases like this where there’s a good reason to link to the PR material, we could encourage people to also add a comment or blurb calling out any relevant links or technical information?

                      2. 7

                        Agreed! I think this is squarely on-topic. It’s an interesting product that inspired me to read about https://pwnagotchi.ai/ and other associated devices. I learned a lot from reading the reading this page and searching the web for the topics mentioned. The USB stack fuzzing idea is interesting. I think I might try exactly that on a piece of embedded equipment I have lying around.

                      3. 5

                        It might be. Or it might just be performance art, as the kickstarter in question does not even exist.

                        If it ships, I’d sure like to see a link to the promised firmware and hardware source. It’ll be an interesting gadget if it ever becomes real.

                        1. 5

                          The heart of it seems to be this very impressive beast https://www.ti.com/lit/gpn/cc1101

                          Probably a real swine to write drivers for, but as usual, ti supplies a bunch of libraries you could use.

                          Moore’s Law has ceased to be “Doubling of CPU speed every 18 months”. Actually, it never was.

                          Actually as stated by Moore, it was “Doubling the number of transistors every 12”. That has reach the peak of how much plain CPU speed that can be delivered.

                          What is still happening, is more and more powerful and weirder and more exotic chips like this.

                          1. 2

                            Can you explain what makes this a weird, exotic, impressive beast? Almost all of my deep knowledge relates to server hardware, I haven’t worked with microcontroller-scale things for about a decade.

                            1. 9

                              Read the data sheet I linked to for the full details, but basically…

                              It’s a radio receiver transmitter (transceiver) that frequency hops over 300-348 MHz, 387-464 MHz and 779-928 MHz bands and converts from an RF baseband signal to a stream of samples (i/q’s) and then encode/decode data from that via a bunch of different modem algorithms, plus a bunch of nifty stuff require to make it practical (sync detect, address and crc check, …) in a tiny (2.4mmx2.4mm) package.

                              In The Bad Old Days that used to require a lot of fancy rf circuitry, maybe an fpga, certainly a dsp, and a hell of a lot of very fancy maths and very smart code.

                              (Source. I do this stuff for a living)

                              1. 1

                                Ahh interesting. Yes, this is why I needed an explanation because I don’t do this stuff for a living. But certainly want to learn more. I can’t do much with a data sheet just yet

                                edit: And thank you!

                                1. 2

                                  I’m on the software side of the picture so there is always more for me to learn on the RF/hardware side, but I at least know where the various tasks are done on the device I work on.

                                  There are a lot of these super smart super tiny chips coming on the market… the down side smart equals complex to drive, and chip tends to mean you get what you get, if the chip doesn’t do what you want…. get another chip (means PCB redesign) and have a massive task of rewriting your drivers.

                                  If you ever pull the bluetooth standard and print it out, (you will need to buy a new bookcase), you get an idea of the scale of “tiny,cheap,super smart aka insanely complex” I’m talking about.

                                  That said, a lot of things that were very expensive, are becoming available at commodity prices. In some ways dumber, someways less customised, but with 90% of what you want.

                                  And that will probably improve in time.

                              2. 1

                                yes i’d love to know as well!

                              3. 1

                                i guess if it is paired with another ti µc it should be quite easy. i have still an ez430 chronos lying around, which wasn’t too hard to write code for, given the examples etc.

                                1. 1

                                  It would be nice if they marked PDF links more visibly.

                              4. -1

                                I don’t think so and so you are wrong because what determines posts to be worthy of lobste.rs is the users, and I am a user of lobste.rs :)

                                1. 2

                                  I don’t think a flat “you are wrong” is correct when the post has already been spam-flagged over ten times.

                                  1. 0

                                    It’s just a joke about “x on lobste.rs should only ever be y” purity posts. You know what they say about death, taxes, and arguments about what lobsters “is”…

                              1. 3

                                Hey nice tricks you’ve got there! I appreciate the concrete examples. The units in the first equation should be “bps” though, and the Little’s Law section seems to have mixups with variable names.

                                1. 1

                                  Whoops, thanks for the correction! :)

                                  1. 2

                                    Thanks for putting this together. The rule of 72 is going to come in handy.

                                    While we’re doing suggestions - the queueing example with actual numbers plugged in swaps lambda and W. While still mathematically correct it did caused me to stutter for a sec reading the example since it looked like a super slow rate of entry and an insanely huge processing time.

                                1. 1

                                  The first question is: Are you building this project to learn a new language or system, or are you building this project to achieve the end result?

                                  I’ve found it helpful to distinguish between learning projects and goal projects.

                                  If you’re just trying to achieve a goal: Build your project in whatever language is most familiar to you on whatever platform is most familiar. Try to get something working as soon as possible and continue to iterate. If you get a ton of users and need to scale then the exercise of fixing what you have to scale or migrating to a different system is probably more useful than picking the perfect thing from the start. It’s likely you won’t have to deal with scale for a long time, and if you do it’s a good problem to have.

                                  If this is a learning project: Pick whatever seems most interesting or most unfamiliar and go from there.

                                  1. 29

                                    Please don’t add commentary to the story text field.

                                    From the submission guidelines:

                                    When submitting a URL, the text field is optional and should only be used when additional context or explanation of the URL is needed. Commentary or opinion should be reserved for a comment, so that it can be voted on separately from the story.

                                    1. 3

                                      You triggered me to submit a feature proposal aimed to try and help counter this in future: https://lobste.rs/s/pyxvyo/feature_idea_for_stories_w_extra_text_help

                                    1. 2

                                      Facebook Container prevents Facebook from tracking you around the web - Facebook logins, likes, and comments are automatically blocked on non-Facebook sites. But when we need an exception, you can now create one by adding custom sites to the Facebook Container.

                                      Interesting that they surface this as a top-level new feature of Firefox, when as far as I can tell it’s an add-on that a new user would have to manually install and enable first. I’m also curious what additional protection this offers that couldn’t be implemented in the base container add-on that was already available. Is Facebook specifically doing things to break normal Firefox containers that have to be mitigated here?

                                      1. 7

                                        What I don’t understand is why they don’t have a Google Container. It’s more likely that Google will track you through Analytics, AdWords, Tag Manager, etc without you noticing than Facebook doing the same.

                                        1. 14

                                          What I don’t understand is why they don’t have a Google Container.

                                          They get a lot of money from Google.

                                          1. 6

                                            Also, a lot of sites break when you block Google scripts :(.

                                            1. 4

                                              This is a big pet peeve of mine. It’s ridiculous how many sites are too lazy (or cheap, I guess) to host their own Javascript.

                                              A nice extension (or uBlock/uMatrix feature) would be redirecting all of the googleapis.com URLs to localhost or some other server.

                                              1. 4

                                                I think this is what decentraleyes does: https://addons.mozilla.org/en-US/firefox/addon/decentraleyes/

                                                1. 1

                                                  This isn’t about hosting their own JavaScript. Pretty often, it’s business-logic trackers (e.g. “user clicked the buy button” that crash the JS program if they fail, because no one expects them to).

                                                  1. 2

                                                    because no one expects them to).

                                                    Decent programmers everywhere do. I don’t, though.

                                                  2. 1

                                                    Hosting JS, fonts, etc. from CDNs improves the chance that they’ll be cached since other sites use the same CDN URLs for those resources.

                                                    1. 5

                                                      Chrome and Firefox will soon partition the cache by the origin of the top-level document to prevent timing leaks. Safari already does.

                                                      1. 2

                                                        Most sites are so big it’s kind of silly to worry about a few kilobytes of Javascript, isn’t it?

                                                    2. 2

                                                      This isn’t blocking google scripts though - it’s using a separate set of cookies/state for pages that are google-first-party vs the rest of the web.

                                                    3. 1

                                                      I made my own container to hold my Google stuff.

                                                    4. 1

                                                      At a guess, it’s the usual story: They expect too many complaints about breaking behaviour the users consider normal and desirable. Remember that new features can’t break too much existing usage, or else users switch to another browser.

                                                      If Firefox were to break every site with a recaptcha, users would complain a lot. Breaking like buttons isn’t as serious… I think.

                                                    5. 3

                                                      I just started using Firefox again on Linux, and I got prompted to enable Facebook Container by the browser itself, even from a completely new profile, so it seems that they’ve integrated the installation and enabling into the workflow itself.

                                                      1. 3

                                                        Facebook is known to build shadow profiles around users that are not on Facebook.

                                                        1. 5

                                                          Is this materially different than the profile Google builds when visiting sites with ads or analytics?

                                                          1. 7

                                                            Yes. Facebook apparently connects them to their social graph like normal profiles. So they don’t only track your individual travel, but also your personal connections.

                                                            1. 7

                                                              I looked through what Google had on me once. It was enough to send me targeted ads, but it was nothing compared to what it could have been if, for example, Google were to trawl the entire gmail archives for mentions of my name.

                                                              Facebook is different. You may have seen the “upload contacts” feature? Facebook will read all of your email and store the email addresses. If I send you and someone else email, and you “upload your contacts”, Facebook is said to store not just my email address, but also the relationship between me and that someone else. Sleazy.

                                                        1. 26

                                                          One flipside of this is that, as a consultant, I’m incentivized to not talk publicly about my rates. If they’re publicly available, then companies can use that in bargaining against me. I try to charge as much as the company is willing to pay. Let’s say that’s 10 dollars a day.¹ If they know that I normally charge clients 8 dollars, they know I’m probably willing to settle for 8 dollars, and they can refuse unless I lower to the standard rate. They’re confident I’ll lower my rate than lose the business entirely, saving them money.

                                                          The downside to this is that consultants don’t know how much other consultants charge. There was a Twitter thread a while back where a high-profile speaker raised her keynote fee to 5k plus T&E, and several people chimed in that she was vastly undercharging.

                                                          ¹ (no I’m not charging 10 dollars a day, it’s at least 15.)

                                                          1. 6

                                                            If you think that your salary is too low, there’s also an incentive to not let your prospective next employers know. I know I’ve made that mistake once, and it won’t help you to get good offers.

                                                            1. 1

                                                              Yeah. It’d be nice to disown my comment about my salary just so this couldn’t happen to me. Is that an option, @pushcx?

                                                              1. 1

                                                                The disown link appears next to my comments if I go to “Your Threads.”

                                                                1. 1

                                                                  Interesting, I don’t see it. I’ll check the codebase for what causes it to appear.

                                                                  1. 1

                                                                    Looks like it is time bound? Would make sense as I also can’t disown some comments anymore from two days ago. But I certainly had this button after creating them for some time. But it should be at least 1 day to trigger ?!

                                                                    Edit: It doesn’t make any sense, I can still disown comments from 29 days ago, but not from 2?

                                                                    1. 2

                                                                      It’s deleteable for a period (currently 14 days), then disownable. Disowning is seen as a way to let people walk away from old conversations without turning those discussions into an unreadable mess, not as a way to post anonymously.

                                                            2. 6

                                                              yeah, definitely - i think i didn’t write this as clearly as i could have - the point i was trying to make is that how and with who you talk about your salary matters, and talking about it 1:1 with a co-worker is probably much more useful than just dumping how much you make on twitter. this is a good example of why that can be.

                                                              1. 3

                                                                Twitter has such a variety of content and outrage that it’s not a great place often for many things, but for fora (such as this) that focus on actionable stuff for practitioners I think these datapoints can still be can be illuminating.

                                                                Unionization is a pipedream in tech I think is a flawed idea in many ways but the first step to any sort of progress is people share their salary information. Limiting that information to your coworkers is I think a good way to breed resentment and upset a working environment, and also kinda reinforces a sort of provincialism that is already systemic in the tech industry: a bunch of GOOG or MSFT folks in NYC or SF or Seattle kvetching about their perf bonuses and kitchenette cutbacks to each other may be missing the bigger picture of flyover country and other nations.

                                                              2. 3

                                                                This is a really good point. I’ve noticed that recruiters are very aggressive in asking your current compensation. They would love to be able to look up your twitter handle and figure out how much you’re making, so they can figure out the lower bound that will make you switch jobs. Instead of putting it out on twitter, share information with your peers through private channels. Unlike consulting, general jobs have enough information through tools like levels.fyi to know what you’re worth, so posting about it on public channels is harmful to you

                                                                1. 3

                                                                  Information asymmetry prevents efficient price discovery and leads to one party making more money from the other. :)

                                                                  1. 1

                                                                    as a consultant, I’m incentivized to not talk publicly about my rates. If they’re publicly available, then companies can use that in bargaining against me.

                                                                    Then thank you for taking a risk with this comment!

                                                                    no I’m not charging 10 dollars a day, it’s at least 15.

                                                                    I see what you did there ;)

                                                                  1. 3

                                                                    This is quite the hack, especially since it relies on virtual memory to work. I wonder if this is something that would work on the .NET or JVM GCs? It also makes me think of that story of the video game programmer that allocated 4MB (I think) “just in case” when developing a video game.

                                                                    1. 7

                                                                      This does seem like a hack. On the JVM you can just set the min / max heap, which would roughly accomplish the same thing.

                                                                      When I used to work on web services on the JVM that required low latency, we would generally configure the min and max heap sizes to be the same, and then pin them to a specific amount of memory we had available on a machine type. Then we would tune the new size / eden space to fit the short term / temporary request objects. Essentially what’s described on this page: https://docs.oracle.com/cd/E19900-01/819-4742/abeik/index.html This was a few years ago though, so it may have changed.

                                                                      I’m surprised golang doesn’t support something like this out of the box. Possibly this issue? https://github.com/golang/go/issues/23044 I guess if the hack works then it’s fine :)

                                                                      1. 2

                                                                        I’m not saying that it’s bad to use a hack like that, just that it’s something that definitely relies on a quite a few implementation-defined behaviors.

                                                                        There are some quotes about how a garbage collector allows you to pretend you have infinite memory. This isn’t infinite, but it is quite the large allocation.

                                                                        1. 1

                                                                          Yes, that issue. Both min and max heap sizes seem useful for different situations; some .NET GC developer suggested “you shouldn’t have to know about GC internals” should be the qualification for GC knobs, and it seems like this passes that test: independent of GC internals, you sometimes know you can use X GB of memory before Bad Things Happen, or you know you don’t care about usage up to Y MB.

                                                                        2. 2

                                                                          Is the first story here the one you mentioned? https://www.dodgycoder.net/2012/02/coding-tricks-of-game-developers.html

                                                                          1. 2

                                                                            I read it from the Gamasutra link originally. It stuck in my head though, and it’s the sort of thing I’d definitely do when faced with a similar type of situation.

                                                                            I haven’t been there yet, tho.

                                                                          2. 2

                                                                            It’s certainly a hack, but we all rely on virtual memory to work. Virtual memory is an integral part of the concept of a process, which is the core abstraction an OS provides. The thing it depends on which is actually notable is over-provisioning, which can be disabled, though in practice, we all depends on over-provisioning too due to the fork/exec pattern.

                                                                            If you have the choice between adding one memoryBallast := make([]byte, 1024 * 1024 * 10) to the main function and forking the go runtime, making the necessary changes to tune the GC, then deploying your fork to production, then go through the process of hopefully getting your patch upstreamed, at which point you’re either safe or your patches are rejected and you have to maintain your own fork forever… Well, I know which one I’d choose.

                                                                            1. 1

                                                                              I wonder if this is something that would work on the .NET or JVM GCs?

                                                                              At least the JVM’s G1GC uses a horribly named “nursery” so most GC runs only look at new objects, so they’re quite inexpensive. I think it shines in exactly this kind of use case.

                                                                            1. 5

                                                                              I won’t be able to participate live but I eagerly await the recordings.

                                                                              Do folks have any favorite talks from the last one that they’d like to highlight?

                                                                              1. 23

                                                                                You can also support the youth led climate strike on September 20th.

                                                                                Global: https://globalclimatestrike.net/#join

                                                                                United States: https://strikewithus.org/

                                                                                If you’re in San Francisco California and want to participate feel free to send a DM.

                                                                                1. 19

                                                                                  I believe that trying to live more ethically individually has very little impact compared to being involved in direct political action. We have to force government to act rapidly and dramatically to limit the factors that will end life as we know it if left unchecked. We have to be in the streets and we have to make it too expensive for them to ignore our voices.

                                                                                  1. 2

                                                                                    THIS. Those of you in BOS, I hope to see you outside CIty Hall on the 20th.

                                                                                  1. 22

                                                                                    Back then I was 5 years into my programming career, I had passed 10,000 hours of practice, and was starting to worry that the “10,000 hour strategy” I had been following and telling other aspiring programmers to follow may have been in vain, because I was still a pretty bad programmer (many would argue that today, 6 years later, I’m not much better, but now I can say that’s just because I only have 29,000 hours of practice).

                                                                                    Anders Ericsson discusses the 10,000 hours rule directly in his book Peak. The number 10,000 comes from one study of violinists and is an oversimplification promoted by Malcolm Gladwell in Outliers.

                                                                                    One of the main things I took away from reading Peak is that hours of practice is not enough. The practice must be deliberate practice: specifically training in a finite set of skills, often with coaching help, and at a level that is just outside your comfort zone, so you are neither bored nor overwhelmed.

                                                                                    In addition to the raw amount of time put in my guess is that the folks in your study are also very systematic about what they are working on and might have discovered deliberate practice for themselves without knowing the name.

                                                                                    Peak was a really inspiring book for me, and I recommend it highly for anyone interested in improving a skill.

                                                                                    Finally, this is a cool mini-study! Thanks for posting it. I think this is a really interesting topic especially related to programming skill.

                                                                                    1. 11

                                                                                      Related - I’ve found an old post asking what deliberate practice is for programmers.

                                                                                      1. 2

                                                                                        This is deliberate practice for me. I tried to make up my mind how to implement a state machine in C++. There is a big design space to explore and many principles to consider. In a professional setting there is usually no point in optimizing; pick something from Stack Overflow and continue. Taking the time to find an optimal solution gets you into good habits. Over time you can apply these habits under pressure as well.

                                                                                    1. 22

                                                                                      This seems like a good set of things that I’d like to regularly check in on. Posting it here in case anyone is of a similar mind after watching the video. (I had to scrub back through it - maybe item 0 should be: I take notes when watching presentations?)

                                                                                      1. I can articulate precisely what problem I am trying to solve.
                                                                                      2. I have articulated precisely what problem I am trying to solve.
                                                                                      3. I have confirmed that someone else can articulate what problem I am trying to solve.
                                                                                      4. I can articulate why my problem is important to solve.
                                                                                      5. I can articulate how much my problem is worth solving.
                                                                                      6. I have a Plan B in case my solution to my current problem doesn’t work.
                                                                                      7. I have already implemented my Plan B in case my solution to my current problem doesn’t work.
                                                                                      8. I can articulate the steps required to solve my current problem.
                                                                                      9. I can clearly articulate unknowns and risks associated with my current problem.
                                                                                      10. I have not thought or said “I can just make up the time” without immediately talking to someone.
                                                                                      11. I write a “framework” and have used it multiple times to actually solve a problem it was intended to solve.
                                                                                      12. I can articulate what the test for completion of my current is.
                                                                                      13. I can articulate the hypothesis related to my problem and how I could falsify it.
                                                                                      14. I can articulate the (various) latency requirements for my current problem.
                                                                                      15. I can articulate the (various) throughput requirements for my current problem.
                                                                                      16. I can articulate the most common concrete use case of the system I am developing.
                                                                                      17. I know the most common actual, real-life values of the data I am transforming.
                                                                                      18. I know the acceptable ranges of values of all the data I am transforming.
                                                                                      19. I can articulate what will happen when (somehow) data outside that range enters the system.
                                                                                      20. I can articulate a list of input data into my system roughly sorted by likelihood.
                                                                                      21. I know the frequency of change of the actual, real-life values of the data I am transforming.
                                                                                      22. I have (at least partially) read the (available) documentation for the hardware, platform, and tools I use most commonly.
                                                                                      23. I have sat and watched an actual user of my system.
                                                                                      24. I know the slowest part of the users of my system’s workflow with high confidence.
                                                                                      25. I know what information users of my system will need to make effective use of the solution.
                                                                                      26. I can articulate the finite set of hardware I am designing my solution to work for.
                                                                                      27. I can articulate how that set of hardware specifically affects the design of my system.
                                                                                      28. I have recently profiled the performance of my system.
                                                                                      29. I have recently profiled the memory usage of my system.
                                                                                      30. I have used multiple different profiling methods to measure the performance of my system.
                                                                                      31. I know how to significantly improve the performance of my system without changing the input/output interface of the system.
                                                                                      32. I know specifically how I can and will debug live release builds of my work when they fail.
                                                                                      33. I know what data I am reading as part of my solution and where it comes from.
                                                                                      34. I know how often I am reading data I do not need as part of my solution.
                                                                                      35. I know what data I am writing as part of my solution and where it is used.
                                                                                      36. I know how often I am writing data I do not need to as part of my solution.
                                                                                      37. I can articulate how all the data I use is laid out in memory.
                                                                                      38. I never use the phrase “platform independent” when referring to my work.
                                                                                      39. I never use the phrase “future proof” when referring to my work.
                                                                                      40. I can schedule my own time well.
                                                                                      41. I am vigilant about not wasting others’ time.
                                                                                      42. I actively seek constructive feedback and take it seriously.
                                                                                      43. I am not actively avoiding any uncomfortable (professional) conversations.
                                                                                      44. I am not actively avoiding any (professional) conflicts.
                                                                                      45. I consistently interact with other professionals, professionally.
                                                                                      46. I can articulate what I believe others should expect from me.
                                                                                      47. I do not require multiple reminders to respond to a request or complete work.
                                                                                      48. I pursue opportunities to return value to the commons (when appropriate.)
                                                                                      49. I actively work to bring value to the people I work with.
                                                                                      50. I actively work to ensure underrepresented voices are heard.
                                                                                      1. 2

                                                                                        Thanks for compiling the list. For checking back regularly, I’d prefer to have a copy of the list with the game development related bullets removed. I think this level of obsession with performance is relevant to only certain domains. I’m not saying it’s ever unimportant, but the focus in this list is too much.

                                                                                        1. 7

                                                                                          People thinking performance only matters in games is why browsers keep getting slower, why Word takes as long to start now as it does, and why having Slack desktop app open keep you from running anything else.

                                                                                          We can’t ignore that and still treat ourselves as serious developers.

                                                                                          1. 1

                                                                                            As I’ve already indicated, I think performance is important. But as a paid engineer, your first objective is to maximize the metrics that make the business succeed. As a back-end developer I already have to juggle a lot of complexity, and I won’t let performance concerns complicate the code and make the problem exponentially worse. No more than absolutely necessary, at least.

                                                                                            1. 0

                                                                                              So, select star order by random limit one then since it’s easier to maintain?

                                                                                          2. 2

                                                                                            There’s nothing in the list that’s game development specific. On the subject of the performance related items, there’s nothing saying “I will write fast code and optimise it to within an inch of its life (or my own life).” Just “I measure it” and “I know how to make it faster if I need to.”

                                                                                            That’s too much?

                                                                                            1. 2

                                                                                              I’ve just made peace with the fact that I have to repeat I don’t think it’s unimportant.

                                                                                              I’m just saying it’s given too much focus. Look at how many of those bullet points are about performance, while there’s only one that’s partially about architecture.

                                                                                              In some problem domains, your business competes on performance (among other things). In those domains (like game development) you spare a big chunk of your brain to constantly evaluate every decision you take on its performance implications.

                                                                                              In some other domains (like web applications), performance affects the business only when it’s very costly on the servers or when it degrades the user experience. Businesses compete on their ability to change and adapt. In those domains, you know performance can become an issue if you screw up, but you’re not constantly thinking about it. What you’re thinking about all the time is the architecture.

                                                                                              And you can turn the argument around. The architecture is important in game development as well, but less so than web, because you spend years building a game, and any change in requirements is a fault of your own. And when you release, most games don’t even try to stay compatible with the save files produced with the previous versions. And the players are OK with it.

                                                                                              Please don’t turn this into a black and white thing.

                                                                                        1. 1

                                                                                          Thanks for taking the time to write up these thoughts. My wife and I have been working on healing our relationship with our phones recently. We have a docking station in the living room and are trying to keep them there most of the time when we’re in the house, and also when we are going to bed. This article just inspired me to get the “What do you want to pay attention to?” lock screen, as well as to do a pass on cleaning out unnecessary apps, and putting infrequently used ones in a “Misc” folder on a separate home screen.

                                                                                          The biggest thing I’ve had to accept is that this is a work in progress. Sometimes I’m going to fail. I’m going to get into arguments on twitter. I’m going to spend too much time on an app for no good reason. There will be times when I’m physically with people, but mentally absent. It’s ok. What’s important is that I recognise it, and try to stop it happening next time.

                                                                                          Totally agree. Being able to observe the workings of your own mind (mindfulness) is such an important tool, not only for kicking phone-addition, but for so many other areas of mental and emotional health. I recommend mindfulness meditation if you haven’t tried it. Here are some guided audio meditations that I’ve found helpful: https://chrisgermer.com/meditations/

                                                                                          One small error I noticed:

                                                                                          Firefox supports add-ons on mobile, such as uBlock Origin.

                                                                                          When I visit https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/ on Firefox for iOS I get a big red banner that reads “Firefox for iOS does not currently support add-ons.”

                                                                                          If there’s a way to get this working on iOS I’d love to know!

                                                                                          1. 2

                                                                                            If there’s a way to get this working on iOS I’d love to know!

                                                                                            Since all browsers on iOS use a system web view, you could use the system’s native content blockers, which enforce it for all web viewers, AFAIK.

                                                                                            1. 2

                                                                                              Wow, thanks for reading this!

                                                                                              I’m sorry about iOS. Unfortunately I’m using firefox on Android, which does support add-ons. On iOS you do have access to an equivalent app called Better, which is worth getting if you can afford it.

                                                                                              1. 3

                                                                                                Where Mathematics Comes From makes some similar arguments. I haven’t read much on the philosophy of mathematics, but this book changed my perspective greatly.

                                                                                                  1. 21

                                                                                                    @itamarst it’s not really clear to me what a resume looks like to you. My resume’s have never had paragraphs in them, although they might have a some sort of opening sentence that sums up my ambition.

                                                                                                    I would argue that you aren’t really emphasizing the right thing. My resume’s are target-specific but tend to be a list of work experience with the important things I did listed in there, like “Lead a team solving X”, or “Designed interview structure” (with more filler words).

                                                                                                    It’s also unclear to me if this blog post comes from your experience being a hiring manager for hundreds of candidates or if you are just pulling out of your butt what you think would make a good resume. This is another post which feels like you’re aiming for IT Guru status rather than dispensing useful evidence based information.

                                                                                                    1. 2

                                                                                                      In case you too aspire to guruhood—

                                                                                                      Cons of being IT Guru:

                                                                                                      Pros of being IT Guru:

                                                                                                      • Get to share what I’ve learned over 22+ years of working as a programmer.
                                                                                                      1. 17

                                                                                                        Not trying to sound harsh, but this is a low quality response. Setting aside the IT Guru stuff I think @apy had some good implied questions.

                                                                                                        What does a resume look like to you? Does it contain paragraphs with narrative description like a cover letter? My resume and most I’ve seen in the U.S. have sections with lots of short bullet points, not paragraphs per se.

                                                                                                        Are you drawing this advice from your experience on the hiring manager side or the applicant side or both? I’ve found that the Software Clown style posts which use concrete examples are much better at conveying your message. Are there times you’ve had direct feedback on your resume? What about times you’ve passed on a candidate because of their resume?

                                                                                                        1. 2
                                                                                                          • Paragraphs or bullet points is besides the point. You can have bullet points too, it doesn’t matter. It’s the content and location that matters, so long as it’s professional looking and readable.
                                                                                                          • This is based on decade plus of reading resumes and then interviewing people (as developer, usually, not manager) and seeing how much was missing from resume.
                                                                                                          • I’ll see if I can add a concrete example.
                                                                                                          1. 8

                                                                                                            And most importantly, do you have any evidence that doing the change you suggest actually affects one’s success in the hiring pipeline rather than just being your preference of how resume’s should look? I could write an opposing article that says the most important aspect of a resume is that it uses exactly 3 distinct colors, how is a reader to judge the quality of such advice?

                                                                                                            1. 1

                                                                                                              Yes, I would like to see some evidence as well, basically where I live, hiring managers will ask you about technologies, usually with a programmer/developer/team member of sorts with them, to evaluate you. It will also be frowned upon if you at least don’t list something in your resume, and if you have phrases like the ones described in other comments in this thread, devs won’t particularly like your resume. Last guy we hired had a simple latex based resume, that was clean, listed his experiences, how he worked with others in the relevant projects, his known technologies, working projects (github/git repo), and today he is invaluable to the team. (edited for grammar and another point)

                                                                                                              1. 3

                                                                                                                Where are you from? Different places have different hiring cultures, yes, and what I’m writing is mostly broadly focused on US market. In the US approaching your skills as a list of technologies is asking to be treated as a commodity: easily replaceable if someone comes along with same list at lower pay. You can do it, but you don’t want to. If an interview involved a manager with a checklist of technologies I’d probably just walk out, because I’d be pretty sure pay would be vastly lower than what I can get elsewhere. And if developers were annoyed by focusing on solving problems, rather than churning out code, working with them would be unpleasant.

                                                                                                                Notice, however, that your coworker mentioned how he worked with others, not just technologies.

                                                                                                                Likewise, Apy’s resume starts by listing actual work he did not, not a list of technologies.

                                                                                                                1. 1

                                                                                                                  Yes, things are different here, I’m from South America. I guess the difference here is that we rely more on the interviews that we perform, in my opinion anyone can write about how they did something, they may be lying or may not, and we want to feel that in the actual interview.

                                                                                                                  It seems to me now that here, we want to feel how you say things in an interview, we want to see you do it, explain how you’ve worked, which in my opinion you can easily spot who was trying to fake something. Obviously sometimes you get interviews in which the candidates were not who they said they were, and that’s disappointing, but when you get someone who knows what he’s doing, you feel it then and there by talking/coding/solving problems.

                                                                                                                  In my opinion anyway, writing something in a resume is easy, actual talking/coding whatever process you might wanna choose to evaluate them, is the real deal