Mastering the art of development
Despite being a central aspect of a software engineer’s career, the art of development does not receive its fair share of the limelight in and around campus programming communities. The focus is predominantly on competitive programming. High performance and great ranks in competitive programming dominate the conversations of budding college programmers.
Why competitive programming is valued more ?
But how important is the ability to find the time and space-efficient solution to a problem in a software engineer’s job ? Having worked in the industry for enough time now I can say not much. The constraints in real-life problem solving are very different from competition questions and usually sub-optimal approaches also work well. “Why then are companies biased towards programming questions in interviews rather than development projects ?” After receiving a job offer, I posed this question to my interviewer. “Smart competitive programmers generally tend to be better at their jobs”, he replied.
The conclusion I drew from the conversation was simple. “The skill of problem-solving developed in competitive programming is transferable to one’s work”. Although a good fraction of your job might be coding the back-end, front-end, interfaces, etc which doesn't necessarily require optimization and brain-storming. The ability to look at a problem from various angles, breaking it down into simpler chunks, thinking about efficiency trade-offs, etc. ( prime foci of competitive programming ) enhances your productivity at work.
Then why development experience is important ?
Still, I firmly believe that an early investment in the art of development reaps undeniable benefits in one’s career. I have seen engineers with early experience with development are quick to catch on to the tech stack being used. They understand how to work on shared code bases with git, take part in group discussions, test the code rigorously from the user’s perspective before deployment, and work on consumer feedback to make improvements. Competitive programmers get a sudden shock in the work environment. The skillset required to work is completely alien to them. From being a celebrity on competitive platforms, they sometimes end up being left behind in the workforce. So it is certainly worth trying and making a few projects with your friends or contributing to open-source development.
Path to mastering development
The following is a simple series of steps to learn application development-
- Learning a framework
- Product development
- Deployment
- Feedback and product improvement
Let’s now discuss each in detail.
Learning a framework
The boon of being in the 21st century tech world is that you can do anything that you can imagine. There are tons of free resources to learn any framework and the frameworks themselves are so evolved you can achieve desired functionalities with just a few lines of code. Popular formats are mobile apps and web apps. The business logic for complex data-driven services, machine learning, blockchain, AR\VR, etc are made available using mobile or web apps as interfaces. There are three ways to learn any such framework: documentation, video tutorials, and regular class format. Every individual has different preferences that suit them. Hence, no suggestions here. Just pick a framework and business logic and start with something simple with an easy UI.
Product development
After making some simple applications, you’re ready to make a product for real consumers. The issue many people face at this stage is with ideation. We look around and see that every idea we could imagine is already implemented in some shape or form. A piece of amazing advice I received from my dev mentor here was “Everything you can think of is already implemented. So use all those applications. See what’s missing or can be improved. And implement it”. This was the best advice I could have asked for back then. It eases the pressure of thinking out of the box and enables you to focus on what’s important “developing a product”.
Another issue seems to be the structuring of code and poor UI design. These are two aspects of product development that one develops with experience. If you worry about professional ways of structuring or improving the maintainability of your codebase in the very beginning, you will end up losing a lot of time and might not end up with a product. UI development also works similarly. There is always a way to improve the flow and appeal of your UI. But it is better to start with a simple, clean UI that doesn’t break on the user side. The more products you work on and the more iterations of the product you go through, these things will come naturally to you.
Deployment
Now you need to put out your product for feedback and improvements. At this stage, mobile app development is advantageous because you deploy your applications on the App store or Play store where users can drop feedback, ratings, etc. People generally don’t leave feedback for websites. Ask your friends and family to use the app. Request them to share genuine feedback. Don’t shy away from spamming your application link on social media or chat groups. The more people use your product, the more feedback you get.
Feedback and product improvement
The interesting and sometimes tedious job after deployment is gathering user feedback and fixing errors and making improvements. Once this phase starts, it keeps on going in a loop of feedback, fix, deploy, feedback, and so on. This stage might not be as exciting as making the product but it is equally if not more important. The success of your effort depends on how many people use the application regularly. One time users are missed opportunities. So each time anyone has any feedback, take it seriously, prioritize requirements, and improve your product.
The steps we just talked about are more pertinent for personal or small group projects. There are other ways as well to work on products. A prevalent one is open source development. A lot of famous softwares and frameworks are open-source where a community of developers maintains and improves it for free. It works similar to a company with the major difference being that you work for free ! Did you know Android is an open-source project ! There is also a popular open-source program by Google called Google Summer of Code ( GSoC ) where participants submit projects to open source communities that they wish to work on. Selected participants work with mentors to implement features while adhering to the timeline. It is very similar to your software internship. Google also pays a good amount to the selected participants and an opportunity to interview with Google for software roles !
I love working on products and taking feedback from consumers. The feeling of elation you get when you see that your product is part of peoples’ daily life and it makes their life easier and better is just priceless. You can check out my projects website, play store and github.
You can ping me on LinkedIn to discuss about product development and deployment for beginners. Would love to have a discussion with fellow developers and enthusiasts 😄