All programming statements are formed on three basic constructs
One instruction follows another e.g.
foo()
bar()
An Instruction is performed if a condition is true e.g.
If Then Else
Switch
An Instruction is performed repeatedly in a loop. e.g.
####for loop
for( i=1 ; i<10 ; i++) { ... }
####while loop
while(notFinished) { doWork(); }
####do while loop
do { work(); } while(notFinished);
####recursion
work() { while(notFinished) { work() } }
- Variables, Constants, Scope and Types
- What are Coupling and Cohesion
- Why decoupling and high cohesion are are important
- What are Algorithms, Data Structures, Patterns and idioms, why the distinction is important. https://www.quora.com/What-is-a-call-stack
- Java class Design : Interfaces, Abstract Classes, Final Classes
- Using inBuilt Classes, Types, Strings, Dates etc.
- String Processing and Formatting
- Collections & Generics
- Java Regular expressions
- Recursion
- Input and Output
- Exceptions and Assertions
- Sorting and Searching
- Polymorphism
https://en.wikipedia.org/wiki/Imperative_programming
https://en.wikipedia.org/wiki/Declarative_programming
Why Declarative programming is more appropriate for FDD/BDD than Imperative programming
- Unit Testing with JUnit
- Using slf4j/log4j for logging
- Java Strings, Comparing, Formatting, StringBuffer
- Pojo, Memento, Parameter objects
- Exceptions, Handing exceptions, writing custom exceptions
- Assertions, Checked & UnChecked
- Java Collections (Generics)
- Loading resources from classpath vs absolute paths
- BDD
- Runners
- Tagging
- Regular Expressions
- settings.xml
- pom.xml
- Maven life cycle
- Maven Plugins
- WebDriver API
- Browser Factory
- Page Objects
- Page Object Factory
- Locator Strategy / css vs xPath
- Selenium Grid
- Practical CI
http://docs.oracle.com/javase/tutorial/index.html
https://www.udemy.com/java-tutorial/#curriculum
https://www.udemy.com/java-the-complete-java-developer-course/#curriculum
- Fluent Interfaces
- Recursion
- Separation of Concerns
- Low Coupling and High Cohesion
- Law of Demeter
- Tell don't Ask
- Hollywood Principle, "Don't call me, I'll call you"
- Assume vs Assert (rule of thumb)
- Assumptions are for use as Pre-conditions.
- Failures indicate the test offers no meaningful result.
- e.g. When testing eligibility,
- "Given Customer exists" is a pre-condition.
- Test should be considered skipped, not a failure.
- Change is still like to be necessary.
- Asserting are for use as Acceptance Criteria/Post
- Failure is a failure of the system under test.
- Also Exceptions, likely failure of Test Suite.
- Test should be considered skipped, not a failure.
- Single Responsibility
- Open for extension, Closed to modification
- Liskov Substitution principle
- Interface Segregation principle
- Dependency Inversion principle https://en.wikipedia.org/wiki/SOLID_(object-oriented_design) http://www.oodesign.com/design-principles.html
http://wiki.c2.com/?DesignByContract
Test Driven Development
Behaviour Driven Development
Data Driven Testing
Contract First development
Big-O Complexity
https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/
Builder Pattern
Composite Pattern
Command Pattern
Factory Method
Singleton
https://en.wikipedia.org/wiki/Design_Patterns
https://en.wikipedia.org/wiki/Type_theory
https://en.wikipedia.org/wiki/Taxonomy_(general)
https://en.wikipedia.org/wiki/Ontology_(information_science)