What Qualities should a Great Programmer have?

Photo by James Lee on Unsplash

What Qualities should a Great Programmer have?

Table of contents

No heading

No headings in the article.

We all developers want to be great programmers. But, What does it take to become one? Let's find out..

  • Programming fundamentals - In a world where every day some new framework and new libraries are being created, It's very easy to lose track of fundamentals of whatever technologies or programming languages we work on. We should keep our focus on the basics because basics never change.

  • Algorithms and Data structures - Knowledge of Algorithms and data structures is very important as it develops the programmers ability to think, solve problems and sketch the solution into code. Although there are a lot of data structures and algorithms, There are some that we must know :

Algorithms - Analysis, Searching and Sorting, Dynamic programming, Divide and Conquer, Greedy, Backtracking

Data Structures - Array, Linked List, Binary Tree, Binary search tree, Stack, Queue, Heap, Graph, Matrix, Advanced Data structures (Segment Tree, Trie, AVL Tree, Splay Tree, Red-Black Tree, K Dimensional Tree, Self-Balancing BSTs)

  • Clean Code - We are always under the hustle of writing code quickly. But, we should remember that we are the defenders of our own code. We should keep in mind that we are writing code not only for today but for future as well. Writing clean code is very crucial for any project. “The code works” isn’t where you stop; it’s where you start

  • Design Patterns and Design Principles - Knowledge of 24 GOF design patterns and Design principles like (SOLID, KISS, YAGNI, DRY, SOC etc.) are very necessary to becoming a rockstar developer. We should pay more attention to architecture than to prgramming.

  • Object Oriented Design ( aka Low Level Design ) - Knowledge of Object oriented concepts like Polymorphism, Encapsulation, Overloading, Inheritance, Abstraction, Interface, Class, Abstract Class, Static methods etc. Designing of systems using Classes and Interactions between them (Can use above 24 GOF Design patterns ); Also Understanding of creating UML diagrams - Use Case Diagram, Class Diagram, Activity Diagram, Sequence Diagram

  • System Design ( aka High Level Design ) - A developer should have knowledge of how to design a highly scalable, available and reliable system. So, some concepts that one should be aware of in Front End and Back End are :

Front End - SEO, CSR and SSR, Service worker, Micro Frontends, Multi-device support, Performance, Accesibility, Performance(LCP, FCP), Security, Internationalization

Back End - Caching, CAP theorem, Data-partitioning, Load Balancing, Proxies, SQL vs NOSQL, Consistent Hashing, Sockets, Distributed system, Servers etc.

  • Read a lot of code - A developer should read a lot of good code, be it a good open-source library, projects or one's own company's codebase. He should always make a note of how some good decisions are made in terms of writing code. Read, learn and repeat.

  • Debugging skills - A developer should have a carefully honed debugging skill. It doesn't matter if the codebase is not maintained properly or he has to navigate through a lot of sphagetti code. He should be able to do it without disheartening himself.

  • Write simple, understandable but logical code - There are million ways to complicate a code but only few ways to make it simple and understandable. So, we should always strive for how can we write code that any developer can easily understand.

  • Having a business focus - We developers should try to understand what's the business side of the code that we are writing. That way, We can know the importance of the work that we do, and see the bigger picture while implementing a feature. This will also allow us to move beyond the current application; Suggest ideas for new applications that can improve operations.

  • Don’t compare yourself with others - We as human beings always have this tendency to compare ourselves with other successful people. Although, This can provide a positive effect sometimes, But, mostly it has a negative effect. We should strive to become better than what we were yesterday. Only person, we need to compare ourselves is us and us only. We should remind ourselves how much we have to learn and work towards it. That's all

  • Respect for deadlines - We know that, sometimes in spite of our best efforts, deadlines can not be met. There can be multiple reasons for it and some are really not in our control. Respecting a deadline means we should take all possible steps in terms of efforts and communication to make sure the task is done in due time. But, It doesn't in anyway mean working on the weekends or working overtime.

  • A good team player - What does it mean to be a good team player? Give with an open-heart and receive with open arms. We should always be there to help our team members with any information that they might need. And, also we should not hesitate to ask for help whenever we feel like so. We all ( Frontend, Backend, QA, UI/UX designers, Product Managers etc.) want to work in a great team spirit.

  • Practice, Practice, Practice - We should not lose sight of importance of practicing. Be it, Our own personal projects, Part-time Job, Competitive programming, etc., We should always be involved in it. That way, we will always be in touch with our core skill.

  • A Positive attitude - At last, the most important one, We should always keep a positive attitude towards our work. It's very common to be overwhelmed sometimes due to production bugs, tight deadlines, not getting information that you need etc., But, we should always remind ourselves that things will get better, we just need to stay positive.