code.then
()
Learn to code, then what comes next is up to you. The possibilities are endless.
Language  

Philosophy

About me

Course contents

  You may bring your project idea, or I can suggest one. I can tailor the exercises to help you build your project step by step.

Intro
  1. The computer
    • Processor (CPU)
    • Memory (HD and RAM)
    • Input and output devices
    • Operative system
    • File system
    • Command line (terminal)
  2. Intro to programs
    • High and low level Languages
    • Instructions/statements, flow
    • Code editors: Sublime, Brackets, Atom
    • First Hello World program
Basics
  1. Variables
    • Definition, purpose, syntax, naming
    • Types: number, text, boolean
    • Values: literal, calculated
    • Declaration, assignment
  2. Expressions
    • Definition, type, value
    • Math operators: + - * / %
    • Comparison operators: == != < > <= >=
    • Logic operators: ! && ||
    • Shortcuts: += -= *= /=
  3. Flow control
    • Condition: if/else, switch
    • Loop: while, for
  4. Advanced editors (IDEs)
    • Eclipse
    • IntelliJ IDEA
  5. Functions
    • Definition, purpose: avoid repetition, organise code
    • Declaration vs call
    • Parameters, arguments
    • Return type, return value
    • Pitfall: printing is not returning
Coding in the real world
  1. Version control systems
    • Code repositories, versions, collaboration
    • Git (tool)
    • GitHub (site for repositories)
  2. Errors, testing
    • It's easy to break code (Google, Stack Overflow, ...)
    • Tests, automated tests
    • Exceptions: try catch finally

  Here you know the most important concepts of programming (really) and you can create simple programs

Classes and objects
  1. OOP (Classes, objects)
    • Class (type)
    • Object (value)
    • Fields/properties (variables inside a class)
    • Methods (functions inside a class)
    • The implicit variable this
    • Constructor
    • Class members (static)
  2. OOP: pointers and inheritance
    • Pointers
    • Arguments by value or reference
    • Inheritance
    • Interfaces
  3. Collections
    • Lists and arrays
    • Maps/dictionaries
    • Trees
    • Sets
  4. Problem analysis
    • Importance of naming
    • Divide and conquer
    • Very simple exercises: use variables, operators, if, while, collections
    • Intermediate exercises: organise code into functions
    • Complex exercises: detect classes (concepts), methods and properties
  5. Useful JDK classes
    • JDK
    • Date, Math, String, wrappers (Integer, Double, etc)
    • IO streams, readers and writers (e.g. for files)
  6. Third-party libraries
    • Maven
    • Use a library: commons-lang
    • Store objects as JSON using another library: gson
    • Preview of JavaScript: JSON in action
Advanced
  1. Callbacks and reactive streams
    • Callbacks (functions as arguments)
    • Java 8 lambdas
    • Java 8 reactive streams
    • Map and filter collections (using custom code and streams)
    • See callbacks in other languages (e.g. JavaScript, Ruby)
  2. Advanced programming concepts
    • Design patters (e.g. observer, template)
    • Kinds of classes (DTO, BO, util)
    • TDD
    • Threads
    • Regular expressions
    • Reflection (optional)

  Here you're a programmer, able to build command-line applications, and may choose any path you like

Frontend (web)
  1. HTML/CSS
    • Browsers (display HTML/CSS)
    • HTML (XML) : content
    • CSS : style and layout
    • Flexbox : easier layout
    • CSS Media queries, for responsive layout
    • Bootstrap : responsive layout and style
  2. JavaScript
    • JavaScript
    • jQuery
    • AJAX
  3. Tools and frameworks
    • Google Maps
    • NodeJS
    • SASS
    • Autoprefixer
    • AngularJS

  Here you can build a web interface for your application

Full stack
  1. Connect frontend and backend
    • Frameworks (Spring, Play, Dropwizard, Grails, JSF, ...)
    • Example: jQuery/AngularJS + API Dropwizard
  2. Databases
    • Intro to DBs: tables and SQL
    • SQL
    • JDBC: SQL from Java
    • JPA: "automatic" SQL mapping
    • No-SQL databases, MongoDB
  3. Publish complete project to Heroku
    • Frontend
    • Backend
    • Persistence
    • Deploy (Heroku)

  Here you can build a complete web application with a database and put it online


Why I organized the contents this way

Many courses start with frontend topics like HTML/CSS. That may be more visually appealing and (deceptively) easier to grasp, but I think that it is important to first build a solid foundation by learning the core programming concepts. With that knowledge in your toolbelt, you will be better prepared to learn any languages, tools or frameworks you need to reach your goals. Moreover, you will enjoy programming much more.

Contact

Interested? Any question? Write me to codethen@gmail.com!