Design of Code
As I had started coding a few months back, I realized that programming, processing, computing and such words are big oceans in themselves which work on algorithms and logic. The reason I compare it with an ocean is that one can dive as deep as they want and still have some sense of satisfaction of understanding of codes. Syntaxes no longer look “cool and alien”. There is a different feel to be able to understand those lines of code which feel like a conversation. The code is like a presentation in itself for a coder. Every line speaks for itself and defines functions of the code. Recently, in my class of Advanced Programming, I learned p5.js, a JavaScript Library for processing and a few concepts of object-oriented programming. In the course, I was supposed to come up with an idea of a solution with my team in the boundaries of e-governance and develop a prototype for it. After we had decided to work on connected mobility, we made a blueprint of the idea about how the product is supposed to work. Being from a design background, in the blueprint, we came up with screens and functionalities of every screen in the digital interface. From here we were supposed to make class diagrams for entities. This particular part was very challenging for me as I was thinking completely in terms of screens till now. I had to go away from screens and think of a much bigger picture to analyze the different entities and the roles they would play in the whole system which would be then used to create a code. This is when I understood the meaning of object-oriented programming and its use. It makes the code simpler, understandable and functional. It combines all the objects while defining each of them and their functionalities at the same time.
Designers possess an advantage over engineers while coding. “Design is a plan or creation of product or service with the intention of improving the human experience with respect to a specified problem.” With this definition, a design is supposed to solve problems. Designers have a very different approach towards any problem. Their solutions are not limited by the resources available, competitor’s products and commercial value. Their solutions go beyond these concepts and think in a way which is rational as well as irrational and technical as well as artistic. At the design stage, the designer can go wild on ideas and solutions and then can narrow it down. A design does not simply cater to needs but is also empathetic towards wants and behaviors of people. This makes designers view coding with a different lens. For them, the code is design as well. For the same problem, designers can have a zillion solutions for problems which come up which coding. Their plan of code and structure will be different from that of an engineer as would be their approach towards everything. It is important to view programming from a designer’s point of view. Also when a designer codes he understands the backend and implementation of the backend as well. Through this, he is able to understand the system in a better way and design accordingly for it.
Advanced programming concepts lead to an insight about the system which goes behind the code. This, in turn, helps the designer understand and design better for the different stakeholders of the system. It also gives an insight into how far a designer can go while designing and implementing.
In my experience, the application of code helps the most to understand the concepts of programming. Developing something which is worthwhile makes them explore aspects of programming and things they can do to present their prototype/final product in the best way possible. Real life problems give them real-life challenges and since they are more used to solving problems for users, they are able to solve the problems keeping the user at the focus. They should be taught solutions and functions which are more problem related, has real-life implications than something which is extremely technical and does not require much creativity.
In an interview with David Kelley by Bradley Hartfield, David Kelley, founder of IDEO says that a designer goes beyond to fix someone’s needs. Their solutions are more than simple functional designs to solve a purpose. Designers possess a social sense towards problems, they have creativity and moreover, they can come up with a zillion ideas to solve a problem. Everything is questioned in the field of design; every purpose is thought through and brainstormed to provide something which goes beyond the predefined meanings. He compares engineering with design and says that design is messy while engineering is not. Engineering is implementation which works on a certain set of rules to solve problems and hence the only purpose is to implement a functional design. The design is making sense of mess and entangling elements to understand parts of a system to come up with solutions which cater to every part. Due to their practice, designers are very used to getting ideas that they do not care if someone uses it and builds something out of it. Design requires flexibility. This flexibility allows them to think beyond what is possible to come up with something which is bizarre and then improve it to make sense out of it. After brainstorming on a lot of ideas, designers start to narrow it down. For them, a user is a chooser so they try to bring in real life users to analyze the iterations and try to understand their analysis to come up with a design which is most user-centered. Design culture requires people to participate in other people’s problem and that is how designers brainstorm together to come up with a bucket full of ideas.
Object-oriented programming provides designers with an edge to understand programming. Since it uses objects, classes, their attributes and functions to define blueprint, it becomes easier for the designer to code it. Everything is defined in OOP and same class can be made to perform different functions without having to mention entities/objects repeatedly and individually for every time a function has to be called out. It also provides another lens to understand the complete system which in turn helps in design thinking.