Key Skills in software engineering

I am often asked about the key skills that a software engineer must possess as they progress thru their careers. In an effort to make life…

I am often asked about the key skills that a software engineer must possess as they progress thru their careers. In an effort to make life simpler for me I have compiled a list of various skills and topics that might be relevant along with a bunch of links to well recommended books.

Clearly, this can benefit from inputs from other experienced tech managers and so if you feel like there is something I missed, or a book you strongly recommend, please comment on this article.

Programming Language

A strong grasp on the language paradigm, runtime, type system, concurrency models, syntax, unicode support, features, weaknesses, debugging, static analysis, build tools and deployment pipeline. A familiarity with its standard library, regular expressions and other regularly used libraries and frameworks.

References

Operating Systems

Understanding the various sub-systems of an OS, specifically Linux. Complete clarity on concepts like process, thread, locks, interrupts, scheduling, memory addresses, segmentation, paging, select, IO subsystem, IO devices, file systems, shells, common commands etc.

References

Networks

Familiarity with the various layers of the OSI model and programming language APIs for network programming. Expertise in the TCP and IP layers as well as DNS and HTTP. Optionally, learn about SMTP and SIP.

References

Databases

Understanding relational row stores, ACID properties and SQL . Also learn relational column stores and NoSQL Key Value and Document based databases. Its also important to know about high availability, sharding and replication.

References

Browsers and the Internet

Topics related to the functioning of the internet such as DNS, HTTP, SMTP. Familiarity with HTML and the Document and Browser Object Model. CSS and its box model as well as responsive design. Javascript programming in the browser and awareness of resources that list current browser quirks and techniques. Other concepts such as Unicode, localisation, internationalisation, AJAX, caching, search engine optimisation, proxying, and the browser javascript event loop. Finally, performance optimisation for the browser as well an understanding of how Content Delivery Networks work.

References

Algorithms

An understanding of various data structures such as stacks, queues, linked lists, sets, hash tables, heaps, trees, graphs and matrices. Topics like time and space complexity of algorithms, big-O notation, recursion, sorting, searching, traversal/enumeration, string matching and search, greedy algorithms, dynamic programming, linear programming, divide and conquer and NP-completeness.

References

Code Design

Familiarity with object oriented and functional programming paradigms as well as design patterns, anti patterns, refactoring, test driven development, security and other best practices

References

Quality Assurance

Topics such as UI testing, Cross Browser specific testing, Integration testing, API testing and unit testing. Also styles and approaches to testing such as manual testing, automated testing, exploratory testing, sanity testing etc.

References

Architecture & System Design

An understanding of monoliths, service oriented, micro-service and peer to peer architectures. The use cases and distinction in various concurrency models including but not limited to blocking, non-blocking, synchronous and asynchronous, threading, actor based, reactive, communicating sequential processes, software transactional memory, coroutines, etc. Other concepts such as scalability, high availability, CAP theorem, optimistic and pessimistic locking, distributed locks, ACID, caching, queuing, batch processing, load balancing, consistent hashing, consensus algorithms, sharding, federation, data warehousing, relational and non relational stores, serializiability, Lamport clocks, service discovery, blue green deployments etc.

References

Productivity, Soft Skills etc

Too many topics to list but essentially anything that improves you professionally.

References

People Management

Topics related to people management, including but not limited to hiring, mentoring, training, coaching, organising, evaluation, monitoring, supervision, motivation, goal setting, conflict resolution, negotiation skills, delegation, communication and listening skills.

References

Project Management

Concepts such as project management such as estimations, agile practices, tasking, sequencing, scoping, time management, risk management, business continuity, disaster recovery, prioritisation and triaging, resource allocation, stakeholder management, retrospectives etc.

Product Design

Aspects related to understanding customer needs and solving for them.

References

Business sense, strategy and marketing

Various topics relating to business

References

Leadership

Ideas about leading as well as other topics that might be useful to someone in a leadership role.

References