In this post, I’d like to reflect on the things I’ve learned over the past week in CS3216: Software Development on Evolving Platforms.
Software engineering is not just about programming.
I’ve always thought that software engineering is 90% programming and technical capacity, but this is not true. A successful software project needs to do well not only in the actual building of the software, but in the processes they use and the dynamics of the people involved. Software matters, but people matter too.
This idea is further illustrated to me in our own Facebook app project. We have had to consciously examine our processes and our team dynamics in order to work effectively as a team. By clearly delegating tasks to each of the team members and addressing concerns early on, we can establish a smooth working environment and resolve conflicts.
Many of the skills that I picked up during my summer internship were not taught in school. We were not taught to maintain development and production environments; neither are we taught to work with other developers/product managers, nor how to lead a team of developers. The things I’ve learned in CS3216 so far have helped me develop the kind of skills I’ve not had much experience in.
Right now, I’m wearing multiple hats, one of which is the team leader. I’m still quite hesitant of being voted for this role - I want to code - but I do feel that this is a good opportunity to be versatile and gain experience in things outside of coding.
We’ve made the decision as a team to use Node.js for our application, because one of the core requirements is to have our app work in realtime. Having had no prior experience in Node.js, this was a fantastic opportunity to finally pick up and practice this technology. As a team, we began with only one member with some past experience with Node, and we intend to learn and master it through working on a real-life application.
I’ve only just started, but I’m already beginning to see some parallels between Python/Django and Node.js. One example I can give is their dependency management. The node package manager’s package.json is similar to the pip/virtualenv way of managing dependencies using requirements.txt. Another example is their templating systems. Django’s jinja2 and Node’s EJS are not exactly the same syntactically, but they do appear to obey by the same general structure.
NUS Computing students have had a good history of building NUS-related tools, such as NUSMods, Corspedia, and The Official TimeTable Builder. With our application (Fragen - ‘ask’ in German,) we wish to be a part of that history and solve problems that are in our immediate surroundings. We’re building a realtime Q&A platform for students and lecturers to help test and verify student learning.
To sum up, I’d like to outline my personal goals for this project, primarily as a reminder to myself.
First and foremost, I want to learn Node.js (includes npm, ejs and node modules) and any technologies I come across along the way.
Second, I want to gain experience working with other developers of varying working styles and learning as a team leader to ‘herd cats.’
Finally, being surrounded by people who are both smarter and more hardworking than I am, I hope to be further inspired to go beyond my comfort zone and work hard.
📬 Get updates straight to your inbox.
Subscribe to my newsletter to make sure you don't miss anything.