HACKER Q&A
📣 captmorrel

As a senior engineer content with programming chops, what to learn next?


I am a senior software engineer who has been in the field for about 25 years. I mainly use Python and SQL and feel like I can use it to solve mostly all problems. I also have a good knowledge of programming techniques like functional, OO and logic programming. I am aware that as a senior software engineer one has to have other skills like caring about the team overall, and mentoring juniors. I am wondering what should I learn next. Somebody said I should learn Go or Rust but I feel like if it’s another programming language, its really nothing new. Spend a weekend, do some tutorials and you should be good since you are a senior engineer and you know the basics that underpin programming languages.

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!


  👤 colanderman Accepted Answer ✓
Learn how networks work: http://intronetworks.cs.luc.edu/ Most SWEs I've met don't understand networks well despite writing software that interacts with them.

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.


👤 eatonphil
Here are a few project ideas: get into compilers/interpreters (write a lisp AST interpreter, then a bytecode VM, then a compiler to C, then a compiler to LLVM, then write a JavaScript implementation, etc.), GUI programming (try out Electron, then Swift and Kotlin), hack on databases (build an in-memory key-value store, then one on disk, then one backed by a Raft implementation, then an in-memory SQL database), write an operating system, write a web browser, write a software renderer (i.e. skip the GPU and draw triangles directly), build a game, implement Docker in bash, write a code editor component for JavaScript with syntax highlighting and autocomplete and CJK support, get into networking (implement an HTTP server from sockets, implement TCP/IP), write a native text editor, write a standard library for some language (including common containers, networking libraries, etc.), emulate x86 then original game boy or some other simple game hardware, build your own computer with nand2tetris or the digital design and computer architecture book with whatever the modern version of Logisim is.

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.


👤 avinassh
If you like databases, you can start exploring the internals and write one! There is no going back once you dig deep into the storage internals, KV stores, and distributed systems.

plug: I made an educational project which can help you write a database in python, from scratch - https://github.com/avinassh/py-caskdb


👤 patrulek
> I mainly use Python and SQL

Learning how to write fast (as in performance) software. So optimizing memory usage, parallel (SIMD/GPU) computing and microarchitecture optimizations.


👤 cultofmetatron
if you haven't used rust, its definitly going to be new territory for you. The borrow checker doesn't exist in any other language and its an incredibly bovel abstraction for proving an absence of race conditions or memory leaks.

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


👤 swatcoder
It doesn’t feel like a vague request so much as one whose answer is very personal.

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.


👤 he11ow
Marketing. Think how often you read developers who scoff at marketing, right up to the point they try and launch a product and it struggles to gain traction. Marketing seems sleazy, cheap or simple, when in fact it's none of those things. Value creation is in huge part marketing, because if your users either don't know or don't care about the product, it isn't creating value...

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.


👤 devoutsalsa
Have you ever dabbled with Elixir or Erlang? If not, consider giving it a try. My old boss switched a project we were on from Python to Elixir because the abstractions in Elixir for recovering from a failure, text processing, message passing, and so on felt cleaner.

👤 ComradePhil
Nothing. Don't learn anything. You'll waste time learning something you'll probably never use or forget what you learnt if you ever need to use it. You are a software developer; you can learn anything when you need to. Save it for then. For now, enjoy your time.

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


👤 muzani
I've been working on documentation a lot. Nobody seems to want to do it, yet everyone seems to want more.

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.


👤 Clubber
Assembler. The closer you get to the metal, the more interesting it is. Be the bits!

Here's a good start:

https://www.nand2tetris.org


👤 cgopalan
Hello OP here.

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! :)


👤 IshKebab
You haven't even used a statically typed language yet. Saying you will be able to learn Rust in a weekend is ridiculous. There will be so many new concepts for you.

👤 j7ake
Maybe go beyond programming and think of methods in data analysis, machine learning, and decision making.

👤 dr_kiszonka
I can't offer any advice, Captain, besides perhaps suggesting you play a bit with machine learning and see if it catches your interest.

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?


👤 AnimalMuppet
The fundamental problem of large-scale software development is that brain-to-brain transfer of information is hard. So, work on interpersonal communication.

👤 aristofun
> Python and SQL and feel like I can use it to solve mostly all problems

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).


👤 moistly
Woodworking, of course. Very popular with programmers.

👤 aspyct
Hehe, I'm doing a lot of SQL and python and feel the same about "solve pretty much anything". Is that the golden duo?

👤 miej
Quantum mechanics. Interdisciplinarity produces superlinear returns

👤 b20000
learn to sell and negotiate

👤 huqedato
Learn Elixir. Enjoy!

👤 max_hammer
Scala and spark ?