What novel thing should I learn next that will enhance my capability as a senior engineer? Or open to my eyes to things that I haven’t considered till now?
I realize this is a vague request but was just wondering if there were other people with the same dilemma.
Thanks in advance!
Learn basic statistics. Apply it to performance testing, system modeling.
Build off your knowledge of logic programming -- learn a formal verification language like SMTLIBv2 or TLA+. Apply it to find bugs in code, or to clearly write out algorithm or system designs.
Learn C++ or Rust, and use it to write performant systems code -- the kind of stuff Python can't do. Learn how to convince the CPU, memory, disk, and network to give you all the performance they're capable of. Note, the goal here is not to learn another language. The goal is to learn how to think of programming in terms of interfacing hardware resources together -- as opposed to a pile of functions that compute something.
In every one of these projects as soon as you want decent performance for reasonable input sizes you'll either need to switch languages and/or get much better at data structures & algorithms.
All of these have references you can follow easily online (except for software rendering and implementing TCP/IP, at least from my searches).
Outside of these topics you can do on your own, joining a large company with data and compute scaling challenges is always a great way to grow personally.
plug: I made an educational project which can help you write a database in python, from scratch - https://github.com/avinassh/py-caskdb
Learning how to write fast (as in performance) software. So optimizing memory usage, parallel (SIMD/GPU) computing and microarchitecture optimizations.
That said, its not easy to master. normally when I start learning a programming language, my toy problem of choice for a taste of the language is to implement a merge sort.
with elixir -> 1 day swift -> 1 day rust -> 1 week.
rust is significantly harder to learn that any other language I've picked up. including js when I was first learning to code. Its worth it once you start getting it in your head.
Anyways, languages evolve and go out of date anyways. As you know, sql is not going away. I consider it one of the foundational knowlege things. where it doesn't go out of date. I think the next big thing in the course is ML. the libraries might change but the math doesn't. Time invested in learning ml and ai are a long term value generating asset.
just my 2 cents
You could maybe characterize what you’re saying as that you’re feeling directionless in your career. You like it, but it feels mature and like you’ve reached a summit. You’re craving a new peak to try climbing but can’t find one that’s appealing.
Maybe somebody will throw out an idea here that will inspire you directly, but my sense is that you may need to shake up how you’re looking at the possibilities. You’re thinking in terms of languages and styles and (rightly, for where you are professionally) feel like those are trivial additions to your repertoire rather than peaks to climb.
So maybe you need to think in some other terms. What do you want to be doing professionally at Year 30? What were some things that inspired you at Year 1 or Year 5 that circumstances pulled you away from — can you revisit those? etc
The second of those questions is on my mind because I felt similar to you last year and was coaxed into refocusing on a fun specialty that my career had long ago pulled me away from. It’s a rich and interesting field and tends to draw in storied people with personalities I enjoy, so it’s been really rewarding to dive back into it whole-heartedly. I feel refreshed in a way I hadn’t expected.
But you might be moved by a different question entirely; my emphasis here is just on maybe asking yourself some different questions than you have been.
Very much like programming, the only way to learn marketing is by doing it. You can read and Youtube your whole life, but it's only when you decide you're going to put it in practice that you discover that what marketing actually demands is courage. It takes courage to put yourself and your product out there, and it doesn't even matter what that product is. It could be a newsletter, it could be a software project, it could be a side hustle, it could be your twitter account.
You can get started by listening to some of Seth Godin and Jay Abraham, at least to see marketing for what it really is.
Since you would probably will not do that, my second best suggestion is to learn a language which can do what python can't or not in a straightforward way... for example:
- be performant or elegant... or
- easy to deploy/distribute... or
- have better out of the box dependency management
- not be complete and utter garbage
Everyone can write docs fine, just the way everyone can write code fine. But good docs are a lot of work. The ones that people understand at a glance, instead of having to crawl around. This is something that Google and Oracle can't do, so I don't expect it to be easy.
Also just writing better code. Declarative programming is very easy to read and modify, but can be difficult to think in that way if you're not used to it.
Here's a good start:
Firstly, thanks for the great comments and suggestions. Its always worth it to ask fellow HN-ers about things and get their opinions.
Secondly, I want to clear some misconceptions that seem to have arisen based on how I worded some things. It was suggested that its foolish to think that once one knows Python, they have learnt all languages. I could not agree more. What I meant was that Python is my language of choice to turn a problem into code. I am not naive enough to suggest that I can solve any problem with Python. Regarding my experience, I first started programming in VB (not even VB.NET, that's how far back my experience goes!), and over the years have deployed applications in C, Java, .NET and Clojure in production. I have familiarized myself quite a bit with functional programming languages like Haskell and Ocaml. I have also worked with SQL and no-SQL databases (25 years is a long time!). I am fully aware of the pros and cons of statically-typed systems, so I don't feel the need to learn yet another statically (or for that matter dynamically) typed language.
And lastly, based on the wonderful suggestions, I feel like I could narrow down my next learning journey into one (or more) of the following. I am stating these just in case they could be of use to someone in the same boat:
- Networks was suggested (thank you!) which really piqued my interest but I am thinking it might be better to get more specific and be intimately familiar with HTTP spec and best practices in API development. Methods to enable an API for any backend functionality seems to be a good skill to possess.
- Documentation - how to easily enable documentation for functionality, and basic tenets of good software documentation. Learn to introduce practices in the team that foster a culture of documentation.
- ML. I have learnt the very preliminary basics of this (using the seminal course by Andrew Ng!) but what I feel might be useful for me is to be a bridge between ML scientists and data engineering (I am a data engineer currently). Basically something related to ML Ops.
Again, thanks for these amazing suggestions. HN never fails me. I am not very active on HN, but hope to help out in future.
P.S: I will also respond to specific comments/questions to clarify. Seems wrong to leave some comments in the current state! :)
What caught my eye was that you use logic programming. Would you mind sharing what your use case is and how it fits your Python workflow?
This is a weak position in terms of your market value. Obviously python is far from being the best option for many domains outside ML or simple web monoliths. Just like any tech has its applicability areas.
I personally would not consider any developer really “senior” until he got commercial experience with both statically typed and dynamic languages.
It’s not about the typing discipline per se, but rather about whether a developer was exposed to different kinds/levels of challenges (like system programming in java vs building microservices with nodejs).