Yes, I believe so. And it has nothing to do with genius!
First: of course you wouldn't be able to get senior dev positions in a domain you never worked in. You have to be prepared for this. Pay cut is obvious just after the change, and you need to decide if you can afford it.
Second: it's a matter of how long you're going to stay junior in your new domain. In practice, this is a question of how solid your foundations are and how experienced you are already, and also how determined you are. I believe in what jwz said in "Coders at Work": different domains have different vocabularies, best practices, and myths, but deep down it's still just standard coding. There are variables and loops and branching constructs everywhere, no matter the domain.
> there are genius programmers who are equally competent at embedded systems, mobile development, distributed systems...
I doubt there are many people who are competent in many domains at once. There are such people out there and they're very expensive specialists. Still nothing to do with genius, but rather hard to achieve. However, you don't need to be like that: you just need to change the domain, not master a new one while retaining all your skills specific to the previous domain.
The two most important things for making a switch are your foundations and experience. In your example - embedded dev - you'd need to have a good prior understanding of how CPUs work plus knowledge of C and Asm. Given this you're almost immediately ready to code, after maybe a week of reading the codebase, manuals, and refreshing AT&T asm syntax (for example). You - every programmer, really - should know at least the basics of such things from college or self-study.
The experience is important because it gives you an intuition as to where the potential problems and hurdles in your learning would be. More than anything, experience provides you with an essential skill, a systematic (working for you) way of assessing and learning a new technology. It's much easier to change your domain for the fifth time than it is for the first time. Even if the previous areas you worked in have nothing to do with the one you're learning right now.
For me, programming is a lifelong career choice. That means I have ~50 years of programming still ahead of me. I can't imagine working for such a long time in a single domain! In a bit more than a decade of my professional programming, I already switched domains four times. Despite the fact that I'm self-taught, and my foundations were lacking for quite some time. (I like to believe I fixed this after a couple of years.) It wasn't easy, but if I did it, then I'm sure almost anyone can :-)
Yes, I believe so. And it has nothing to do with genius!
First: of course you wouldn't be able to get senior dev positions in a domain you never worked in. You have to be prepared for this. Pay cut is obvious just after the change, and you need to decide if you can afford it.
Second: it's a matter of how long you're going to stay junior in your new domain. In practice, this is a question of how solid your foundations are and how experienced you are already, and also how determined you are. I believe in what jwz said in "Coders at Work": different domains have different vocabularies, best practices, and myths, but deep down it's still just standard coding. There are variables and loops and branching constructs everywhere, no matter the domain.
> there are genius programmers who are equally competent at embedded systems, mobile development, distributed systems...
I doubt there are many people who are competent in many domains at once. There are such people out there and they're very expensive specialists. Still nothing to do with genius, but rather hard to achieve. However, you don't need to be like that: you just need to change the domain, not master a new one while retaining all your skills specific to the previous domain.
The two most important things for making a switch are your foundations and experience. In your example - embedded dev - you'd need to have a good prior understanding of how CPUs work plus knowledge of C and Asm. Given this you're almost immediately ready to code, after maybe a week of reading the codebase, manuals, and refreshing AT&T asm syntax (for example). You - every programmer, really - should know at least the basics of such things from college or self-study.
The experience is important because it gives you an intuition as to where the potential problems and hurdles in your learning would be. More than anything, experience provides you with an essential skill, a systematic (working for you) way of assessing and learning a new technology. It's much easier to change your domain for the fifth time than it is for the first time. Even if the previous areas you worked in have nothing to do with the one you're learning right now.
For me, programming is a lifelong career choice. That means I have ~50 years of programming still ahead of me. I can't imagine working for such a long time in a single domain! In a bit more than a decade of my professional programming, I already switched domains four times. Despite the fact that I'm self-taught, and my foundations were lacking for quite some time. (I like to believe I fixed this after a couple of years.) It wasn't easy, but if I did it, then I'm sure almost anyone can :-)