1. 39



  2. 8

    Wonderful talk. Considering I use both Node and Go the first bit was hard to take, but totally understandable. I have often met professional programmers that don’t really care about how anything they use actually works. As you said, the only way to really learn is to forge ahead and attempt an understanding of whatever’s inner-workings.

    1. 4

      A good way to learn, which schools seem to mostly ignore, is to repair something which is broken. I guess they assume you will come across enough of your own bugs, but guaranteeing that the students see certain kinds of failure is useful for making specific points and showing specific interactions.

      Plus, the detective mentality is useful on its own and should be fostered wherever possible.

      1. 6

        My favorite programming course in school was Software Engineering 2.

        The first SE course introduced us to working as a team, using version control, unit testing, and documenting our work. But we got to do all this while starting from scratch, which is an uncommon luxury.

        The second SE course was centered around refactoring. Every team was provided a particularly bad SE1 project from a few years back. Ours was a checkers app written in Java with Swing. The code was just awful. Instead of matrix or even a 1D array, the authors had created individual JButtons 1 through 64 for the main gameboard. Buttons were their own ActionListeners. It was a dumpster fire.

        The challenge of the SE2 project was that you could only refactor some of the app. You weren’t allowed to throw the whole thing away and start from scratch. Plus, bad as the code was, it did work.

        We ended up using the newly learned Adapter and Proxy patterns to add multiplayer support to the app. It was pretty fun! And my earliest taste of what actual programming work is like.

        1. 2

          Back when I was in Uni, our department (mechanical physics) sometimes received crank letters with over-unity devices, etc. I thought it would be fun to have a question in a test to determine why such a device wouldn’t work.

        2. 1

          I have often met professional programmers that don’t really care about how anything they use actually works.

          Do you meet the other kind at all? I tend to use sentences starting with “I have often met” for things like not liking triply-nested expressions. For not caring about how dependencies work, the situation seems bad enough that I tend to say: “I’ve heard in distant lands of the odd savant who understands some internals of their dependencies more often than not, but of course everyone can’t hope to meet such a person themselves.”

          At best I meet people who understand the internals of some single project that they are active with the community of. But while they may have poked around inside Vim, they’d know nothing about their network stack or browser or compiler.

          This assumption is kinda central to my life, so if I’ve just been really unlucky I’d really appreciate pointers on where to find such people.

          1. 2

            The risk of a deep understanding of an entire stack is the switching cost: what happens when that library falls out of fashion, the new company only uses X, or you switch to a new language to keep up with the changing times. In my short career I’ve gone through:

            • Windows XP+Vim+Perl
            • RedHat+Emacs+PHP
            • Windows 7+Eclipse+Java
            • Suse+ZendStudio+PHP
            • Windows XP+VS+VB.NET
            • Windows Server 2012+Rider+C#+F#+Vim+Java+Js

            That’s an incredible amount of memorization just for language and library basics. I suspect I’m lower than the average. I don’t think it’s humanly possible for me to dive deep on all those things and still get work done. I also don’t have any motivation to try when it’s just as likely my next job will be in OpenBSD Klingon edition.

            1. 2

              I currently work with a really awesome lead programmer that pushes understanding rather than spouting meaningless platitudes. Still, teaching is a challenge. Things are easier for her to grasp, and her code reviews lean toward style more often than not. Nevertheless, I feel like I’ve improved professionally by seeing her work and speaking to her.

              Whereas, at my previous job I had a coworker that was a “lead” in the business for nearly 10 years. I really don’t think he could code a loop on the fly. It was strange. It was depressing. Yet, he has survived by being one of those programmers that can’t program. It was not something I wanted to grow into. I’m glad I have the pleasure of working with people that seek to build maintainable codebases. Add to that the fact that they also desire to understand how the tools they use work.

          2. 13


            Lots of good and funny stuff in this video. I gotta smash one point, though.

            “consider it a moral imperative to live up to the economic value we’re extracting out of the companies we work at”

            Heck no, we shouldn’t! They don’t operate on any such morals. Their value is to get more while giving less in every deal they can. If that’s our system, then we should be doing the same. People wanting more morality should be working for increasing regulations or liability in reasonable ways in Washington. You know: arguing and lobbying to change the system like the rich and powerful software companies did to get their power and money. Alternatively, working at a non-profit or public benefit company that is legally required to produce benefits for the public. Being moral in dealings with such an organization would make sense. Focusing on utilitarianism with average company doing capitalism is like always doing the share option when opponents might steal in Golden Balls.


            Your later anecdote on Apple salaries is a good example. The company is screwing them over because it can. The company will market itself in such a way to convince people to work at that rate anyway. It’s acting solely in its self interest to maximize profit. Developers should do so, too, which should reduce the number of smart developers that work there. The companies might even respond to this by increasing pay or other perks/benefits as a differentiator. Some do this to a degree.

            “how many of you have the title ‘software engineer?’ How many of you are lying?”

            Probably all of them unless some Galois or Altran/Praxis people showed up. I know both have people doing formal methods in real-world software. Maybe if some from safety-critical industry (esp DO-178C) showed up we count them, too. Nancy Levison’s Safeware and those following such things come to mind. Those have to be systematic about correctness of design, implementation, and documentation. Maybe count people doing apps in logic, programming paradigm encoding all their assumptions, too. These are examples of kinds of people who might be called software engineers.

            Here’s what such processes look like:





            Most so-called “software engineers” can neither do that nor afford to try given the constraints of their work environment. Cleanroom and Design-by-Contract can often work cost-effectively but employers don’t care enough to push stuff like that for reasons in your talk. Assuming they’ve done enough research to even know they exist which is another problem in our immature profession. In any case, I knew the software profession was a joke by engineering standards when I saw actual software engineering like above done with its associated reduction in defects in development and maintenance phases. Developers don’t deserve to be called engineers except the rare, rare, rare few doing engineering.

            That doesn’t mean what they’re doing is necessarily bad given one should always do what works best in given environment. Develop, review, and test cycle with practice seems to allow us to write “good enough” software in general case. It’s just not engineering. We might create meaningful changes in market supply of developers vs engineers at different price points and process/tooling standards if we first get rid of the lie that the former are doing engineering.

            “medical professionals have to do for continuing education”

            I can confirm even tracking all the stuff in software assurance is by itself a lot of work. Then, there’s all the other sub-fields covering various attributes of software development. I track some of them. It’s like CompSci version of continuing education. Then, there should also be an expectation of trying to solve new types of problems with new tools to expand one’s mind. I support a CE paradigm for software engineers if we’re to use the label.

            1. 2

              They don’t operate on any such morals.

              The employer-employee relationship has nothing to do with what I’m talking about. I’m an advocate of programmers working from as strong a bargaining position as possible and of discussing salaries. The scope is broader but I didn’t want to stray too far from the core message in the talk.

              “how many of you have the title ‘software engineer?’ How many of you are lying?”

              Probably all of them

              Yes, that’s my point.

              Most so-called “software engineers” can neither do that nor afford to try given the constraints of their work environment.

              Which is why I want to grapple with those limitations by strengthening our economic position so that we can push back on strong managerial time preference but also improve how we work so that it’s more economic to Do The Right Thing.

              I can confirm even tracking all the stuff in software assurance is by itself a lot of work.

              I’m glad you’re tracking these fields but very few programmers are. Most I run into are struggling with whether to use Angular 2, Vue, or React.js.

              Glad you liked the talk, thank you for adding your thoughts. I think it does a lot of good to share how formal methods is being developed and applied.

              1. 1

                Oh, OK. Do you have another write-up on what you were talking about regarding employees giving their money’s worth and bargaining?

                1. 1

                  Not as a blog post, usually something I discuss with programmers interpersonally.

            2. 6

              While I love a “get off my lawn” talk as the next guy, this one had parts that really ground my gears. Are we paid too much? Hell no! Programmer salaries have been flat for 17 years. Do we extract more from employers than they are getting from us? Hell no! If that was true, these large software companies wouldn’t make a profit. Programming IS HARD, demands intense mental effort and usually insane amounts of time. The real issue is that programming hasn’t matured into a real profession yet. We don’t join professional organizations (I’m the only one I know who has an ACM membership), We don’t unionize. We don’t have a dress code where someone looks at you and says “I should take them seriously” (Maybe the hoodie is the uniform?). We need to take each other seriously so that others can too.

              1. 2

                It turns out the URL in the description is not for video linked from the heading. I was quite confused for a while there.

                1. 3

                  Wondered when somebody would trip over the easter egg, sorry :)

                  1. 2

                    Once I figured out what had happened, I was amused, so no worries. :)

                    1. 1

                      I did and came back to the Lobster link thinking that there must be more to listen to. Great one indeed ;)

                  2. 1

                    @bitemyapp The talk seemed to end rather abruptly, at least as shown in the Youtube video. Was that intentional, or just a consequence of something at the conference?

                    1. 1

                      I didn’t have a well formed coda beyond the exhortation that had preceded, so that was just where it ended, sorry :\