Some really bad and irrelevant advice in this thread, IMO. Many of the people commenting only seem to only understand their small bubble of the software world. Regarding a CS or engineering degree, it is really helpful when trying to get that first job, but after that the vast majority of jobs worth working at don't care about credentials and would hire a good programmer without a degree in a heartbeat. And economics/finance is much more applicable to this field than some people think, as the person who said "advanced communication and some politics" don't apply to software has absolutely no idea how development in the real world works because those are two extremely important factors.
Regarding languages, the worst advice I've seen in this thread are people telling you to learn multiple, extremely complicated languages right away. I would definitely recommend starting with a dynamic, scripting language like Python to understand the basics of programming. Python is a general purpose language that can solve most problems well and a great learning language because of its consistency. I recommend working through courses on Udacity or Coursera, many of which use Python as their teaching language. If you really apply yourself to the coursework, you will learn a ton and quickly close the gap between you and your CS-degreed competition.
Right now, the vast majority of programming is web programming, especially the kind that doesn't require engineering degrees. I was an embedded systems programmer for a while, but the demand for web programmers is significantly greater. This is also the kind of programming that generally puts less focus on algorithms and data structures, which are two areas where your degreed competition will likely have a leg up on you. You'll need to learn SQL eventually to use databases effectively, but in my experience you can probably fake it until you make it and get by with modern software frameworks.
Python is a fine language for server-side web programming, but you will also need to learn HTML, CSS, and JavaScript to be a well-rounded web developer. The great thing about learning these three frontend languages is that whether you are using Python, Ruby, Java, or Go on the server side, the client-side always uses the same front-end languages so they are ubiquitous and in high demand. The downside is that they are less elegant languages than for example Python and can be more confusing for beginners.
If you decide that you really want to work with low-level hardware, you'll need to learn C and/or C++ (which are very different languages). If you want to iOS programming, you'll need to learn Objective-C, and if you want to do Android programming, you'll need to learn Java. I don't recommend Java or C# as languages to focus on because while there are a fair amount of jobs for out there for these languages, they tend to be less interesting, much less enjoyable corporate jobs. Also, adequate enterprise Java and C# programmers are a dime a dozen these days, so the pay is often not nearly as good.
Regarding "portfolios", that specific term is more of a front-end or designer term. Generally for programming positions, people care about your open source output, which means your GitHub profile. Also, any place worth their salt will ask you to program during the interview, so this is much more important than showing some work which could easily have been plagiarized or exaggerated.
TL;DR: Learn python to get the basics of programming, then pick an area to focus on. Web and mobile development are the areas with the most demand right now.