
This week we were assigned the task of selecting a project to work on for the rest of the term. We were given a link to a website that had a link to 20-30 different project ideas and instructed to select 5 submit as our preferred project. The instructor will then assign both the project and the project groups based on the submissions. The projects ranged widely in terms of there objectives, the technologies to be used and specificity of the requirements. Some of the project options were web applications, mobile applications, audio applications, and a number of VR simulations. It was exciting and tricky sorting through the different projects. To me the big decision was whether to go deeper into a technology that I already had some level of competency in or to branch out and to try something totally new. I chose to prioritize the projects in which I could go deeper ultimately because most technologies become more interesting after you have some expertise and are able to test the limits of the framework.
While choosing a project is a significant fork in the road moment the decision over whether to go deeper or broader is common to anyone who works in technology. Since the start of this program we have been offered the repeated choice of learning something new or advancing in a technology that we already were comfortable. In CS 161 for example, the first class I took at OSU, we were taught Vim and then later given the choice between continuing to use it or to switch to a local text editor. Selecting Vim in this case meant gaining much more hands on experience with the tool and inevitable developing a degree of competency. Selecting a local editor meant starting completely from scratch with an editor that you may be more interested in or may have different features than Vim.
The advantages of seeking to learn a broad array of technologies are clear. For one they are the only way you can discover what it is out there. You are not able to know that you are working with the best tool for a given task until you have tried a large number of other tools. Secondly there can be a number of cross overs learnings that branching out can bring. Learning Javascript, for example, helped me to wrap my head around the concept of passing functions around as arguments- an idea that helped me later when I was learning about the nuances of C#. But there also are disadvantages to learning a breath of technology. For one you often learn the same skills but with different syntax. Each time you learn a programming language for example you have to learn the same basic commands such as how to declare a variable, or a class, or a function.
Going deeper, rather than wider, with your learning is interesting because you can build sizeable projects and because you strengthen your critical thinking skills. One of the most rewarding parts of programming is to see a the end result of large successful project. To see the different parts of the project finally come together, though, often requires a commitment of time and energy to a single set of technologies. Thus some of the biggest rewards only come from dedication to a more focused stack. Additionally the parts of a technology that are more advanced, and therefore often require the most critical thinking, are often reserved only for those who have a strong foundational knowledge of that technology. Thus some of the most interesting work that you can do as an engineer is again only reserved for those who are willing to build strong foundations on a particular technology.
In conclusion, I decided to prioritize the projects in which I had some foundation knowledge so that I can reap the fruit of a large successful project in them and also be able to try some of the more advanced features of those technologies.