Get a local internship / job first either in your town or in a bigger town like Vancouver / Montreal / Toronto. Learn the trade, best practices, best technologies, get an open source presence, etc. All of this will require a genuine interest in the field and hard work on your own time. You will of course also progress your skills on the job, but relying solely on that you will grow much slower, and will be strictly capped by the quality of your workplace dev culture. You can start your growth before even getting a job btw.
In Canada, lots of companies hire juniors, both big and small. Look at your peers and know how to stand out. Did you build a simple app, put it on github and host in somewhere? Congrats, you have demonstrated more skills than 90% of your peers, and you haven't even interviewed yet. Google your way into finding these companies – see angel.co, many lists of companies hiring remotely, local job fairs, etc.
As for cross border contracting – yes, working for US you will most likely be a contractor unless the company is big enough to have a Canadian office. Better that they don't, then they will be less likely to offer you a Canadian salary. Being a long term contractor is not really a problem as long as you have the skills you advertised. Taxes are easy for contractors. There are legal things you need to know, and you will know after you do proper research on this, but there are no showstoppers there. If you want to take the most from this career, you don't let some paperwork or the illusion of job security get in the way. You work hard to become the best developer you can be, and allow the highest bidder that you're interested in working for pay you for your work.
---
This might sound very... effortless and maybe pompous and out of reach but it's entirely doable. Knowing who you want to be, being interested in your work, and spending a lot of effort on becoming a better developer year after year is really all it takes. It's a long path but thousands of people have walked it.