Lucy Llewellyn delivered a super informative talk at Leeds Testing Atelier: Back To Basics: Assumed Knowledge in Software Engineering.
They shared some essential knowledge:
Computer
- CPU & Memory is the brain
- RAM is where data is stored. It’s like a neighbourhood of houses
- Memory Call Stack (short term) and Heap (long term). Pass a memory address by reference instead of via the data
Programming Paradigms
- Imperative Programming. Provides specific instructions on how to produce an outcome. Uses, If, While and For. How you’re going to do it
- Declarative Programming. Describes what the program does and the out but doesn’t state how it should be implemented. What to do.
Objected-Oriented Programming
- Organise software around chunks of data in the computer’s memory. These are objects. Classes are the blueprint for the objects.
- Abstraction - hide details of your code. Simplify complex systems. Focus on the what instead of how.
- Encapsulation – hide information for security reasons. Private, Protected and Public access modifiers
- Inheritance – derive a class from another class. This allows code to be reused and extended. Use a sub
- Polymorphism – allows an object to access its class as its self or a parent class. They can then be put into an array.
Big-O Notation
- A simplified way to describe an algorithm’s efficiency. The O is the order of complexity. There are two parts: Time and Space. Use this to abstract the efficiency of the code from the machines they run on.
- O(1) - Constant Time. Complexity stays the same no matter how many inputs. The most efficient
- O(N) - Linear Complexity. 1 unit of time to loop over each element so as inputs increase so does the complexity
- O(logn) - Logarithmic Complexity. Scales well to a large number of inputs. Useful for binary searches.
- Understdning this help you think about the efficiency of your code at a high level
- Helpful when designing solutions to complex problems
- Important for scalability
Concurrency
When different parts of a program can be run in different orders or partial order. Not necessarily simultaneously.
Parallelism
Breaks work up into tasks. Uses threads and can be run at the same time.
Resources
- Fireship channel YouTube
- Coding challenges: Edabit, LeetCode, CodinGame.
- Create personal projects for fun is a great way to learn. Can apply them to automation efforts at work.
What technical terminology can you add to this list that would help those new to programming and “tech speak”?