This is a follow up post of previous post which explained why you shouldn't be learning only one programming language/technology , if you haven't read that one, please spare some time to read it and then jump to this.

Now let's jump to what technologies should you learn

1. A Low level programming language (C)

C is a statically typed language which means the type of a variable is known at compile time. Coding in C gives you idea how computer is working at low level as it resembles instruction being executed by computer's CPU.
Coding in high level language like JAVA, Ruby or Python doesn't give you idea of what is causing the code to execute and not appreciating the fact why code is slow. Knowing things at low level gives you idea and too many options to optimise it for speed.

2. A Dynamic programming language.

Dynamic programming language, in computer science, is a class of high-level programming languages which, at runtime, execute many common programming behaviour that static programming languages perform during compilation. These behaviours could include extension of the program, by adding new code, by extending objects and definitions, or by modifying the type system.

I would back JavaScript/Ruby over here, coding in a dynamically typed language makes you more expressible and let you express your ideas more clearly

3. Command line tools

Before jumping to use IDE or pre baked softwares for making your life simple know the basics and start using command line where ever possible this way you will know how things are actually done and will have deep understanding of how things work. It's ok to use postman for API calls, but you should also know how curl works.

4. DevOps

Along with programming or QAing you should also be knowing some basics of DevOps, what is it ?

DevOps (a clipped compound of development and operations) is a culture, movement or practice that emphasizes the collaboration and communication of both software developers and other information-technology (IT) professionals while automating the process of software delivery and infrastructure changes.


It aims at establishing a culture and environment where building, testing, and releasing software can happen rapidly, frequently, and more reliably

5. Version Control (git)

You should at least know one version control system be it git or svn, I technically prefer git because of its distributed nature. Version control system tracks and provides control over changes to source code, so that you can always come back to previous state in case something is went wrong.
Follow along this tutorial to know about git.