I am a physics/math major, and also a new US immigrant. I think I know intermediate level Java, intermediate data structures and algorithm design, and, some machine learning (with Octave), HTML, JavaScript, and Linux command line. Problem is I neither have job experience nor concrete project examples.

To the professional programmers out there is, considering where I stand, I need your opinion about the following strategies to improve my odds of getting a programming job:

1. Learning new skills toward a particular niche such as web development, mobile apps, etc., instead of doing random projects?

2. Finding non-paid internships in a particular niche, instead of working on my own or open source projects?

3. Creating self-directed projects, and publishing codes in Github etc.?

I understand that these are not mutually exclusive. But there my question is about the quickest strategy. Also, please don't hesitate to suggest me your own experience and/or what *you* think is a better strategy. Thanks in advance.