What every programmer should know
I graduated in 1994, right at the start of software boom in India. Those days anyone and everyone got into software industry. It didn't matter if they learnt software engineering or not; heck, it didn't even mattered if they studied any engineering or not. Many learnt some programming language and jumped into the software industry.
Early on, we didn't know the skills needed to build software applications. "We", included universities, companies, managers, and programmers. We learnt on the job. We were helped by explosion of the Internet. Slowly, practices and procedures were codified, which helped standardising job descriptions, which in turn led to standardising the required skill sets.
Or at least that is what I thought.
I have been interacting with lots of programmers, who know a language or two, but not the essentials of software engineering. They know to code, but they don't know the basic algorithms; they can search and copy from stackoverflow, but not understand the impact of the snippet.
Instead of complaining about the lack of knowledge, I thought I will put together series of blog-posts that will discuss the basics of these topics. I have selected these topics with a specific set of crowd in mind.
I have experience only in an Indian market, and I have built only small and medium enterprise software applications. So, that's what I can talk confidently. Also, in India, most of the software programmers become managers after 8 - 10 years of experience.
With these in mind, I've selected the below topics for Indian programmers who have less than 8 years of experience.
So, here goes the list of skills:
- Algorithms & data structures
- Design patterns
- Designing systems
- Scaling applications
- Static code analysis
- Code coverage
- Need for peer review
- Types of tests (unit, integration, load, and stress tests)
- Mocking in testing
- Working with legacy code
- Refactoring of code
- Basics of security
- Programming paradigms
- procedural programming
- object-oriented programming
- functional programming
- declarative programming (SQL, regex, xslt)
- SQLs vs No-SQLs
- Messaging, queuing, and serialization
- Machine learning
- 12 factor apps
- Time & date
- Encoding, encryption, & hashing
- Evaluating languages & frameworks
- Open source software
- Problem solving
- Skill acquisition
- Working within a team
- Improving oneself
- Writing to communicate
- Presenting before a crowd
- Emotional Intelligence
- Gathering and understanding customer requirements
- Estimating projects
- Basics of project management
- Basics of running a business
I will continue to write on this topic. Bookmark this page and visit to check the new article. If you have any questions, tweet to me.
Like the post? Retweet it. Got comments? Reply.