My thoughts would be,
Before I throw in my 2c worth, these would be the questions I ask:
Are you a web or a desktop programmer? Do you focus on front or back end? What are the tools you will be using on a daily basis. What is the product you are working on?
Once you have answered these questions, the concepts you need to know will become clear to you in no time, because you will be asking the right questions :)
A big one for me is Composition ("has a") vs Inheritance ("is a") in OOP. A car has wheels. A monkey is an animal.
My personal top three should be something like:
With these 3 concepts clear, any programmer can change platform, language
Lets split the programmer in 3 pieces: Pro, Program, Grammer
Always be professional. Do focus while coding in standard way.
Focus on single language and do program with many concepts and different tasks. And then only go with other language when you feel "I'm okay with this language".
Do focus while coding like with semicolon, comma, naming conventions, etc.
You can see all 3 lists have the word focus. So the best top 3 concept for every programmer is focus, focus, and focus.
You might also be confused why did I split the programmer to pro, program, and grammer instead of pro, gram, and mer. Its because we should add sugar on our skill so first one is pro and then we add sugar gram on pro thus pro+gram is program and third we add sugar mer on gram and hence gram+mer is grammer. By which you know every programmer steps are adding sugar to previous skills.
Principles, principles and again principles. In every science, in every field, in every aspect of life - everything is based on principles. Know the 10 principles and not 10 000 impementations.
Simplicity, reusability, security, maintainability, design patterns, architecture patterns, principles like KISS, SOLID, DRY and many others.
Functional programming, OOP
The Internet, Web, networking, TCP/UDP, HTTP, HTTPS
This question on Quora has some good answers.
Every software engineer should know how to debug, log, test, measure benchmarks, handle error/exceptions, write good comments, documentation, make Pull Requests and other git basics, make a transactions, optimize, fix bugs, refactor code, refactor architecture, receive notifications about system health, errors, new versions released, maintain and support the system in general.
Primarily:
If a problem is not completely understood, it is probably best to provide no solution at all.
English skills and ability to name variables, functions and everything else correct.
After that Social science, psychology, management, writing, patience.
Also business skills, business analysis, system analysis.
top3... thats hard esp. to put an order on them.... I will start with the classics.... ACID & SOLID which are basic principles used in software design.
For me those are the most important principles :)
The next thing is time complexity :) and i could go on :) but 3 it is :)
Anup Kumar Maharjan
Front End Engineer
Knowledge of the situation, Knowledge of the aftermath, Knowledge of the coding