Philosophy
- Coding is fun, useful, creative, rewarding and anyone can learn it given enough interest.
- We'll go into detail about programming to achieve a strong knowledge of core concepts.
- We'll see the importance of good code: indentation, meaningful names, documentation, avoid repetition, tests, ...
- Two classes of 2h per week so you have time to assimilate the course and combine it with work.
- Small class group (~5 students) to better attend your needs.
- Exercises to practice at home, with my help when you need it.
- Up-to-date technologies that are in demand: git, angular, sass, flexbox, Java 8, reactive streams, SQL, No-SQL, ...
- Comparison between different languages (Java, JavaScript, Ruby, Python, Scala) to better understand the core concepts of coding.
- I care about what you learn.
About me
- My name is Ferran Maylinch.
- Back-end, front-end and mobile developer for +10 years, currently at GymForLess.
- I've worked as a teacher at Ironhack and Ubiqum.
- Studied at UPC, where I also started teaching.
- I like music, movies, sports and videogames. Oh, coding and teaching too!
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
-
The computer
- Processor (CPU)
- Memory (HD and RAM)
- Input and output devices
- Operative system
- File system
- Command line (terminal)
-
Intro to programs
- High and low level Languages
- Instructions/statements, flow
- Code editors: Sublime, Brackets, Atom
- First Hello World program
-
Variables
- Definition, purpose, syntax, naming
- Types: number, text, boolean
- Values: literal, calculated
- Declaration, assignment
-
Expressions
- Definition, type, value
- Math operators:
+ - * / %
- Comparison operators:
== != < > <= >=
- Logic operators:
! && ||
- Shortcuts:
+= -= *= /=
-
Flow control
- Condition:
if/else
,switch
- Loop:
while
,for
- Condition:
-
Advanced editors (IDEs)
- Eclipse
- IntelliJ IDEA
-
Functions
- Definition, purpose: avoid repetition, organise code
- Declaration vs call
- Parameters, arguments
- Return type, return value
- Pitfall: printing is not returning
-
Version control systems
- Code repositories, versions, collaboration
- Git (tool)
- GitHub (site for repositories)
-
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-
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
)
-
OOP: pointers and inheritance
- Pointers
- Arguments by value or reference
- Inheritance
- Interfaces
-
Collections
- Lists and arrays
- Maps/dictionaries
- Trees
- Sets
-
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
-
Useful JDK classes
- JDK
- Date, Math, String, wrappers (Integer, Double, etc)
- IO streams, readers and writers (e.g. for files)
-
Third-party libraries
- Maven
- Use a library:
commons-lang
- Store objects as
JSON
using another library:gson
- Preview of JavaScript: JSON in action
-
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)
-
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)-
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
-
JavaScript
- JavaScript
- jQuery
- AJAX
-
Tools and frameworks
- Google Maps
- NodeJS
- SASS
- Autoprefixer
- AngularJS
Here you can build a web interface for your application
Full stack-
Connect frontend and backend
- Frameworks (Spring, Play, Dropwizard, Grails, JSF, ...)
- Example: jQuery/AngularJS + API Dropwizard
-
Databases
- Intro to DBs: tables and SQL
- SQL
- JDBC: SQL from Java
- JPA: "automatic" SQL mapping
- No-SQL databases, MongoDB
-
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!