How to Keep Your Software Development Skills Sharp

The software industry is very dynamic. To continue working competitively as a software developer, you have to study on your time to stay abreast. Just a few hours every week could keep your game smooth. A lot of software companies offer...

Evaluating your Skills

  1. Know the bar. For those of you looking for a new job, know the bar for the position you are applying for. A recruiter can tell you or someone at that position in your network. It needs to be a specific and measurable goal you can target.
  2. Understand the definition of easy, medium and hard problems for each skill. Start easy and work your way up. Coding websites like leetcode have labels on easy medium and hard problems. For coding in general, an easy problem is about 50 lines of code, needs one data structure and method to solve the problem. Medium ones need roughly 70 to 80 lines of code, may need multiple data structures and have counter-intuitive corner cases. Hard problems need counter-intuitive approaches. Each problem needs to be solved in 45 minutes.
  3. Be aware of your skillset. A website like TripleByte can tell you what your strengths and weaknesses are. Take their test to start working on your weakest skill first.

Revising Core Computer Science Concepts

  1. Being in another discipline in the tech industry can make you rusty on your computer science concepts. Brush those up to have a smooth start to practicing coding.
  2. Understand time and space complexities. Production grade software is expected to be efficient. Time and space complexities are standard metrics to measure that. Time complexity conveys how long your program will take as the amount of data increases. Space complexity is a measure of how much space it will take for the same.
  3. Learn data structures. How we store data has a significant impact on how efficiently we can read, write and randomly modify it. Learn or brush up the abstract data types and implementation options of each abstract data type. A Practical Introduction to Data Structures and Algorithm Analysis by Clifford A. Shaffer is a good one to do a deep dive. You can buy a paperback or download the pdf for free. Learn the time and space complexities of all basic data structures at a minimum before you practice coding easy problems. Those are arrays, lists, queues, maps, and binary trees.
  4. Learn algorithms. Learn the algorithms asked most frequently at a minimum. Popular job search and professional websites will tell you which ones are. These change every year or few years. Know the trade-offs between time and space when you use a data structure in your algorithm or a combination of them versus another.

Practicing Coding

Most jobs need excellent coding skills. It is the long pole of keeping your skills sharp. Plan to spend a few hours every week to hone this skill.

  1. Pick a programming language. Choose a programming language you will feel most comfortable with for a few years. Python, Java, Javascript, and C# are the most popular languages of 2020 and have been around a while. Take the following into consideration while picking a programming language:
    1. Consider compatibility with the use case. Certain languages have better packages than others for specific solutions. An example of a use case is if you want to use machine learning libraries, the NumPy library of Python is popular as of 2020.
    2. Understand your team's skill level and preference. If the team has a strong preference and experience in one language, go for it as opposed to a comparable language. This is because all the development will happen in that language.
    3. Consider ease of use. Python is easier than Java for example. If you are going to write a V1 or an internal tool, no need to switch to Java which has great enterprise libraries.
    4. Look up the community support and popularity. PYPL Popularity of Programming Language website ranks languages by popularity based on their tutorial search. Look up community or enterprise support for your language of choice. The number of recent Git check-ins, development forum responses is a good measure of these. Enter this language in a job search engine's search bar. Compare this number with other popular languages in your area. Know the job demand for this language if you are looking for a job switch.
  2. Target multiple platforms. Keep up with the best language matches to popular target platforms like Ubuntu, IoT devices, EDGE computing, ARM.
  3. Language version. Choose the latest and most popular stable version of your choice of language to practice with. Learn the latest version and the features it offers. Be wary of jumping on the latest release. Sacrifice using the latest features to focus on your coding skills uninterrupted.
  4. Hone your approach. Programming questions usually ask you to solve a real-world or math problems using (a) data structure(s) and an algorithm. Your coding practice aims to use features of your language better and also to be able to map a real-world problem to an algorithm. Practice the problem with multiple trade-offs of time and space complexity. Fine-tune your solution as much as you can.
  5. Leverage your Resources. Books like Gayle Laakmann's cracking the coding interview is a great start. Leetcode and hacker rank websites provide playgrounds for you to write and run your programs without having to install anything your native machine. If you subscribe, you may participate in forum discussions and look at the recommended solutions with explanations. You may test your performance and speed with mock interviews. They have contests you can participate in to win money. Geeksforgeeks analyses types of algorithms popular at interviews and helps you identify the same.

