What technical terminology and coding essentials can help testers?

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


What technical terminology can you add to this list that would help those new to programming and “tech speak”?

5 Likes

My context, is not to let anyone tell you how to become a good coder. As someone who self-taught over a long time I realized that a learner who sets their own goals tends to be able to learn faster. As long as you have a experienced practitioner to guide you, then learning breadth you might miss, will happen anyway.

I’m a huge fan of the “terminology and foundations” learning of what exactly the terms mean that form the basis of all conversations, terminology mastery also builds the learners confidence in conversations. So even though it might feel like you are going back to school, the “basic data processing concepts”, rote learning about the field is super useful. As one example, for testers, the ISTQB terminology glossary is a map of the landscape. It’s incomplete, sure, but it’s that bedrock of all interactions. I’m a big fan of people doing personal projects, not following a youtube tutorial. Youtube programming tutorials are great, but very little actually sticks in the end. But what does stick, is when someone on youtube covers all the terminology meanings very well in memorable ways. Podcasts are probably also best for this, my most fun one is ReplyAll Reply All | Gimlet and probably worth looking at getting a more advanced podcast onto your podcatcher Developer Tea . Developer Tea will have you stopping and asking questions often because it is pretty hardcore. These will definitely boost your terminology IQ.

1 Like