To enhance programming skills, you need to focus on the following 4 topics.

  • Programming Languages
  • Data Structures
  • Algorithms
  • System understanding

To keep my answer short, I will not suggest any books, but keep myself limited to overview of each topic.

Each topic is a big subject of interest in itself. But you can try to grab as much possible gradually in long term.

Programming Languages

  • Never limit yourself to one language. Keep learning multiple languages – one procedural, one object-oriented, one scripting, one functional, etc.
  • Also, don’t try to learn too many languages in a short time span. Gradually keep learning one new language every year. But never forget the old one you learnt.
  • Don’t focus only on syntax. Focus on the paradigm of the language, its weaknesses and strengths. Understand where each language fits well. Learn what the language designed to offer.
  • Good hold on 3-4 languages will give you a very nice insight about these languages, which will be useful to you.
  • Keep practicing a lot. Almost daily you must write a program, even if it is a 10 lines program. Make it a never dying habit.

Data Structures

  • Learn all the basic data structures – array, list, tree, graph, trie, dictionary/map, set, etc.
  • Learn the advanced data structures whatever you can – suffix array, suffix tree etc.
  • Implement data structures in whatever languages you know.
  • Understand the basic operations (read, write, etc,) time complexity for those data structures.
  • Understand the strength & weaknesses of each of those.
  • Remember the data structure support by the language libraries (STL, classes etc.).
  • Keep playing a lot with those.

Algorithms

  • Learn all the easy algorithms – sorting, searching, graph algos, etc.
  • Learn all the advanced algorithms whatever you can – dynamic programming, backtracking, etc.
  • You need to master algorithm complexity computation.
  • You need to learn how to design your custom algorithm as per the need.
  • Keep implementing lots of algorithms.

System Understanding

  • Understand your target OS nature. What your OS supports? How a process is being executed? etc.
  • Understand program segments – data, text, stack, heap, etc.
  • If your language is based on virtual machine, then learn how your VM works at a high level.

Tools [Optional]

  • Choose a suitable editor.
  • Prefer compilers, build tools which follow the standards.
  • Learn static analysis tools, profiling tools.

Finally

  • Write a lots of code, compile, run, debug.
  • Read lots of code authored by others, may be from popular open source projects.
  • Keep learning new languages, new data structures, new algorithms, new tools year after year.

By : Swarup-Sahoo