Software Design

  1. Revise object-oriented programming concepts. Be prepared to answer definitions of abstraction, encapsulation, polymorphism, and inheritance even after several years of industry experience. You may be asked even if you apply for a job that does not need object-oriented programming in the role definition. Best to give an example as well.
  2. Brush up on object-oriented design. Practice class diagrams. Drill down on how the objects will interact with each other and what information will flow between them. Draw sequence diagrams to understand the sequence of these actions and their lifetime. Be prepared to explain SOLID principles.
  3. Brush up on design patterns. There are 23 main design patterns. Refer to the original Design Patterns by G4 authors. If it is too much to take in, read through programming idioms first. They are a good stepping stone to understanding design patterns.
  4. Learn new architecture patterns. Sidecar, pub/sub, hub-spoke, and circuit breaker are commonly used for enterprise software development. Better to study them beforehand to better participate in design discussions. See which implementations you will be using as a part of your tech stack.
  5. Get the latest training for system Design. Grokking the system design interview by Educative.io is quite comprehensive. Start there. See the system design of your software at work. Understand the trade-offs you made, the mistakes you learned. This is gold wherever you go.
  6. Enhance your API Design knowledge. You REST fundamentals should be strong. Learn to scale for millions of transactions per second. Always assume a fraction of the data may draw most of the traffic.
  7. Leverage your resources. Watch Youtube videos that walk through system design. Coding websites offer solutions for system design as well. Get certified if you find a useful course that is good value for money. Get a book on data-intensive applications if you may consider the solution architect role at some point.
  8. Learn SQL and NoSQL Databases. NoSQL Database Systems: A Survey and Decision Guidance is a great place to build on your educative.io knowledge. Know the CAP and PACELC theorems for database design. Know what ACID properties mean for a database transaction.
  9. Secure your code. Read up about Transport Layer Security (TLS), Open ID Connect (OIDC) standards and Role-based access management (RBAC).
  10. Learn integration and deployment pipelines. All code checked in needs to build, have 80% unit test coverage and pass all unit tests. All binaries deployed should be live and ready or running without fatal exceptions and restarts. The best way to ensure this state is to set up pipelines that automatically reject merge requests that violate these constraints. Orchestration of containers on top of virtualization is the industry standard as of 2020. Knowing the concepts is enough if you are not going to use it on the job.
  11. Study market requirements and quirks. European market needs software to contain EU national citizen's (Personally Identifiable Information) PII within European borders physically. Also, the Chinese government needs to know about every device entering and leaving Chinese borders. Familiarizing yourself with world markets can help you plan and design the product for multiple markets from the get-go.

Seeking Help

  1. Use developer forums. Forums like Stack Overflow, Leetcode forums, Slack channels, Reddit, Quora have very active communities that can help you if you get stuck somewhere. Just post a clear question and wait for the community to respond. Follow their post guidelines and formats to not have your question voted down.
  2. Ask successful friends. Ask friends who have recently cleared interviews or gotten promotions about how they developed their skills. Ask at least a few.

Testing Your Skills

  1. Take Skills Tests. Job search engine skills test are a great resource to know at which level your skills are at. These are good to showcase if you score well too. Another advantage is that they offer trainings that would get you to pass the skills test if you don't.
  2. Look at graph projections. TripleByte sills test evaluates your strengths and weaknesses and projects them on a graph for you to know your overall skills.
  3. Take mock interviews. Leetcode and similar websites have mock interviews for you to gauge your skills and timing as well. You do not need to apply to jobs you are not interested in just to evaluate your skill. Just take one of the online mock interviews. Ask a more senior friend to interview you as a practice.

Following Trends and Best Practices

  1. Subscribe to talks and conferences hosted by your favorite companies, meetups, and friends. This gives you exposure to current industry trends, real-world problems, and a wider network. Attend internal presentations and brown bag sessions to see what problems other teams are solving and what you could apply or help with.
  2. Research frameworks. Once you select a language, the next step is to decide which framework you want to work with (e.g. .Net, .NetCore or .NetStandard). You should be able to map your requirements to the right framework.
  3. Seek recruiter feedback. Ask the recruiter what you could do better in the future if they do not make you a job offer. You may not get actionable feedback. If you are lucky and you do, you'll have something to work on right away.
  4. Interview candidates for your company. Interview candidates for your company keeps you revise your basics and learn new ways to solve problems. Intelligent candidates have interesting and original ideas that you can add to your knowledge. It is also a great way to make industry connections. Even if a good candidate does not accept the offer, stay in touch with them just in case, they are a match in the future.
  5. Subscribe to industry updates. Sign up to get notified about industry trends. Stay ahead of the game by training yourself with promising technologies before they become standard. Breaking changes and vulnerabilities need immediate action. Be the first to know.
  6. Participate in hackathons. Hackathons usually have big sponsors and resources to learn new skills. If you have a garage project and you win, you could get startup funding at a hackathon. It's a great way to meet new people and get exposure.
  7. Explore the latest hardware and operating system specifications. New software updates can delight a user if they take advantage of the latest hardware and operating system speed. Design software to be portable and capable of running and taking advantage of the user's hardware capability.
  8. Contribute to open source. Contributing to open source is a great way to pay the developer community back. New developers can learn open source standards. At any stage, this is a win for all. Be aware of your company policy to contributing to open source before you do.
Update 02 June 2020
Category

System

Mac OS X

Hardware

Game

Tech info

Technology

Science

Life

Application

Electric

Program

Mobile