•
EdX and Coursera are superb because all of their content is free (you have to "audit" a course, and then you have unlimited access to course material and lectures from the worlds top universities and computer science teachers). That includes Harvard, MIT, UBC, Duke University, Georgia Tech and University of Michigan who all have some excellent free courses covering languages like Python, C, Java and Web development, as well as having some more in-depth material on Computer Science and Software Engineering design/principles. There's some good courses from Microsoft on EdX too for C# programming.
•
Udacity has some great free resources too. Google have released all of their Java and Android programming courses for free on there. Georgia Tech also have a really good free database course for learning SQL and database design (hugely important topic in IT).
•
Various YouTube channels like Derek Banas have some excellent programming videos: https://www.youtube.com/user/derekbanas/playlists
•
Anything else that you can find on Google and StackOverflow (StackOverflow is the No.1 most-important site on the internet for software engineers)
•
Core programming skills in at least one popular language like Java, C# or Python (Computational thinking, problem solving, debugging, using an IDE)
•
Simple structured data and how different kinds of data are represented in-memory.
•
Working with lists of data in a program and how to do common operations such as merging, transformation, and selecting/filtering data
•
Some knowledge of common algorithms for sorting/searching data
•
Working with plain-text data (strings) and file I/O
•
Well-known data formats like CSV, JSON and XML
•
Source control (A tool called "git" ) and hosting your personal projects on a site like github or bitbucket.
•
Object-oriented Programming and Object-oriented design principles
•
Building "windows" GUIs with a well-known UI toolkit/framework, leading on towards good habits/best-practice for that framework (e.g. the Android app SDK)
•
Software design principles and 'best practice' for writing/structuring code for larger/growing projects
•
Common software design patterns and common standards/conventions/guidelines for whatever language you'd be using.
•
Database design principles, data modelling and querying a database with SQL
•
Learning a "web" framework for your language (Each of the popular languages have different ways of building back-end web services -- these are really important)
•
Front-end web development using HTML, CSS, JavaScript, JQuery and Bootstap, as well as web browser development tools
•
Automated testing and how this affects the way you approach software development
•
Principles behind HTTP and working with 3rd party APIs to send/receive data to/from someone else's web services (e.g. Twitter)
•
Software architecture and breaking large programs into separate layers/components systems
•
Multi-threading, asynchrony, concurrency and parallelism
•
Network programming
•
(Optional) - Cloud technologies like Microsoft Azure or Amazon Web Services
•
(Optional) - Low-level systems programming in a language like C, possibly leading to hardware programming on a microcontroller like Arduino.
•
EdX and Coursera are superb because all of their content is free (you have to "audit" a course, and then you have unlimited access to course material and lectures from the worlds top universities and computer science teachers). That includes Harvard, MIT, UBC, Duke University, Georgia Tech and University of Michigan who all have some excellent free courses covering languages like Python, C, Java and Web development, as well as having some more in-depth material on Computer Science and Software Engineering design/principles. There's some good courses from Microsoft on EdX too for C# programming.
•
Udacity has some great free resources too. Google have released all of their Java and Android programming courses for free on there. Georgia Tech also have a really good free database course for learning SQL and database design (hugely important topic in IT).
•
Various YouTube channels like Derek Banas have some excellent programming videos: https://www.youtube.com/user/derekbanas/playlists
•
Anything else that you can find on Google and StackOverflow (StackOverflow is the No.1 most-important site on the internet for software engineers)
•
Core programming skills in at least one popular language like Java, C# or Python (Computational thinking, problem solving, debugging, using an IDE)
•
Simple structured data and how different kinds of data are represented in-memory.
•
Working with lists of data in a program and how to do common operations such as merging, transformation, and selecting/filtering data
•
Some knowledge of common algorithms for sorting/searching data
•
Working with plain-text data (strings) and file I/O
•
Well-known data formats like CSV, JSON and XML
•
Source control (A tool called "git" ) and hosting your personal projects on a site like github or bitbucket.
•
Object-oriented Programming and Object-oriented design principles
•
Building "windows" GUIs with a well-known UI toolkit/framework, leading on towards good habits/best-practice for that framework (e.g. the Android app SDK)
•
Software design principles and 'best practice' for writing/structuring code for larger/growing projects
•
Common software design patterns and common standards/conventions/guidelines for whatever language you'd be using.
•
Database design principles, data modelling and querying a database with SQL
•
Learning a "web" framework for your language (Each of the popular languages have different ways of building back-end web services -- these are really important)
•
Front-end web development using HTML, CSS, JavaScript, JQuery and Bootstap, as well as web browser development tools
•
Automated testing and how this affects the way you approach software development
•
Principles behind HTTP and working with 3rd party APIs to send/receive data to/from someone else's web services (e.g. Twitter)
•
Software architecture and breaking large programs into separate layers/components systems
•
Multi-threading, asynchrony, concurrency and parallelism
•
Network programming
•
(Optional) - Cloud technologies like Microsoft Azure or Amazon Web Services
•
(Optional) - Low-level systems programming in a language like C, possibly leading to hardware programming on a microcontroller like Arduino.