What a Coder have to know?

Programming is an art. Coding is a profession.

Art have no rules, the artist is free to do anything. A profession have its rules, such that the professional will not make big mistakes if adheres to them.

Art is fun. Profession delivers things that can be used.

Also coding is but one of the several professions needed to deliver a software. These are:

  • Requirement modeler (Business Analyst)
  • Graphical designer (Architect)
  • UX expert
  • Technical designer
  • Coder
  • Reviewer

And we did not mention those who sell and manage the work of the above people. A programmer is expected to be all of the above, no wonder that there are only few really good programmers out there.

Let’s start with what a Coder does NOT have to know:

  • Anything about the business domain – anything needed will be detailed in the behaviour description
  • Anything about the technical domain – the libraries and frameworks used will also be detailed in the task description
  • Design and Architecture – you get the task as part of an already designed program model
  • Useability – it is incorporated into the design
  • Graphics – leave it to the professionals
  • Team work – the tasks are independent, and can be coded in a short time. You also will be your own boss.

What have left?

You still need a relatively large amount of knowledge. But much less than what a programmer needs. We estimate that it takes 150 units, which means that if you don’t know anything about programming, you will need anything between 3 months to a year to learn it. It contains basic programming knowledge, the ability to use the tools, and knowledge about the process you are participating in. And most importantly, the two cornerstones of your profession: Test Driven Development (TDD) and Clean Code.

Here is a rough table of contents (it’s for Java, but most of it is similar for the other languages. As you can see, the actual programming language is small part of it, and you don’t even have to know everything about the language):

  • Introduction to Coding
    • Using TDD in Eclipse
    • What is TDD and why it is good?
    • Setting up the environment: Eclipse
    • Your first Unit test
    • Syntax is important!
  • Language basics
    • Variables and primitive types
    • Operators
    • Fields and more types
    • List, class, instance
    • Instances and Equality
    • Methods
    • Arrays
    • Printing and mocking
    • Our first production code and application
    • Build, run and run tests on a  project.
    • Maven
    • Mocking
    • Branching statements
    • Loops
    • Exceptions
    • Inheritance
    • Service, spring
    • DTO, Lombok
    • Interfaces
    • Generics and Collections
    • Stream API + Optional
    • Unit testing
    • How to write unit tests
    • Mocking
    • TDD basics
    • Test coverage
    • Mutation coverage
  • Setting up the environment: git and github
  • Command line
    • Running our code in the command line
    • compiling from command line
  • Git
    • Version control steps (history, stage, working directory)
    • Branching
    • Rebase / Merge
    • Resolving Conflicts
    • git-flow
    • Maven / Gradle
    • Main features of project management tools
    • Debugging
    • Println &co
    • Using coverage
    • Reading stack trace
    • Debugger
  • Spring (through our pattern)
    • Spring Framework
    • Managed Beans
    • Dependency Injection
    • Resources
    • Validation
    • Data Binding
    • Spring Boot
    • Spring Data
    • Spring Data JPA
    • Spring Data Mongo
    • Spring MVC
  • OOP Design
    • Design Principles
    • SOLID
    • Inversion of Control
    • KISS
    • YAGNI
  • Antipatterns – the related coding rules, better solutions
    • NULL References
    • Utility Classes
    • Singleton
    • God Class
    • Premature Optimizations
    • Fear of Adding Classes
    • Magic Numbers / Strings
    • Inner-Platform Effect
    • Anemic Domain Model
    • Call Super
    • Square-Rectangle Problem
  • Using the framework
  • The process
    • Reading an issue, architecture docs
    • Locking a task
    • Local build environment
    • CI
    • Understanding Sonar issues
    • Submitting a task
    • Review
    • Pointers to further information
  • Skills and culture
    • Searching
    • Verifying information
    • Stack overflow, how to behave well
    • Open source, free culture
    • Working independently
    • Understanding algorithms
    • Remote work
    • Time management
%d bloggers like this:
search previous next tag category expand menu location phone mail time cart zoom edit close