1. 24

The audience here is primarily technical, so I think this could be a good place to start this discussion.

I’m curious how do you decide what to learn next? Let’s say you’re a developer and you don’t want to move away from writing code. But at the same time you don’t want to become a dinosaur either.

I know “next” is a broad term and could involve anything. It could be a new programming language, or a new domain (ML, crypto, VR, …), or a tangential skill like writing, or something else completely.

What I’m more interested in knowing is the thought process there (if any). How do you figure something like this out, given you would ideally also like to align that with the path you want your career to take?


  2. 11

    How do you figure something like this out, given you would ideally also like to align that with the path you want your career to take?

    Learn what’s interesting to you, and your career will end up bending towards that.

    1. 2

      I think there is a larger question. What if one stops being passionate about programming (though still enjoy doing it as requested at work)?

      1. 1

        I don’t think this advice requires you code 24/7 for fun, just that you have some preferences.

        1. 1

          Then learn to knit, or build model trains, or do political organizing, or whatever. You’re going to build skills whatever you learn, and your character will slowly change, too. Maybe those skills will be broadly translatable to your career (planning/estimation, design/architecture, communication/leadership), maybe not.

          But being happy in your non-work life will definitely impact your career. And new interests will, if nothing else, lead to new perspectives on both your existing problems and on future possible career paths.

        2. 1

          That also works in reverse: Avoid learning something where you don’t want your career to go. At least be quiet about it.

        3. 9

          What are your principles?

          What are your values?

          What quality attributes do you universally value in any system you produce or consume?

          Now, given these, what technologies enable you to observe your principles, explore your values, and build systems that are pleasing to you and those who share your values?

          1. 1

            Agreed! Have you been watching @bcantrill ’s most recent talks?

            1. 1

              I’ve not caught any since his talk from Uptime 2017. Got some links you recommend?

              1. 3

                I think he started talking about principles with Principles of Technology Leadership but has been more tech focused in Scale By The Bay 2018: Bryan Cantrill, Rust and Other Interesting Things. There might be some others but the second one has some interesting thoughts related to your questions.

          2. 9

            It depends on your goal. These days I learn technologies mostly in sake of escapism, not for career growth, so I wouldn’t learn GraphQL on Kubernetes serving AMP pages; “non-practical” things like primitive gamedev, retrocomputing, reversing old games and basics of microcontrollers give me more consolation.

            1. 3

              Same here, that’s why I’m learning Common Lisp right now.

            2. 7

              Find a gap in my knowledge about fundamentals and fill in the gap. Type theories were magic to me for a long time so filling in the gap with “Type Theory and Formal Proof” + “Software Foundations”. Pursuing hype trains ends up being a bad investment in the long run so I look for fundamental theoretical topics that will outlast any hype train.

              1. 2

                It’s a balancing act between what you need to learn to further your career, and what you need to learn based on your personal goals.

                Professional Learning: Your work would provide you enough opportunities to learn things that you directly use. If the place your work at uses a certain database, it would be well worth your effort to invest time in understanding how it works internally.

                Personal Learning: Unless there is a lot of overlap, you may not be able to learn much from this category on company time. If you like Programming Languages, you might want to try your hand at writing a toy interpreter.

                Say you have N units of time per week to spend on learning, you can split it between the above two in whatever way you feel is best.

                A good blend of the above two will ensure that you stay relevant in your industry, and also provide you with enough entertainment learning for learning’s sake. Ideally, both these forms of learning will feed into and perhaps even morph into each other in a way that is both enjoyable and (professionally) educational.

                1. 2

                  A bit cliché, but find something you want to do and start learning how to do it - in your case, you could then “force” yourself to solve problems using bleeding-edge technology or something tried-and-true you don’t know yet, as a way to keep yourself relevant. Having a broad hobby project (developing a game, setting up a full stack service, running a meetup, etc.) will most likely expand your skill set more than sitting down and focusing on one thing.

                  Personally, I don’t think knowing X or Y will make or break you, if you are otherwise a smart, curious person. But of course, learning specific skill sets will make you attractive to specific jobs, where you can hit the ground running.

                  1. 2

                    Generally speaking, I keep learning materials on languages or algorithms open in my browser at all times. If I need to shift focus for a while, I pick one at random & read it until I get bored.

                    It is very important to me that this kind of learning is not career-oriented or career development. Focusing on what I expect to be useful forces me into the same kind of groupthink as my peers, & ultimately makes that learning less useful in my career. The most useful things to know are the things that nobody could reasonably expect would be worth knowing – because they’re the things that nobody else has gone out of their way to learn.

                    1. 2

                      You have to have some simplifying function. Tech is a huge field.

                      When I first got started, my goal was to go where the money was. That was a good goal: it took me to a bunch of places where there was a lot of cool stuff going on. Later on I changed to going where I could help developers. Not as good of a goal as far as finding work, but more personally-rewarding.

                      Assuming you’re after money and finding work, I’d go crypto/ML/AI, with an emphasis on lightweight DevOps. You always have to match two rare things that usually don’t go together. Crypto/ML is the thing everybody is going to do. DevOps addresses a need that every corp has. Combining the two gives you something cool to share in a way that corps will need.

                      1. 1

                        I’m curious how do you decide what to learn next?

                        What I’m more interested in knowing is the thought process there (if any). How do you figure something like this out, given you would ideally also like to align that with the path you want your career to take?

                        I have a few systems and goals that I yearn to bring into existence. For almost two years I’ve been working on one such system (It’s mentioned in my profile.), mostly design and whatnot influenced by implementation of it, and I have a later system that can be helped by this that I intend to start on next.

                        So, it’s fair for me to write that I decided on a few major goals, roughly organized them, and have started down that path obsessively. This does still lead to unexpected turns, as I’ve written several libraries for this and I’m currently learning Ada in part to create a better and simpler reimplementation distinct from the first language I used, which will have me writing more libraries for that language.

                        I figure these plans and wants extend at least five years or so into the future, but I also have things of lesser importance I can pick from and these interact in ways that inevitably lead to yet more ideas and you get the gist by now.

                        1. 1

                          There are always a bunch of interesting things to learn. However, your available time for study is not infinite. Therefore, I weigh in two factors:

                          • What can fit into my available time slot
                          • What can fit into what my employer already does.

                          Example: I work for an AI/ML company. I have very limited knowledge of AI, but now have access to developers with vast knowledge of the field. I do not expect that I will know what they know, but I do expect to gain some practical knowledge and theory to the point my mathematics can help.

                          1. 1

                            Although it sort of echoes what has previously been written, I have a few subjects that I find interesting which I don’t get to do in my day job, which is a mix between setting up the hardware registers on a 16 bitter, writing C in an about 20 year old code base that has never properly been maintained and culled of unused things and doing java for desktop applications.

                            At the moment I’m playing around with building a mutation tester, which I came up with, because I wanted to refresh my knowledge of the CLR/CIL and play with Roslyn (The C# compiler)

                            I have previously build boring Line Of Business applications / Text editors, to learn about the design patterns that Uncle Bob and The Gang of Four have described, as I often feel that the books are lacking the offending examples that leads to the fact that the patterns are better.

                            Of course none of this really aligns with where I want my career to go, I think, but a lot of career is coincidental anyway as I see it. An opportunity may present itself, and then it matters more to be adaptive and able to learn as you go, which is a skill you will have trained by doing things and concentrating about them.

                            It became a bit rambling, but I hope it answers your question.

                            1. 1

                              For me determining what to learn next is determined by a slider with “Interest” on one end and “Market Demand” on the other.

                              I realize a lot of people will say FOLLOW YOUR DREAMS, and by all means, yes do that! But also consider figuring out what skills are marketable so you can stay employed if that’s a goal of yours.

                              Right now as an example I’m teaching myself C++. The slider is definitely trending more towards “Interest” on this one, although I’ve heard it said that learning a new programming language can also boost your skill in languages you’re much more familiar with, and I’m definitely finding that to be the case with my Python day job.

                              1. 1

                                I’m sort of a goal driven person. Since I have a list of things that I want to make that haven’t been created yet I have to spend my time learning what I’m missing. I don’t particularly care for anything else besides history or languages outside of that so. It’s a purely practical approach that makes me wonder if I’m missing anything but as far as I can tell it’s ok so far.

                                1. 1

                                  One factor to consider is stability. I imagine that my stock of marketable knowledge has some mass. I add to it when I learn. Knowledge erodes as I forget, and rots when it become obsolete.

                                  Some knowledge rots faster than others. Eg, everything I’ve ever learned about relational databases, algorithms, and Unix tools is still applicable. Most of what I learned about frontend development 10 years ago is obsolete.

                                  So you can look at a topic in risk / reward terms. How likely is this knowledge to become useless (risk)? How likely to become lucrative (reward)? Of course, there’s guesswork involved. But having judged that, you can pick based on how much time you have to invest in learning, and how much knowledge you can afford to lose. And you might diversify your investments.

                                  1. 1

                                    Is this about the problem that you want to be a programmer until you retire? I’ve heard it is hard to stay a programmer in your forties and not switch to management.

                                    That would probably mean that you want to become an expert for something. If you are extroverted you should probably blog, give talks, and write books. If you are more introverted then choose a solid technology where companies will still need experts in 20 years, like C++, Java, SQL, COBOL, Fortran, etc.

                                    If you are looking for something interesting what could be next after ML/Crypto/VR, I believe formal methods could reach a tipping point in the next decade. TLA+ or Agda or Ada SPARK maybe. There will be more “proof engineers” in the future.