Well, blockchain has relatively little "backend programming" unless you're programming the consensus layers or blockchains themselves. If you want to pursue this, I recommend learning some backend languages (in blockchain, Go and Rust are popular) and then learning as much as you can about consensus, various consensus algorithms (BFT, Nakamoto, Proof of Stake systems) and find a team which is building a base layer technology.
If you want to program the "backends" of dApps, then you're coding a smart contract programming language. The most popular one is Solidity, and there is a large amount of literature on Solidity programming and many deployed contracts have their code available for inspection on Etherscan.
If you want to focus on the frontend, there is a large overlap between dApp frontend programming and just JavaScript frontend programming in general. Here, you'll want to learn things like the Web3.js framework, how to connect hardware wallets like Ledgers and Trezors to the frontend, and interacting with the Ethereum (or another blockchain) from JavaScript.
All of these activities should be accompanied by a fundamental understanding how blockchains, and probably Ethereum, work underneath. Most blockchain projects are open source and maintain open developer communities that you can participate in. Just pick a project you like and see if they have open bounties (see: Decentraland, Aragon, district0x, etc.).