Coding for newbie testers

Colleges are including programming more and more and I have had a query about programming languages that are used in Testing and Dev.
I’ve some starters for 10 but opening it up here as the more suggestions the better.

Python, Perl are the ones that appear the most often - anyone have any further additions?
C, Java?

This is geared towards the beginner starting on their Dev/Testing journey so assume no previous experience.

Any pointers to courses as well?
I have a list of free sites, udemy etc but the more suggestions the better



I took the Java path on the Test Automation University a while ago, and it’s very beginer friendly. Angie Jones does a good job at explaining fundamental programming concepts and later courses have a lot practical automation examples and practice peojects.


Get Going Stay Motivated Languages To Postpone Your Tears: Python, JavaScript, Perl, PHP, Ruby, Lua, BASIC
Hands Dirty Hard Road Languages To Make You Cry: C, C++, Java (kinda)
Resources: codecademy, khan academy, coursera, odin project, freecodecamp, codewars, YouTube, any documentation that comes with your language so that you can look up how functions work and whatnot.

The rest of this is a long explanation of getting into coding that may or may not help with your problem.

In one sense the language doesn’t matter because you’re using it to understand principles of programming that can apply to any programming language. A good dev can pivot to another language because they understand common ideas in programming. You want to know about composition, inheritance, refactoring, separation of concerns and so on because once you know these in the syntax of one language you only need to pick up the syntax of the new language, not understand why it is you’re writing what you’re writing.

The need for understanding these principles also increases with how good your code needs to be. I can write scripts to help me test and they can be shoddy because they don’t necessarily need to be big, or maintainable, or work with other changing systems, or be worked on by other developers. Much like a cook can make a great meal for two and a chef can bring together many people to make great meals for hundreds - it’s all heating food… apart from the parts that aren’t.

What a language is good at in terms of the problems it can solve are irrelevant. The speed and efficiency of Golang or Rust in production environments is not going to help you to learn data types. Get a language for learning, then later you can take the ideas to a language for solutions.

Why your choice of language can matter is:

  1. There’s a difference between imperative and declarative languages
  2. Not all languages have the same features
  3. Some languages are harder to use
  4. Some languages are tedious to program in
  5. Some languages are rare, and you probably want to learn a language that’s useful before you have to pivot to another
  6. Some languages lend themselves to particular problems, so if you want to get into, say, front-end web development specifically you might want to limit your choices to be related to that.
  7. Good, easy to search, easy to read documentation is manna from heaven and not all languages have it.
  8. Some languages require environments that are a pain to set up
  9. If you send code to a friend to run on their computer they need to have that environment set up to do so, so you may want to consider what people near you are using. If you have a friend in an office who uses and understand python they may help debug your code on their machine, but they’re less likely to install or learn python to do it.

Python comes up a lot because it’s a high-level, imperative, dynamically typed, interpreted, fairly simple, mature and popular language with a lot of useful cases. It’s often used for quick scripts because it’s easy to write something standalone, quickly. That’s why it’s mentioned alongside languages that share some similar traits: JavaScript, Perl, PHP, Ruby, Lua. You’re less likely to be introduced to something that has to be compiled each run, works low-level, is less flexible with variable typing and takes more effort to make mistakes.

And that is why I love Ruby. The most zen of languages. Designed on a principle of fun. But it’s not the most useful.

So what I recommend is finding a language you like. The biggest obstacle between someone new and coding expertise is lack of motivation. You want something that’s easy to set up, easy to understand, easy to get help with, easy to run, easy to debug, easy to get productive results quickly. And that’s why “Python” will be in every answer to the question, but you need to find what’s best for you. Some people will, without a single drop of sarcasm, suggest that C or C++ are the best learning languages because it forces you to learn the complexities of the language and makes it easier to transfer those to other languages later on. I wouldn’t be that bold, but everyone’s built different and I think there’s room for souls of all colours in this world so I don’t knock the advice. Just make sure you’re not taking on your first language only because it’ll get you a job because you may not fully understand what you’re about to take on - and if you’re going to go into proper code-writing then you’ll be learning the complexities, patterns, metapatterns and so on of various languages eventually anyway. Even if you start in Python they don’t put parallel programming on page one of the book - but learning about threads in Python down the line can still help you prepare for working with something like node.js, for example - even learning/scripting languages have complex ideas you can dip into that help elsewhere.

Finally I’ll just say that you have to love coding to become a coder. A good coder needs to be tenacious. Someone who can fail repeatedly and carry on because of either a love of solving the puzzle or a deviancy that gives them tolerance to, or enjoyment of, emotional pain. It isn’t for everyone. In my experience people who don’t love it don’t do it, those that really love it can become entranced with a kind of soul-bond with the computer via their analytical thinking to solve problems (sometimes called “the flow” or “the zone”). So find what you love. You can work from there, stop when you have to, and if you can’t end up senior developer you can at least write a cool script.


