Threads for Rickasaurus

  1. 1

    It’s in the box, there is no choice.

    1. 2

      SQL is as old as C, give or take a year.

      C was also in the box, there was no choice, butt hat didn’t prevent dozens of other comparable language from taking over most of C’s use.

    1. 79

      90% – maybe 93% – of project managers, could probably disappear tomorrow to either no effect or a net gain in efficiency.

      You have no idea how much they are shielding you from being pestered on project status, and constantly reorganizing the project plan to fit the mental model of some executive new to the project.

      1. 52

        Good project managers do that. Bad project managers pass it along and sometimes even amplify it.

        1. 29

          This is 100% correct. You really don’t realise how much bullshit managers deal with until you have to fill that role yourself.

          1. 5

            Totally agree. Being a manager is quite stressful and not everyone knows that

          2. 19

            Actually, I do, and I wholeheartedly agree with the poster.

            How do I know? Simple: I’ve had projects with and without project managers, in similar and sometimes even the same companies, so have fairly direct empirical evidence of the truth of the statement. I’ve also been in management positions myself (not “project management”).

            At one FAANG, the performance team and a product team had achieved a good working rapport and decided to do a longer-term collaboration to improve a crucial platform application. Then the project managers, who had felt left out, got involved and the whole thing blew up in acrimony.

            Another project manager, 1 week before ship date (that we hit): “I’ve changed all tasks in the tracker to P1, so you will actually do them”. Gosh.

            At a third company, we had an ongoing problem that had been around and festering for years, long before my manager and I had started, and that seemed trivial to solve but for some reason proved completely intractable. Then we got a new head of department, my manager scheduled a meeting with her, we all sat in and … solved it. Trivially.

            Baffled, I asked my manager how he had done that, just solved the intractable problem. He gave a little smirk and replied, “Oh, it’s easy, just don’t invite -name- to your meetings.” Who was -name-? Head of product management.

            At that same company, our project was too small and unimportant to rate a product manager. After it turned out, for some bizarre und totally unrelated reason, that we managed to be hugely successful where the projects in our surroundings were all struggling at best, a project manager decided to take pity on us and offer us her services. We declined.

            In that team and at other successful ones, the project team had a direct rapport with the customer and/or was defining the product largely autonomously. Which works amazingly well.

            Note also that 90%-93% is not 100%. At one startup where I’d been asked to come in and rescue their Mac project, it quickly became clear that we were completely fu**ed: 2-3 engineers, often multiple daily meetings with more than 10 people in the room. Surprisingly progress didn’t improve despite them calling more progress meetings. A mystery.

            They had actually hired a program manager in addition to the project managers, which is a whole other level of bizarre. But she was very good and quickly understood the problem. We made a pact that she would distract the apparatus while the team and I got a chance to finish the project. Which we did, first (and I think only) time in the history of that company that a product shipped on time.

            After we finished they fired her and had a stern talking to me that we had been given a pass so far but would have to follow their standard best practices from now on.

            1. 4

              After we finished they fired her and had a stern talking to me that we had been given a pass so far but would have to follow their standard best practices from now on.

              That is /awesomely/ awful. I love it.

            2. 12

              Agreed. Much like janitors, good project managers are noticed when they’re bad at their jobs.

              1. 4

                Which is the case of the 90%+ the OP talks about. Having worked with hundreds of them, I would say it’s more like 95%+.

                I take it some people in here are managers and don’t like this to be said. Get over it, there’s plenty of talk about bad engineering on this website, mostly done by engineers.

              2. 7

                It’s quite likely that the author’s view was shaped by project managers who do nothing but pester you on project status and constantly reorganise the project plan so as to demonstrate how important they are to the people upstairs. The exact percentage is up for debate I guess. In my experience the number is probably around 90%, too, but it’s… a complicated matter.

                1. 2

                  You must have been blessed with good project managers…

                  1. 1

                    Consider that you may have been lucky.

                    1. 1

                      At least where I work the project managers are mostly for reporting upwards, they run the monthly stakeholder meetings and such.

                    1. 1

                      Write code bottom up, it will save you a lot of effort

                      1. 2

                        I got my new blog up and a great first post with a lot of reads, but it’s been difficult to focus with the political and personal turmoil. Hopefully will be able to re-center. I have four half written posts.

                        1. 1

                          The problem with my site at RichardMinerich.com is that I built it 10 years ago on wordpress and don’t have a lot of free time. I’m not sure at all if I can take it forward without breaking everything.

                            1. 3

                              I’ve been getting out of work earlier at 3pm and playing with my 2 year old daughter. It’s been amazing. I’m convinced I don’t want to go back to commuting until they’re older, since an hour each way commute means I lose those two hours a day I’m spending with her.

                              1. 1

                                Ahh this is a classic, worth rewatching.

                                1. 1

                                  Company: Safe Banking Systems

                                  Company site: https://www.safe-banking.com/

                                  (Please ignore the careers section of our website, we’re in the middle of migrating to our parent company’s new system, I’ll update later with links)

                                  Position(s): Dev, QA/Automation, DevOps, Operations, Research Lead (Machine Learning), No Remote (maybe someday)

                                  Location(s): Dev/QA/Devops/Ops in Kennesaw GA, Research Lead in NYC

                                  Description: We provide an Enterprise KYC (Know Your Customer) platform, essentially we match company and people records across systems and figure out who is who. Our products are used by some of the largest banks in the US which means that while our platform is typically hosted/cloud based, we also sell on-site or hybrid solutions when necessary. We’re primarily a .NET stack company with a lot of F# and TypeScript code, but still a bit of C++, C#, plain JS, Python and Java floating around, multi-lingual and FP experience definitely preferred. We’re growing fast and are looking for people across the management and tech experience spectrum.

                                  Contact: richard.minerich@safe-banking.com

                                  1. 4

                                    We are hiring Devs and QA Engineers (building test infrastructure) in the Northern Atlanta area (Office is in Kennesaw). Hit me up if you’re interested in working in F#.

                                    1. 4

                                      You can translate almost any algorithmic problem into a graph modeled approach. Often this allows you to find more efficient algorithms (mostly already written by other people).

                                      1. 1

                                        I think the best docs can do is give you an intuition. Often times there are a mix of datatypes and optimizations in play that can make it super unintuitive. If you want fast code eventually you’re going to have to reach for a profiler and actually measure with differently sized inputs.

                                        1. 1

                                          This looks really cool, the quality of the talks looks amazing. I kinda want to submit but I’m afraid I won’t be able to pull together something awesome enough.

                                          1. 1

                                            I encourage you to submit something anyway! Some of my favorite talks have been about something that seemed trivial to the speaker, but that I’d never even heard of before :)

                                          1. 13

                                            This is more like architect or engineering choices, not really what you’d normally consider CTO stuff.

                                            1. 7

                                              Depends on the size of the startup. CTO can also amount to basically a team lead of a few devs, or possibly the entire dev team.

                                              1. 3

                                                Yeah, just another case of words meaning different things to different people. 👍

                                                1. 2

                                                  Then why call yourself CTO?

                                                  1. 4

                                                    When the team is 1 person, you’re t he CTO of yourself!

                                              1. 1

                                                Makes me feel frustrated to see the facebook patents license showing up again on something I’d really like to use.

                                                1. 7

                                                  Seems like a pretty language. The whole anything divided by zero is zero thing means it’s probably not great for anything math heavy as it will pave over legitimate errors.

                                                  1. 7

                                                    That seems like such a bizarre design decision - I wonder what motivated it. It’s definitely something that would’ve caught me off guard.

                                                    1. 3

                                                      Division by zero should at least be inf if not going to be an error :P

                                                      1. 2

                                                        You could easily define a division function that checks if you’re dividing by zero and emits an “exception”. (I put it in quotes because exceptions must be handled in at some point in the stack.)

                                                        So I guess if you want to do heavy math you’d do that?

                                                        1. 2

                                                          The official tutorial has a “gotcha” page for division by zero that explains their thinking a bit. It originally used a partial function that would throw an exception if you divided by zero. They later changed it to a total function that returns zero in the case of division by zero.

                                                          From a mathematical standpoint, it is very much insane. From a practical standpoint, it is very much not.

                                                          From a practical perspective, having division as a partial function is awful. You end up with code littered with trys attempting to deal with the possibility of division by zero. Even if you had asserted that your denominator was not zero, you’d still need to protect against divide by zero because, at this time, the compiler can’t detect that value dependent typing.

                                                          Here’s a recent discussion on Reddit of this decision.

                                                          To me it seems like the language makes you do something with all possible errors but when it came to actually programming that way, the authors found it exhausting. There are a lot of people that find Go’s error handling or Swift’s optional handling similarly tiresome.

                                                          1. 2

                                                            Oh geez, this really grinds my gears. I’m trying not to be nasty about this, but the only explanation of this is in a sentence that’s not finished:

                                                            Even if you had asserted that your denominator was not zero, you’d still need to protect against divide by zero because, at this time, the compiler can’t detect that value dependent typing.

                                                            It’s literally “blah blah dependent typing”!

                                                            I’m sure that they can correct this sentence to at least be grammatically correct. However, the more serious error is a philosophical one.

                                                            I call this “the map is not the territory”, which is an old idea in philosophy [1]. The type system is a MAP to the territory. The territory is your PROGRAM – i.e. its runtime behavior.

                                                            The map is supposed to HELP you with your program. In this case, they’ve got it precisely backwards: the map is making your program wrong.

                                                            You should not make your program wrong to satisfy the type system. That’s like demolishing a house because someone misprinted a map of your town. No – somewhere lives there and there are real world consequences to it.

                                                            Also, somebody else mentioned stack overflow and heap allocation failures on Reddit, which are two other things that can happen everywhere (at least in C programs).

                                                            [1] https://en.wikipedia.org/wiki/Map%E2%80%93territory_relation

                                                            1. 1

                                                              Couldn’t there be an option for the compiler inserting the checks automatically with it crashing and dumping the state into a log on a divide by zero? Anything that keeps it from running and running with potentially-bogus data.

                                                            2. 1

                                                              I think it’s an interesting idea. I wonder whether a separate coalescing division operator would be good? Or, have pony have its semantics for division by zero but supply a separate operator for traditional semantics.

                                                              1. 1

                                                                Thanks! We’d love to hear more of your thoughts. There are a lot of directions we can take the project and we want to know what the community finds interesting and useful.

                                                              1. 9

                                                                I read it a few months ago, but just a recommendation: The Phoenix Project is super good, both as a novel and as a learn-about-how-to-do-enterprise-it book.

                                                                1. 2

                                                                  Looks like fun, I just picked it up. Thanks!

                                                                1. 5

                                                                  It kind of sucks that you can’t upgrade basic things like RAM or the SSD, but I guess I kind of expect it now from laptops.

                                                                  1. 32

                                                                    When you think about it, what’s replaced and what’s repaired is kind of arbitrary. Used to be able to replace L2 cache (and I had a 386 computer where it was bad, subsequently replaced) but I don’t think many people would be happy with the performance of a system where L2 was two inches away from the CPU, and the signal timing constraints that would impose. Hell, you used to be able to replace the ferrite rings in your core memory one by one.

                                                                    What do you do if you have bad RAM? You toss the whole $100 stick, right? But that’s only one bad chip out of 16. You’re throwing away $95 in perfectly good RAM! But rarely do you see complaints about that.

                                                                    I speculate that people establish a kind of baseline based on the level of integration on their first computer, and then everything after that is damn kids on my lawn. But the irreparable integrated components in that first computer are just the natural order of things, the atomic building blocks of our computing universe.

                                                                    1. 7

                                                                      What do you do if you have bad RAM? You toss the whole $100 stick, right? But that’s only one bad chip out of 16. You’re throwing away $95 in perfectly good RAM! But rarely do you see complaints about that.

                                                                      But my screwdriver kit is at the other end of the house is so I would probably just resort to mapping it away (Windows can do this too it seems.

                                                                      Maybe I am just lazy, but a kernel argument seems like less effort :-)

                                                                      1. 2

                                                                        Oh that’s pretty neat. I didn’t know this was possible in windows. Thanks for sharing.

                                                                      2. 5

                                                                        I think there’s something to what you’re saying, but I do think IC design/integration and outer packaging design are somewhat different topics, and the latter doesn’t go as monotonically in the direction of more integration. The early ‘80s Apples were notorious for having “no user-serviceable parts” for example, but then later Macs went back to having user-serviceable parts (before going back, once again, to not having any), for reasons that didn’t have much to do with chip design in either case. And the trend of glued-together, unserviceable outer packaging goes far beyond computers, to even things like toasters, which used to be more easily repairable because you could take out the screws, fix stuff, and then put the screws back in, but now aren’t simply because of how the final assembly is done— lots of stuff across many market segments is now stamped or glued shut in a way not designed to be non-destructively opened.

                                                                        Which is not to say there aren’t good reasons for that trend too, I just think whether cases (computer or toaster) are glued/crimped vs. screwed shut isn’t quite the same question as whether L2 cache should be an independently replaceable module.

                                                                        1. 3

                                                                          I speculate that people establish a kind of baseline based on the level of integration on their first computer, and then everything after that is damn kids on my lawn.

                                                                          No, people very reasonably compare what can be easily upgraded on a modern desktop computer: CPU, RAM, and storage. One can convincingly make the argument that the cooling needs of the CPU are too complex to allow someone to just pop in whatever processor they want in the tight form factor of a laptop, but there are literally no justifications for DRAM and SSDs being chip-down except to save physical space.

                                                                          What do you do if you have bad RAM? You toss the whole $100 stick, right? But that’s only one bad chip out of 16. You’re throwing away $95 in perfectly good RAM! But rarely do you see complaints about that.

                                                                          No, you toss out the $2K computer unless you bought the extended warranty. We’re talking about design decisions that make the problem you’re describing an order of magnitude worse.

                                                                          You’re also comparing soldered components on an industry-standard form factor to components soldered to a proprietary motherboard. You can’t go to company B and buy a replacement MLB for the laptop from company A. However, you can choose whatever DIMM vendor you want when you’re replacing your faulty DIMM.

                                                                          1. 2

                                                                            No, people very reasonably compare what can be easily upgraded on a modern desktop computer: CPU, RAM, and storage.

                                                                            But what makes those the things that can be reasonably upgraded, except for the fact that they already are. Again, you’re establishing a baseline that’s simply a snapshot in time. Why isn’t it reasonable for me to expect that I can upgrade my hard drive by opening it up and dropping a new platter onto the spindle?

                                                                            1. 3

                                                                              Why isn’t it reasonable for me to expect that I can upgrade my hard drive by opening it up and dropping a new platter onto the spindle?

                                                                              Because the inside of the harddrive has to be dust free for safe operation and most consumers do not have a clean room?

                                                                              Or as in the before example, the L2 cache has to be close i.e. integrated to the CPU?

                                                                              These are actual physical limitations on the hardware and not “we glued the case shut because we wanna sell a new laptop every 2 years when before we had the newer and faster CPUs to drive sale”.

                                                                              1. 2

                                                                                But what makes those the things that can be reasonably upgraded, except for the fact that they already are.

                                                                                They inherently can be easily upgraded since the technological ability to do that at low costs exists and has been proven in actual products. A vendor doing those in a way that can’t be upgraded easily should be assumed to be doing planned obsolescence or some other predatory behavior unless they have convincing argument for why it’s beneficial to consumers. I see that argument to a degree in something ultra-small with significant energy and cost issues like mobiles. Usually in anything decent size they’re doing it for predatory reasons despite the fact they could do it differently with interchangeable stuff. Most of the different form factors that became available to many suppliers each started with a company or group of them doing the latter.

                                                                                1. 1

                                                                                  Are we talking in circles? At any given time, the market has proven that all the not yet integrated parts are viable by the very fact that they’re not yet integrated. Once upon a time this included L2 cache. Before that, when your disk drive was a dish washer, it included the platters in the drive. The market proved that upgradeable hard drive platters could exist because they did exist.

                                                                                  If you make a list of ok to integrate and not ok to integrate parts, and then I go back and ask someone from 1997 to make the same list, and then someone from 1977, I find it very improbable that I’m going to get three identical lists. So what makes the 2017 list a natural law? Why not the 1997 list? Could the 2037 list also be different, or have we reached final enlightenment and uncovered universal truth?

                                                                                  1. 3

                                                                                    L2 cache is on die to make the CPU run faster.

                                                                                    A single speck of dust would ruin a modern hard drive platter, so a normal living room isn’t a suitable place to handle and replace them.

                                                                                    The technologies in use in 1977 and 1997 were different from what we have today, so the design decisions change.

                                                                                    Why are socketed RAM and storage not present in some laptops? Because the manufacturer (and apparently many consumers) want the laptops to be lighter and thinner. There are no other benefits but many costs to this decision. Those costs ruffle prosumer feathers. You can call it “arbitrary” all day, but someone is paying those costs.

                                                                                    Why is the fuel port not on the roof of my car? Because that would be a huge pain in the ass - Like throwing away an entire laptop because my chip down SSD ran out of usable blocks faster than expected.

                                                                                2. 2

                                                                                  you’re establishing a baseline that’s simply a snapshot in time

                                                                                  Yes, I am. Today we can easily swap RAM and storage modules in laptops. We are quickly losing that ability, and the only justification is form factor.

                                                                              2. 2

                                                                                I speculate that people establish a kind of baseline based on the level of integration on their first computer

                                                                                I don’t know, I got my first computer in 1990 and it was certainly a different world. I still build my own computers for gaming, but my laptops for the past 15+ years have been pretty much 2-3 year things, maybe a RAM upgrade or HDD/SSD swap, then buy a new one. I think I’ve adjusted to how they’re built more than anything.

                                                                            1. 6

                                                                              The C# team have, for now, chosen to do the opposite of marking a variable as non-nullable; all reference types will become non-nullable by default, and you can mark the type of a variable as ‘null-safe’ by decorating them with ?, similar to nullable value types. Using a non-nullable variable that might be null (because you didn’t check if it was yet) will result in a warning, as will assigning the value of a nullable variable to one that is non-nullable.

                                                                              This is really exciting

                                                                              1. 5

                                                                                Holy moley, I wouldn’t think they would make a breaking change like that.