Threads for tobym

  1. 2

    Turing’s Cathedral mentions John von Neumann writing up “Reliable Organization of Unreliable Elements” during the process of building an electronic computer in 1951; this paper is the successor to that manuscript, building on a series of lectures on the topic at Caltech in 1952.

    A notable section from the introduction:

    “Our present treatment of error is unsatisfactory and ad hoc. It is the author’s conviction, voiced over many years, that error should be treated by thermodynamical methods and be the subject of a thermodynamical theory, as information has been by the work of L. Szilard and C.E. Shannon.”

    1. 4

      Soo… Where the hell do I go next, once Mojave is out of support? Linux laptops just don’t compare, and don’t get me started on Windows.

      1. 7

        Linux on a desktop is dirt cheap (something like 4x the performance per dollar).

        If you mostly use the laptop in two places (eg work desk and home desk), you can fit both sites with top quality desktop equipment for a fraction the price of a new macbook, and have cash left over for a chromebook or similar (for portable browsing/email).

        I only have one work location (home office), so I’m working on the fastest machine I’ve ever had, running ubuntu (24 cores, 64g ram). Best computing environment I’ve had in years.

        I miss one or two things from OSX (liceCAP, preview.app and mail.app alternatives are not as good) but having a working package manager etc is pretty great.

        1. 2

          I disagree with this. I switched to Mac originally because it was the cheapest way to get a decent spec laptop with a metal case and ssd. I don’t believe that has changed.

          1. 6

            Word 4 of my response: “Desktop”.

            I’m not aware of a good linux laptop either. My point is that for the price of a macbook pro, you can get 4 desktop machines, each of which is faster than the macbook.

            1. 1

              What about https://system76.com/ ? I’ve heard positive reviews, but am not a customer (still running an old 2013 macbook pro).

              1. 1

                I haven’t heard anything bad about them, but IME reviews for an expensive niche provider tend strongly positive since the reviewers have looked up that particular niche, so it’s hard to know.

            2. 3

              If those are your only requirements, there are other metal laptops (Razer) and otherwise well built ones (Dell XPS) with good specs. Price should be around the same (but I haven’t actually done a good comparison).

              1. 1

                My fully specced Dell Precision (Enterprise XPS with Xeon instead of i7) was almost couple thousand Euros cheaper than fully decked MacBook Pro. With addition of having 32gb ram when Macs had only 16gb maximum.

                1. 1

                  Hows the battery life? IIRC power consumption was one of the key arguments in favor of choosing laptop hardware that could only run 16gb.

                  1. 2

                    Two part answer:

                    IIRC RAM has least energy draw of all components in computer, so I didn’t give any thought on that when picking configuration. I think that “RAM drastically affects battery life” idea became from Apple marketing as answer why they don’t have more than 16gb in their machines (and nowadays they also have 32gb laptops).

                    I rarely use my work laptop (which that machine is) without peripherals, so I haven’t got too clear idea about battery life while working. But it does manage half work day (so around 3.5 - 4 hours) without problems. OTOH system I mostly develop is half a dozen “microservices” and I dev against integration tests which:

                    • run non-trivial test interactions in browser (average suite transfers 0.5 - 2.5gb data with caches enabled).
                    • there is also have heavy calculations happening in postgres and backend servers

                    So the load during those battery times haven’t been exactly light.

                    1. 1

                      IIRC RAM has least energy draw of all components in computer, so I didn’t give any thought on that when picking configuration. I think that “RAM drastically affects battery life” idea became from Apple marketing as answer why they don’t have more than 16gb in their machines (and nowadays they also have 32gb laptops).

                      By my understanding, RAM has almost no energy draw. Available motherboard chipsets capable of running more than 16gb (even if you only install 16gb in them), however…

                      Half a day is pretty good; it means you can sit in the park in good weather.

                      1. 1

                        You’re right and wrong. On a high end desktop computer a CPU can use 150+ watts. But a MacBook processor running at full power only uses ~35W, and only a couple watts idle. RAM on the other hand uses a constant amount of power, constantly refreshing memory cells as long as it’s powered on.

                        I don’t know about RAM in MacBooks, but IIRC full size DDR4 DIMMs use about 0.375W per GB. So 6W for 16GB, 12W for 32GB.

                        Assuming some casual use drawing 10W CPU power, 10+6W vs 10+12W makes a pretty big difference in battery life, that’s 37% more power. Assuming 3W / 16GB, that’s still a 23% increase in power consumption to power 32GB RAM.

                        These numbers are all approximate / from memory, but nevertheless you can see the huge difference between desktops and laptops when it comes to power economy.

            3. 1

              Exactly what I’m thinking :( Probably just install Linux

            1. 1

              Meh, doesn’t work on Firefox 68. What browser requirements does it have?

              1. 2

                Works great on Firefox 70.

                1. 2

                  This is WebGL so most incompatibilities are due to drivers. What’s your setup?

                  1. 1

                    OK, found something: It worked when I shrunk my window slightly! (Which I only discovered by trying a different browser profile.) If my window is wide enough for the canvas element to be 1463 pixels wide, I get a black screen; at 1462 and smaller, it works.

                    In fact, it seems to break at certain aspect ratios; if I have the window at 1462 width and 731 height (internal dimensions), it works, but shrinking the window vertically breaks it! That’s exactly a ratio of 2.

                    So I guess the browser requirement in effect is: Don’t make your viewport more than twice as wide as it is tall. >_>

                    1. 2

                      Weird, no matter how I resize it works fine for me. Firefox Nightly 72.0a1, latest nvidia drivers. Is anything outputed to the console?

                      1. 1

                        If I start the window square, it works, and the only console output is Google Analytics having been blocked. If I then start shrinking the window vertically, when it reaches an aspect ratio of 2 I get a screenful of these in various combinations:

                        Error: WebGL warning: texImage2D: Requested size at this level is unsupported. script.js:566:8
                        Error: WebGL warning: clear: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0Attachment has no width or height. script.js:572:8
                        Error: WebGL warning: clear: Framebuffer must be complete. script.js:572:8
                        Error: WebGL warning: drawElements: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0Attachment has no width or height. script.js:461:12
                        Error: WebGL warning: drawElements: Framebuffer must be complete. script.js:461:12
                        
                        1. 2

                          Yeah, it looks like a driver problem. It tries to complete the buffer with a texImage2D that isn’t supported by your driver/opengl setup. Or maybe it’s falling back to WebGL1 but then using features that are unavailable to WebGL1.

                  2. 1

                    Works on vimb 3.5.0 (after :set webgl=true)

                      1. 3

                        I am consistently impressed by sr.ht, and look forward to renewing.

                        1. 5

                          I like SourceHut. Until I started seeing sourcehut.org instead of sr.ht, I thought the service was called “Sir Hat,” that I thought was some funny idiosyncratic programmer named thing.

                          1. 3

                            At the open alpha release[0], sr.ht is

                            pronounced “sir hat”, or any other way you want

                            [0] https://drewdevault.com/2018/11/15/sr.ht-general-availability.html

                            1. 3

                              Thanks for this post, so I’m not crazy. I have this funny experience where I swear I read something but can’t remember the source, specifically. I don’t bookmark it because it’s not significant to me at the time, but it’s in my memory (eg, first post of minecraft beta, satoshi’s bitcoin paper, etc).

                          2. 2

                            And I’m so happy that Drew makes a point about mentioning the Mercurial support in webpage footers and other descriptions of sr.ht. We had a chat yesterday in IRC about possibly hosting some of the Mercurial project’s repos officially on sr.ht.

                            I don’t know if anything will come of it (the heptapod group might be another option), but it would be good to have a new post-bitbucket home, and this seems like a fine place to move into.

                            1. 1

                              Thank you!

                          3. 10

                            https://gitea.io if self-hosting

                            1. 5

                              These are only alternatives if you barely use any features of gitlab.

                              1. 2

                                Fair enough. There are also non-git forges like fossil and pijul, which may be better solutions for some folks.

                                But perhaps more to the point, the announcement says that self-hosting non-Enterprise GitLab users are unaffected by this new telemetry:

                                For Self-managed users: GitLab Core will continue to be free software with no changes. If you want to install your own instance of GitLab without the proprietary software being introduced as a result of this change, GitLab Community Edition (CE) remains a great option.

                                … and I suppose one could always fork GitLab Core. But if you don’t want to self-host, and you don’t want to pay for a service, you generally don’t have a lot of leverage over the business decisions made by those providing your free services.

                            1. 2

                              I recently watched the Doing with Images Makes Symbols talk by Alan Kay which speaks about the Sketchpad system. It is on youtube for anyone who would like to listen.

                              1. 2
                              1. 5

                                Visual Programming is pretty close to my heart.

                                I like how the Author sets up the article, because their initial analogy is a good exposition of how they are thinking. The torch analogy was clear because it tells me what the Author is after: they feel that a single page view of source code limits them from the overview of the program as a whole they would like a better way to navigate while keeping the entire structure of the code “in their head”.

                                This is an important problem to tackle. Modern IDE’s help with their project structure browsers and their go to definition functions, but in the end, the only way to internalize the structure of code is to repeatedly read different parts of it, following the function calls and the method imports until it is … internalized.

                                A tool that would help with this would possibly look like what the Author has, possibly look like a souped up version of the code minimap that has become fashionable in code editors, combined with better factoring of the code into well named functions and modules.

                                This is all important, but it is not Visual Programming. While one aspect of Visual Programming might be to reduce cognitive burden via the use of abstractions, a major aspect of Visual Programming is to completely abstract away things like detailed syntax into a (allegedly) more visual paradigm of wires and ports, where you wire up things because it is assumed we work more visually and

                                Input ---> [Foo] ----> [Bar] ----> Output
                                

                                is allegedly more intuitive than

                                output = bar(foo(input))
                                

                                Allegedly.

                                What the Author has is not Visual Programming with Go, but rather a visualization of Go code structure. In my mind these are distinct.

                                I know the Author is at pains to distance what they did from Call graphs and what they have here is a bit more like a Dependency Graph but this is not Visual Programming - you can not interact with the code in a way that allows you to separate yourself from syntax and replace it with a visual paradigm of dragging and dropping nodes and connections.

                                1. 3

                                  in F# we have something like let output = input |> Foo |> Bar I was skeptical how it would help at first, but not having to consider whether something is going left to right or right to left is actually not bad.

                                  1. 3

                                    Visual peogramming pushes it further. You should be able to specify flows like

                                    A
                                     \
                                      C ---> D --> E
                                     /            /
                                    B -> B' >-----
                                    
                                    1. 3

                                      Mandatory shout out to: https://luna-lang.org, which tries to make it possible to write general-purpose code both visually or textually, and insta-translate it back and forth between visual and textual representation. While being fully open-source.

                                      1. 3

                                        I can think of two examples that get close to this using normal characters.

                                        1. Racket has 2D syntax for tables (https://docs.racket-lang.org/2d/index.html)
                                        2. Akka in Scala has an ASCII syntax for describing computational graph, which is the closest to your example but doesn’t handle the vertical connectors so some node entries must be repeated (https://doc.akka.io/docs/akka/current/stream/stream-composition.html?language=scala#composing-complex-systems)
                                        1. 1

                                          That’s really cool, now I want to make ascii-art with Rust macros

                                    2. 2

                                      This is a good observation I myself totally missed; the distinction between program (and system) visualzation and undertanding, and wiring wires and ports as you say. Also somewhat related, there was a fair bit of work leading up to y2k around program comprehension tools and extracting business rules from legacy code bases. That seems to have fallen out of favor not long after.

                                    1. 1

                                      I’m kind of surprised to find there’s not a Machine Learning tag.

                                      1. 2

                                        Use the ai tag. To many people here ml is something related to Ocaml.

                                        1. 3
                                          1. 1

                                            Oh wow, dunno how I missed that one.

                                        1. 3

                                          Suggest this is also tagged video.

                                          1. 2

                                            Great suggestion! I’ve just now added the video tag. Thanks!

                                          1. 7

                                            Is there some more to the story here? I’m a bit confused as to what I’m looking at.

                                            1. 25

                                              See the comments below the commit:

                                              As far as I know, all forks of a Github repo are set up to use a sort of a “super-repository” containing all objects from all other forks. The actual forked repositories are thin repacks with alternates set to point to that “super-repo.” This allows for huge savings in disk space, because git is able to deduplicate a lot of redundant data and create efficient deltas for most commits. However, this also means that you can fork a repo, add a nasty commit to it like this one, and wait till the “super-repo” fetches it. After that happens, you are able to refer to it from any of the other forks as is demonstrated here.

                                              I missed that too the first time I clicked on the link.

                                              1. 4

                                                I wonder how long it will take for that comment to get lost in a sea of flotsam.

                                                Thanks for clearing it up for me. Since I don’t use Github, this comment is more or less the story.

                                                1. 4

                                                  GitHub renders comments in chronological order, so it’s not possible for them to be “lost in a sea of flotsam” like they can be in Reddit and its clones.

                                              2. 15

                                                Spotted originally here.

                                                Hey @github did I just get a rootkit committed into Linux, or do you have a bug in your URLs where people can make it look like code is committed to a project that they do not have commit access to?

                                                https://github.com/torvalds/linux/commit/b4061a10fc29010a610ff2b5b20160d7335e69bf

                                                Linus’ response, copied in the comments below the commit:

                                                Response from Linus:

                                                Misleading URL. Not in my tree, just using github to make it look like it.

                                                These is no actual commit ID b4061a1 in my tree, but when you pass github a SHA1, it doesn’t do any reachability analysis whether that actually exists in the named tree, so it uses a completely unrelated commit from somebody elses tree on github.

                                                1. 3

                                                  Its just the gihub UI, you can look at commits from forks through a url/ui that belongs to the “main” repository.

                                                  I think examples like this pop up every other year, but I can’t find any references.

                                                1. 11
                                                  1. Hybrid Logical Clocks: By making a reasonable assumption such as “hardware clocks will be periodically synchronized”, this paper introduces a really nice and practical logical clock that can also be used as a physical clock in order to partially order events in a distributed system.
                                                  2. Delta-state CRDTs: This paper provides an optimization over state-based CRDTs, as well as a unifying abstraction allowing for the composition of multiple types of CRDT. There are also some really nice optimizations.
                                                  3. Thicket, a protocol for maintaining multiple spanning trees for broadcast in a P2P system. The protocol uses multiple trees in order to balance the number of times a peer is a non-leaf node of a spanning tree, thereby evenly spreading the cost of forwarding messages.
                                                  1. 4

                                                    Corrected link for Thicket.

                                                    1. 2

                                                      Thank you! Updated :)

                                                  1. 8

                                                    In the interest of having fewer tags rather than many, I think “algorithms” is really a subset of “compsci”.

                                                    1. 8

                                                      The lack of degree might get you filtered out in large automated screens. Have you tried going to relevant meetups? They are often filled with people from companies wanting to hire. Also, smaller companies might care less about formal degrees than larger ones. Finally, make sure you have a current side project going to show that you have been active since the lay-off; this will go a long way in the eyes of a hiring manager who might otherwise see an employment gap as a big risk.

                                                      1. 4

                                                        House of Leaves by Mark Z. Danielewski (fiction), and Traction by Gabriel Weinberg and Justin Mares (non-fiction). Just completed On the Shortness of Life, On the Happy Life, and Other Essays (Essays, #1) by Seneca.

                                                        1. 31

                                                          I thought this was going to be about small websites, in the sense of individuals putting together a non-commercial, unmonetized page to talk about the things that they enjoy on the public internet. Gems like stormthewalls.dhs.org, or hovercrafter.com. This kind of site seemed to be everwhere in the 90s through the late 2000s, but they seem to have retreated behind walled gardens, or gotten squeezed out of search results by large commercial pages with far worse content. They’re run by hobbyists, and can’t compete with SEO.

                                                          I miss them.

                                                          1. 3

                                                            That’s what I was expecting to and was sorely disappointed to see it was not that.

                                                            1. 1

                                                              likewise. i would have loved to read that article, and the lobsters discussion around it.

                                                            2. 1

                                                              https://neocities.org/browse turns up fun stuff like that sometimes.

                                                            1. 1

                                                              Congratulations on moving to public alpha! I just signed up to support the project. Big fan of the user-supported model and the licensing model.

                                                              1. 1

                                                                Thank you! I hope you like it, please send along your feedback as it comes!

                                                              1. 4

                                                                Great to see that data get used. One question I had after skimming the paper: how much of this performance improvement do you attribute to Noria’s data-flow computation? One of the frustrations comparing these things is that MySQL has a lot of features that Noria presumably doesn’t, makes it sort of apples-and-oranges. But I really like this model of incremental computation, I see it as a larger popular trend in programming tools.

                                                                1. 3

                                                                  Hmm, I’m not entirely sure I understand the question, but I think maybe there’s a misunderstanding about how the system works. Most of the performance improvement in Noria is due to the fact that basically all SELECTs are now direct cache hits. The data-flow is just the way that we ensure that the results for those SELECT queries remain updated as the underlying data changes (e.g., as new votes are added). This design basically decouples the performance of reads and writes: reads are always fast, and the write throughput is determined by how many things the write touches; we’re nowhere near the limit of how many reads per second we could do for the lobsters queries (see the vote results). As queries get more complicated (and again, we can support all the queries in the lobsters source code), reads do not get any slower, only writes do. It is true that now the writes are slower, but they are also rarer. In the Lobsters workload at the moment, the biggest bottleneck is the write path for updates to read_ribbons, and that’s what’s preventing us from scaling beyond 5x MySQL. Sharding that write path may be the way to resolve that issue down the line.

                                                                  As for feature parity, I don’t know exactly what you’re referencing? Is there a particular feature you’re worried about Noria not having that you rely on for MySQL? Not sure if it came across in the paper, but you can take unmodified applications that just use mysql client libraries and just plug’n’play them with Noria. At least that’s the idea modulo our SQL parser and query planner still not being quite as mature as MySQL’s.

                                                                  1. 4

                                                                    So Noria maintains materialized views, sort of like flexviews but with automatic refreshing or like pipelinedb but base data is permanent (table) rather than ephemeral (stream). Also reminds me somewhat of ksql. And since it is the database, the application doesn’t need to handle complicated and error-prone cache invalidation (e.g. in the typical MySQL + memcache scenario). Pretty neat!

                                                                    I had the same question about apples-to-oranges comparison though. For example, transaction support, foreign keys, different index types, triggers, rocksdb vs innodb implications.

                                                                    1. 3

                                                                      Yup, you are totally right that there are features of more traditional databases that we do not yet support. This is still a research prototype, so it’s focused on the research problems first and foremost. We don’t believe any of those additional features to be fundamentally impossible in the Noria paradigm though — for example, we’re designing a scheme for adding transactions, and we believe we can do it without adding much overhead to query execution in the common case!

                                                                      Some of these other features are also really optimization details. For instance, since Noria knows the application’s queries, it could automatically choose indexes that fit the query load (even though currently it only uses hash indexes). Similarly, RocksDB vs InnoDB shouldn’t matter to the application. We use RocksDB only for storing the base table data, not for storing anything else, so it’s mostly just there for persistence, and rarely affects performance.

                                                                      As for foreign keys and triggers, those should be pretty easy to add, and mostly just need engineering, not research. In a sense, triggers are really just additional operators in the graph, so they’re almost a non-feature in Noria.

                                                                      1. 3

                                                                        You may also find the discussion on Reddit interesting.

                                                                      2. 2

                                                                        My question isn’t about how the system works, it’s about the breadth of MySQL, which pays a performance cost for lots of features I presume Noria doesn’t have. Multi-master setups, sharding, charset collations, many more data types, support for at least five operating systems, date and time functions, multiple storage formats, a million things. Even if Lobsters doesn’t use them, some of those are going to result in conditionals on the hot path to serving even very simple, performant queries like select * from users where id = 123 and account for some of the performance difference. I say it’s sort of an apples-and-oranges comparison because Noria and MySQL have such different featuresets - if it were possible to compile a version of MySQL that dropped support for every feature Lobsters doesn’t use, I wonder if that wouldn’t be in the neighborhood of 5x faster. I have so little intuition for it I wouldn’t be surprised at 1.01x or 20x.

                                                                        Edit: ah, and after I hit post I reloaded the page to see @tobym made this point and you already responded to it. I’ll check out the reddit link. :)

                                                                        1. 3

                                                                          In addition to my response to @tobym, let me try to address some of your specific concerns too. First, Noria already supports multi-machine distribution and sharding, and replication is already nearly done. Noria is also more flexible than MySQL in its data types, since it doesn’t have strict column typing. If we did apply the same schema strictness as MySQL, that would improve our performance, since we could specialize data-structures to known types. While it is true that we don’t support as many data types as MySQL, adding news ones is pretty straightforward, and we already support quite a few. Similarly, adding date and time functions should be straightforward – they are just new projection and filter operations. Noria should also run without modifications on Linux, macOS, and Windows.

                                                                          As for multiple storage formats, Noria is, in a sense, arguing that you as the developer shouldn’t have to think about that. You should tell the database what your queries are, and it should determine how best to persist and cache the data and the query results. Are there particular features associated with the storage systems that you had in mind?

                                                                          You are right though that MySQL does more than Noria does, and that that adds overheads that Noria does not have in some cases. However, most of Noria’s performance advantage comes from the model — computing on write instead of read — as opposed to implementation. MySQL fundamentally has to compute things on reads, whereas Noria does not, and with most operations being reads, that translates to speed-ups that MySQL cannot recover. It would be great to disable lots of MySQL features, but it is unlikely to change the picture much due to this fundamental design difference.

                                                                          The one exception to this is transactions: it could be that transactions are just so expensive to provide, that the MySQL was is just way faster than anything you could achieve in the Noria paradigm. We don’t believe this to be the case though, as we already have a design sketch that adds transactions and strongly consistent reads to Noria while introducing nearly no overhead in the common case.

                                                                    1. 16

                                                                      As a junior developer doing my best to learn as much as I can, both technically and in terms of engineering maturity, I’d love to hear what some of the veterans here have found useful in their own careers for getting the most out of their jobs, projects, and time.

                                                                      Anything from specific techniques as in this post to general mindset and approach would be most welcome.

                                                                      1. 36

                                                                        Several essentials have made a disproportionate benefit on my career. In no order:

                                                                        • find a job with lots of flexibility and challenging work
                                                                        • find a job where your coworkers continuously improve themselves as much (or more) than you
                                                                        • start writing a monthly blog of things you learn and have strong opinions on
                                                                        • learn to be political (it’ll help you stay with good challenging work). Being political isn’t slimy, it is wise. Be confident in this.
                                                                        • read programming books/blogs and develop a strong philosophy
                                                                        • start a habit of programming to learn for 15 minutes a day, every day
                                                                        • come to terms with the fact that you will see a diminishing return on new programing skills, and an increasing return on “doing the correct/fastest thing” skills. (e.g. knowing what to work on, knowing what corners to cut, knowing how to communicate with business people so you only solve their problems and not just chase their imagined solutions, etc). Lean into this, and practice this skill as often as you can.

                                                                        These have had an immense effect on my abilities. They’ve helped me navigate away from burnout and cultivated a strong intrinsic motivation that has lasted over ten years.

                                                                        1. 5

                                                                          Thank you for these suggestions!

                                                                          Would you mind expanding on the ‘be political’ point? Do you mean to be involved in the ‘organizational politics’ where you work? Or in terms of advocating for your own advancement, ensuring that you properly get credit for what you work on, etc?

                                                                          1. 14

                                                                            Being political is all about everything that happens outside the editor. Working with people, “managing up”, figuring out the “real requirements’, those are all political.

                                                                            Being political is always ensuring you do one-on-ones, because employees who do them are more likely to get higher raises. It’s understanding that marketing is often reality, and you are your only marketing department.

                                                                            This doesn’t mean put anyone else down, but be your best you, and make sure decision makers know it.

                                                                            1. 12

                                                                              Basically, politics means having visibility in the company and making sure you’re managing your reputation and image.

                                                                              A few more random bits:

                                                                          2. 1

                                                                            start a habit of programming to learn for 15 minutes a day, every day

                                                                            Can you give an example? So many days I sit down after work or before in front of my computer. I want to do something, but my mind is like, “What should I program right now?”

                                                                            As you can probably guess nothing gets programmed. Sigh. I’m hopeless.

                                                                            1. 1

                                                                              Having a plan before you sit down is crucial. If you sit and putter, you’ll not actually improve, you’ll do what’s easy.

                                                                              I love courses and books. I also love picking a topic to research and writing about it.

                                                                              Some of my favorite courses:

                                                                              1. 2

                                                                                I’ve actually started SICP and even bought the hard copy a couple weeks ago. I’ve read the first chapter and started the problems. I’m on 1.11 at the moment. I also started the Stanford 193P course as something a bit easier and “fun” to keep variety.

                                                                          3. 14

                                                                            One thing that I’ve applied in my career is that saying, “never be the smartest person in the room.” When things get too easy/routine, I try to switch roles. I’ve been lucky enough to work at a small company that grew very big, so I had the opportunity to work on a variety of things; backend services, desktop clients, mobile clients, embedded libraries. I was very scared every time I asked, because I felt like I was in over my head. I guess change is always a bit scary. But every time, it put some fun back into my job, and I learned a lot from working with people with entirely different skill sets and expertise.

                                                                            1. 11

                                                                              I don’t have much experience either but to me the best choice that I felt in the last year was stop worrying about how good a programmer I was and focus on how to enjoy life.

                                                                              We have one life don’t let anxieties come into play, even if you intellectually think working more should help you.

                                                                              1. 9

                                                                                This isn’t exactly what you’re asking for, but, something to consider. Someone who knows how to code reasonably well and something else are more valuable than someone who just codes. You become less interchangeable, and therefore less replaceable. There’s tons of work that people who purely code don’t want to do, but find very valuable. For me, that’s documentation. I got my current job because people love having docs, but hate writing docs. I’ve never found myself without multiple options every time I’ve ever looked for work. I know someone else who did this, but it was “be fluent In Japanese.” Japanese companies love people who are bilingual with English. It made his resume stand out.

                                                                                1. 1

                                                                                  . I got my current job because people love having docs, but hate writing docs.

                                                                                  Your greatest skill in my eyes is how you interact with people online as a community lead. You have a great style for it. Docs are certainly important, too. I’d have guessed they hired you for the first set of skills rather than docs, though. So, that’s a surprise for me. Did you use one to pivot into the other or what?

                                                                                  1. 7

                                                                                    Thanks. It’s been a long road; I used to be a pretty major asshole to be honest.

                                                                                    My job description is 100% docs. The community stuff is just a thing I do. It’s not a part of my deliverables at all. I’ve just been commenting on the internet for a very long time; I had a five digit slashdot ID, etc etc. Writing comments on tech-oriented forums is just a part of who I am at this point.

                                                                                    1. 2

                                                                                      Wow. Double unexpected. Thanks for the details. :)

                                                                                2. 7

                                                                                  Four things:

                                                                                  1. People will remember you for your big projects (whether successful or not) as well as tiny projects that scratch an itch. Make room for the tiny fixes that are bothering everyone; the resulting lift in mood will energize the whole team. I once had a very senior engineer tell me my entire business trip to Paris was worth it because I made a one-line git fix to a CI system that was bothering the team out there. A cron job I wrote in an afternoon at an internship ended up dwarfing my ‘real’ project in terms of usefulness to the company and won me extra contract work after the internship ended.

                                                                                  2. Pay attention to the people who are effective at ‘leaving their work at work.’ The people best able to handle the persistent, creeping stress of knowledge work are the ones who transform as soon as the workday is done. It’s helpful to see this in person, especially seeing a deeply frustrated person stand up and cheerfully go “okay! That’ll have to wait for tomorrow.” Trust that your subconscious will take care of any lingering hard problems, and learn to be okay leaving a work in progress to enjoy yourself.

                                                                                  3. Having a variety of backgrounds is extremely useful for an engineering team. I studied electrical engineering in college and the resulting knowledge of probability and signal processing helped me in environments where the rest of the team had a more traditional CS background. This applies to backgrounds in fields outside engineering as well: art, history, literature, etc will give you different perspectives and abilities that you can use to your advantage. I once saw a presentation about using art critique principles to guide your code reviews. Inspiration can come from anywhere; the more viewpoints you have in your toolbelt the better.

                                                                                  4. Learn about the concept of the ‘asshole filter’ (safe for work). In a nutshell, if you give people who violate your boundaries special treatment (e.g. a coworker who texts you on your vacation to fix a noncritical problem gets their problem fixed) then you are training people to violate your boundaries. You need to make sure that people who do things ‘the right way’ (in this case, waiting for when you get back or finding someone else to fix it) get priority, so that over time people you train people to respect you and your boundaries.

                                                                                  1. 3

                                                                                    I once saw a presentation about using art critique principles to guide your code reviews. Inspiration can come from anywhere; the more viewpoints you have in your toolbelt the better.

                                                                                    The methodology from that talk is here: http://codecrit.com/methodology.html

                                                                                    I would change “If the code doesn’t work, we shouldn’t be reviewing it”. There is a place for code review of not-done work, of the form “this is the direction I’m starting to go in…what do you think”. This can save a lot of wasted effort.

                                                                                  2. 3

                                                                                    The biggest mistake I see junior (and senior) developers make is key mashing. Slow down, understand a problem, untangle the dependent systems, and don’t just guess at what the problem is. Read the code, understand it. Read the code of the underlying systems that you’re interacting with, and understand it. Only then, make an attempt at fixing the bug.

                                                                                    Stabs in the dark are easy. They may even work around problems. But clean, correct, and easy to understand fixes require understanding.

                                                                                    1. 3

                                                                                      Another thing that helps is the willingness to dig into something you’re obsessed with even if it is deemed not super important by everyone around you. eg. if you find a library / language / project you find fun and seem to get obsessed with, that’s great, keep going at it and don’t let the existential “should i be here” or other “is everyone around me doing this too / recommending this” questions slow you down. You’ll probably get on some interesting adventures.

                                                                                      1. 3

                                                                                        Never pass up a chance to be social with your team/other coworkers. Those relationships you build can benefit you as much as your work output.

                                                                                        (This doesn’t mean you compromise your values in any way, of course. But the social element is vitally important!)

                                                                                      1. 1

                                                                                        This really misses the most obvious argument for using Docker: because it’s easy.

                                                                                        It’s really as simple as that. It saves me time, and I spend that time doing more useful things.

                                                                                        1. 2

                                                                                          The author contrasts “easy” and “simple”, agreeing that Docker may be easy but it doesn’t simplify things. (Inspired by Rich Hickey’s talk https://www.infoq.com/presentations/Simple-Made-Easy which I highly recommend).

                                                                                          1. 2

                                                                                            account suspended. what was that?

                                                                                            1. 4

                                                                                              The tweet was two screenshots.

                                                                                              One of Twitter user @KrangTNelson tweeting (paraphrased) “No thanks, I only get my crypto tips from the guy who made garfield”.

                                                                                              The second was a screenshot of Scott Adams Twitter account showing he had blocked Krang.

                                                                                              No idea why Krang was banned.

                                                                                              1. 1

                                                                                                Best guess is a parody tweet promising “antifa super-soldiers” on November 4th, which some strange people took seriously and complained about. His account’s been restored.

                                                                                            1. 1

                                                                                              I find e/E, b/B very quick, often better then f/F because there’s no need to pick a letter to jump to.