100% dependent on the domain you’re moving into, and what your colleagues are using there. Below are some thoughts in both testing and system development.

  • Perl is rarely used in the various industries I’ve been in, aside from a lot of individual scripting or systems management.
  • Python’s quite useful in ML or data scenarios.
  • Java and C# are heavily used in lots of the worlds I’ve been in (eCommerce, finance, B2B, platform development).
  • Ruby has lots of usage as well.
  • C/C++ are heavily leveraged in IoT or embedded systems.
  • Javascript, and its billions of variants, is a critical skill

I’d say learn a good OOP language (C# is my preference because I like the stack), plus spend time learning Javascript. Additionally, learn a scripting language like Powershell or one of the *nix shell scripts. Those fundamentals will take you a long, LONG way.

Sorry to promote my own stuff, but I have a course here in the Dojo that’s Coding for Non-Coders. I’ve had great feedback on that course as well as when I run workshops with it.


Thanks @jimholmescc
Plenty to ponder and I will forward on the info.
They are looking at C but as you say Any OOP language helps

Will also point them in the direction of the course

1 Like

Good shout @mirza TAU is always a good starting point

1 Like

Thanks @kinofrost for a comprehensive reply!


Udemy is a site that I like to use for Python. Also, there is FreeCode Camp


When you talking about programming you probably mean test automation. Here are the concepts and best practices that would stay the same regardless of what language/framework you use:
Also, here is a way to practice for free online:

  • any scripting language of a OS as they are often needed for different tasks: CMD, Bash, Powershell
  • Groovy: is used in different tools to fill the gaps (e.g. SoapUI and Katalo) and is a full OOP language which can be written in a script style (no class and method definition needed). Due to its dynamic typing is very flexible. Further it has many useful additions (e.g. a own DSL for time related topics e.g. + 2.hours -3. minutes) and simplification. It’s also compatible to Java and let you use all of its libraries.

I never did a real course in any of this. I grew with my tasks, searching and teaching myself whatever I needed next.
Most times self-motivated to create tools for my work.
Aside some dedicated automation tasks others asked when I had reached a certain level. Even here the level of detail, especial the technical aspects, where mostly up to me.

I suggest too to start with work small (scripting) tasks in your day job and going step by step.


Great, thanks @tamim !

1 Like

Thanks @testrigor but I mean programming in general, although it does lead itself to test automation

1 Like

Thanks @sebastian_solidwork
Scripting In day to day can be difficult when you don’t do it, I think they will do it outside the job, put in the hours to learn

1 Like

As an architect who works professionally in 8 or 9 different coding languages, I must say…

This is one of the most, thorough, accurate, and helpful forum responses I’ve ever seen to an open-ended question.



Thanks for the support and good to hear from a season professional such as yourself @dacoaster
Lots to ponder

1 Like

I regret never taking special time out to learn a language well. The job of a tester is too often reactive. Be careful to push back and make time for formal training, for example I have to test a lot of MacOS and IOS, and I really hate it because I’ve got very little experience, and the job does not give me enough space to. All the python I know has been learned on the job and on weekends too. too late on that now, I love it.

@kinofrost has pretty much dropped you the whole overview on how to choose what to learn. Chris knows his stuff. Worth checking out his other well composed answers by clicking on the profile pic.


/\ This person also knows their stuff and has valuable things to say. I mean to say this frequently but I never feel comfortable doing so without extra fluff around it, so I’m just saying it now.

Edit: Giving in to adding fluff to my reply - the love of coding and the fascination of turning text into action, with the tenacity to keep trying when it lets out a fart and sets on fire, is exemplified perfectly here. The learning is useful, the knowing has utility. And I agree entirely, and I’d also add that understanding how code can come together to solve a problem will make you a better tester even if you don’t use any code yourself. Time well spent.


Related note: if one considers coding that leads to test automation, particularly UI automation, especially if web UI, but can also apply to mobile app UI, regardless of language chosen, it would be wise to learn javascript (unless that is the chosen language) and the DOM. For there is much that can be done via javascript execution (in browser) when encountering limitations that you can’t do directly with Selenium, that is true at least in the past.

The javascript and DOM knowledge will also help you test the app better.


Scripting In day to day can be difficult when you don’t do it, I think they will do it outside the job, put in the hours to learn

Don’t they type the sightliest bit at command lines?
Copying some data (xcopy, cp …) or executing programs? That is a start!
I advocate for tiny steps. Just things that help them in their day-to-day work.
Start with simple one-liners. Things you can do easily in your cmd tool without a sophisticated IDE.

I still wonder how they to don’t started the slightest bit of scripting at their job when they are now wanting to do a coding training. It looks like they see a need for creating their own code …

Much of my development actions is to learn how things work and what I have to do do fulfill my needs.
Sure, I have a growing base knowledge. I also have always ideas behind my current knowledge leave.

Go on when you don’t want to cope with my lack understanding.
Your context might be very different from mine.