4 min. read

Theory is when you know everything and nothing works;
Practice is when everything works and nobody knows why.
Here we combine theory with practice: nothing works and nobody knows why!

Experience and Knowledge

Theory and Practice collide everywhere -
When we learn something we improve our knowledge,
When we practice it - we gain experience.

Practicing programming

My example topic would be C# Dependency Injection:

C# Dependency Injection done right

Theory

The theoretical part explains what is a dependency and what it means injection.

Image from the post:

Dependency:

A dependency is something a unit of work relies on.

Injection:

Putting a unit of work or data into other unit of work.

In practice

The practice is where we explore the actual code:

1
2
3
4
5
6
7
8
9
public class Blender
{
private ICutter mCutter;

public Blender(ICutter cutter)
{
mCutter = cutter;
}
}

The ctor contains the acutal injection: public Blender(ICutter cutter).
Thus learnt the method of Ctor dependency injection.


Knowledge is what we learned and practice contains some of the knowledge.

Fully realizing knowledge takes time.

This concept is known and practiced.
Yet,
There’s a missing piece!

The source to both - knowledge and experience.

The Potential!

Potential

You don’t know what you don’t know.

The potential is the source for all knowledge and experience.

It can grow indefinitely by exploring topics without learning or practicing them,
Just by keeping track of what you don’t know!

For example,
A beginner would not know about different programming languages,
Maybe they are aware of C and Java because they are exposed to it in their university.

So their potential is quite low at this point, their knowledge and experience are at the bottom because their only expertise is an Hello World program.

This is ok - because it can grow!!!

How?

Growing your potential

By exploring!

My own potential

I keep track of many things and keep adding sources, books, videos, references, api reference, discord channels, git repositories and much more!

Reading about the unknown it the first step to grow your potential!

Having a book about Reverse Engineering increases your potential to be a reverse engineer,
Reading the book increases your knowledge about Reverse engineering,
Reversing a program increases experience!

Your potential

What steps should you take?

  • Listen to conference talks and Podcasts.
  • Read tutorials about your favorite programming languages.
  • Talk with programmers - and listen.
  • Read discussions in open source repositories (Like github).

Keep recording your exploration.

  • Add materials and sources to your list.
  • Bookmark anything you find useful.
  • Write in your own words about knowledge you gain.
  • Build application and scripts after you gain knowledge.

This will help you to increase your potential which in come will realize it into knowledge and finally into experience.

Curiosity and Deep dive

Fuel your potential by being curios.
Deep dive into topics your are already familiar with.

Learning should be done like you are a 5 year old experience the world anew.
Keep asking yourself “How this thing works”, deep dive into unknown regions and unfamiliar code.
Make yourself at home in strange repositories.

Learning and experiencing code will help you to become a better programmer.

The hard part is - it’s a never ending adventure.
You will do it until later in your career you will be the source of potential for others!

Until then, keep reading, writing and learning :)


Thanks for reading!


Is this helpful? You can show your appreciation here: Buy me a coffee