If you like the project, please give it a star ⭐ It will show the creator your appreciation and help others to discover the repo.
✍️ About
The guide contains various soft skills that are usually (but not mandatory) required for various software engineering positions, and that is independent of:
- Expertise in a specific programming language or software technology
- Experience working with a particular platform
- Your age or any other characteristic you can imagine
Cultivating the following abilities will not only enhance your prowess as an engineer or developer but also transform you into a delightful colleague whom others will eagerly collaborate with (though, of course, we can't make any guarantees 😉).
💪 Responsibility
- Clearly define the tasks you're working on and be able to answer questions like:
- "Why am I working on this particular task?"
- "Why is this task important right now?"
- Assess and set deadlines for current and dependent tasks, keeping in mind their priority and impact.
- Consistently complete tasks before the set or promised deadlines, avoiding the need for reminders and uncomfortable conversations on both sides.
- Communicate any issues, roadblocks, or concerns to your team in a timely manner so that everyone stays informed and can adapt accordingly.
- Recognize that your team relies on you. If you need help, don't hesitate to ask. It's completely normal and fosters a supportive work environment.
- Be proactive in assisting your colleagues when they need help. Take responsibility for their success by offering your expertise and guidance.
🍱 Being Organized
- Make your own schedule when you feel you'r most productive
- Don't delay the most challenging or annoying tasks: it's better to get "rid" of them as soon as possible:
- Solving the most challenging tasks first, will give you a positive vibe, rather than draining your psychological energy
- Take care of yourself:
- If you feel healthy and happy, then your work will reflect that as well
- Sleep enough and make that more consistent
- Eat regularly and drink a lot of water
- Find time to exercise. Even having 20 minutes excersizes everyday will make you more energized and healthier. Remember, you don’t need hours of excersises to be healthy and look good. Consistency and discipline are more important here as well
- Clean up your workspace:
- What's the point in living in a mess? - Your workspace (both digital and physical) should be organized and minimal - don't keep outdated and unused things
- Our work takes most of the time. Do you want to be surrounded by a mess most of your life?
- Personal knowledge and code base should be also well organized. You should be able to find what you need with ease
- Make frameworks and libraries for yourself:
- By organizing programming solution as reusable packages into different categories, you will build up your own framework collection and be able to reuse it and later save a lot of time
🐵👶 Evolving
- Always evolve:
- There are numerous tutorials, articles, guides, books, podcasts, open source projects and other materials that are valuable sources of knowledge
- Remember: the lack of experience can be partially fulfilled by knowledge. The more you know, the easier for you to pick up something new and dive in, even without remembering specifics
- Make it your daily routine:
- Have a list of learning materials that you need to learn
- Be disciplined and invest time and energy to educate yourself, everyday by a bit
- Have your own projects:
- You personal, private projects may develop slowly, but one day you possibly be able to monetize them, or possibly create your own company
🦹♂️🦹♀️ Teamwork
- Know tools that your team uses
- Don’t be afraid to communicate with your clients, even if those are inside your company
- Be able to effectively collaborate in your group or team as well as with other grops or teams that have or may not have direct relation to your work
- Reflect on yourself and your work during the communication process with your teammates
- Empathy. That's what makes you a great human being and as a result a great professional
💡 Problem Solving
- An ability to split big chunks of work:
- A
TASK
should be split into subtasks such as:T
,A
,S
andK
- Be able to define coupling between the subtasks and start resolving them one by one
- An ability to find easy (relatively) solutions for complex tasks
- Being able to understand that each task has many possible solutions
- Being able to find those solutions, evaluate them and select the most optimal one for your current context and environment
- An ability to make sure that a task is really solved
- An ability to explain and formalize a problem - that is a half way in resolving it
⌨️ Programming
- Cultivate the ability to write clear, comprehensible code that is both maintainable and extendable, ensuring ease of use for yourself and others.
- Master the art of effectively documenting your work, adhering to the standards and best practices relevant to your specific context or workplace.
- Develop the proficiency to work with code written by others, which includes:
- Performing code reviews, refactoring, and optimizing existing code to enhance its quality, readability, and performance.
- Emphasize the importance of testing your code by writing unit tests and, when necessary, UI tests to ensure its reliability and robustness.
- Foster a growth mindset by actively seeking feedback from peers, participating in code reviews, and embracing opportunities to learn from others.
- Develop strong debugging and problem-solving skills to quickly identify and resolve issues in your code and the code of others.
- Prioritize clear and open communication within your team to facilitate collaboration and a shared understanding of code structure, design decisions, and project goals.
- Embrace the principles of clean code and adhere to coding standards to ensure that your work is consistently of high quality and easy for others to comprehend and maintain.
🏗 Architecture
- Develop the capacity to quickly and efficiently immerse yourself in new technologies.
- Gain a deep understanding of the specific use cases and scenarios for the architecture you're using or developing.
- Hone the skill of designing, maintaining, and refactoring architectural solutions.
- Be proficient in identifying and integrating existing solutions instead of reinventing the wheel (although, in some cases, a reinvented wheel might be just what's needed).
- Acquire the expertise to design and build APIs, frameworks, and modular systems that can be repurposed across various software products.
- Stay up-to-date with the latest trends in architecture and adopt best practices to ensure your solutions remain relevant and efficient.
- Foster collaboration and knowledge-sharing within your team, as this promotes collective understanding of architectural decisions and creates a unified approach to problem-solving.
- Strive for simplicity and elegance in your designs, as this often leads to more maintainable, scalable, and robust solutions.
- Develop a solid foundation in core design principles and patterns, enabling you to make informed decisions when designing architectural solutions.
- Prioritize security and performance when creating architectural solutions to ensure that your systems are robust, reliable, and can stand up to real-world challenges.
💼 Business
- An ability to use various metrics as arguments
- Willing to teach and mentor other people
- Participate in the hiring process, helping them out to adapt to a new work environment and culture
- An ability to speak the same language with either developers or business-oriented people, ask appropriate questions, structure your thought process and give appropriate and contextual feedback
- Being able to understand how business decisions affect the process of software development, prioritization of tasks and features
🙋♂️🙋♀️Contributing
Please note that this is not the ultimate guideline about soft skills. If you feel like there is something that can be added and/or changed, please let me know.
👨💻 Author
🔖 Licence
The project is available under MIT Licence