When interviewing for software engineering internships and asking what I'd be doing at the companies, I received similar answers of my role being to integrate existing platforms or doing some kind of fullstack work. If we consider the technical skills one would learn in this type of work, it's nothing that one can't learn on their own, as evidenced by the trillions of fullstack tutorials and the resources provided by the open source community. So what happens if instead of participating in a traditional internship, you use the summer to optimize your own education?
This is exactly what I wanted to find out when I told recruiters that I wouldn't be doing an internship this summer. My plan was simple: find a bunch of interesting things and learn about them. I made a list of a dozen areas of computer science and found free video courses and text guides that covered the basics of each area. Each course has around 20 hour-long videos, so watching at 2x speed while taking notes and reviewing for 5 hours a day would mean covering all the content in 4 days. Taking another 3 days to create a project using the concepts learned would mean that completing a course would take a week, perfect for learned a dozen areas in the dozen weeks of summer. [1]
The projects would also be structured so that they build upon each other. For example I want to learn game development, animation, and NLP, so I could make a game, then add animations to it, then incoporate NLP. Doing this would result in a broad survey of 12 areas of computer science while completing interdisciplinary and fulfilling projects - meanwhile a traditional internship would focus on accomplishing an arbitrary task usually in narrow scope and learning.
Wait but how much could you actually learn without an instructor or more structured assignments? You aren't reinforcing your knowledge with exams or class discussions so what's the point of learning all this then forgetting about it? The reason I chose to do this wasn't to learn in depth about any area, but to gain a general understanding of the landscape and build lots of small nodes of knowledge where I can then build from and between. When we encounter something new, we need to attach some context and structure to it to prevent it from floating out into space. Learning broadly is a powerful tool that maximizes the number of nodes that act as scaffolding from which to structure other information. There's another blog post in here talking about learning broadly and interdisciplinary studies that considers the cons and caveats, but I'll save that for later. In short, innovation seems to be made from deep knowledge that lets you identify problems more easily, then using shallow knowledge from other areas to make quicker and better connections, where you can then do more research as needed.
Now let's take a step back and this about this. If Princeton suddenly said "hey we're doing a 3 month course teaching you most of the computer science you would've learned in 4 years," people would go absolutely bonkers. But this is almost reality. Most of the courses a CS undergrad takes will be introductory courses that briefly goes over basic concepts and ideas in a subfield. [2] Our 12 week accelerator does just that, and if we factor in diminishing returns of the assignments and lectures in a 4 year study, then our DIY education has significant merit for learning a similar amount while taking 93.75% less time, and with well planned projects can even make your bank balance move the other way.
There are unique benefits of a longer education in that retention should be higher and you get to finish more projects in each subfield, but the beauty of modern computer science education comes in the form of the accessability of information and code. If you want to learn about a concept or figure out how to build something, all you need are words to phrase your question and to then direct it at Google. Shallow knowledge becomes almost as powerful as medium-level knowledge as long as you're motivated and have trained your learning muscles.
To summarize, in the context of learning and preparing yourself to learn computer science, spending a summer independently studying and programming seems to be magnitudes more efficient than learning through an internship or at a university. Unfortunately, I will not be able to test this theory out. When I told my recruiters that I wouldn't be doing an internship and would instead be learning on my own, one startup offered me a different kind of internship.
My goal for this summer is to learn efficiently, and for me, learning is done best with the absence of deadlines and with the freedom to explore and enjoy the amazing theme parks of computer science. A traditional internship is therefore completely unoptimal for my learning, which (hopefully) applies to others. [3]
Up to here is where my thought process was until a startup offered me a research role. I was confused as to how I could do research for them, as the only research I've done was just learning for myself. It turns out this is exactly what they were thinking. Whenever I research a topic, it's either to apply it to a project or for my general interest, so why not take my interests and then research and apply them to a company?
I was initially very skeptical of this as agreeing to work for them meant that I would be subject to their vision and decisions, however, I realized that this would be an unpaid internship so there would be no contract binding me to whatever bureaucracy exists within the company. Our relationship would be a symbiotic partnership where I would be free to explore my interests and apply my learning to existing datasets and applications to make real-world impact while the other party would receive valuable insight into technologies they can incorporate into their current platforms or utilize some time in the future.
That was a mouthful, but basically it's a win-win with minimal downsides if both parties are respectful. For the self-education mentioned earlier, each period of learning is followed by a period of applying, and having a research internship is a unique opportunity to wield the knowledge you've acquired and use it to solve a real, potentially messy problem. It's perfect training for your interdisciplinary learning muscles, not to mention the practice in communicating and turning abstract ideas into code and the feedback you'll receive on your code and ideas. The best part about it is that you have all the benefits of a traditional internship (as mentioned above, also including mentorship) while having complete freedom to take yourself in whatever direction you want since the goal is just to improve the company's existing position.
Speaking of which, the company also gets an amazing deal out of this as they receive feedback on their own product and ideas, and for small startups especially, everything is always super hectic so having a fresh pair of eyes could prove beneficial. If the intern is passionate and resourseful enough, they could even create the next big product that the company pushes out — it's like a startup within a startup!
Man I'm convinced that this is a great idea, but why don't more companies and students do this? For students, lack of green paper is probably a large deterrant. For those that cannot afford not taking a paid position, I wish you the best of luck, skill, and health. For everyone else, the best way to be able to paint your house green is to create a scalable paint generator, which often requires solving a problem, which in return can be done through innovation. Jobs that scale linearly with time should be a stepping stone, a waypoint that empowers you to create your own green machine, so what better way to gain a sea of shallow knowledge to help you innovate than pursuing self-education or a research role?
For companies, taking on a research intern seems unreliable as some may provide great value to the company while others won't accomplish anything. It's like investing in a startup, but instead of throwing money at interns, you simply need to acquaint them with your company and codebase. Very little risk and time invested for decent expected reward.
The most difficult but essential aspect of this relationship is mutual respect. In addition to understanding that the intern is there to learn and grow, the company must be willing to foster that mindset without putting extra work on the intern that does not align with their learning. It's difficult and rare to have these two goals align, but with proper communication, optimisim, and a little luck, it can defintiely become something unique. [4]
In conclusion, I hope more students and companies are willing to engage in this symbiotic relationship as there is great potential for education and innovation. For those desparately searching for something in the internship-deprived pandemic, I hope you found it here. Best of luck, skill, and health.
1: Just a note: this is not for the faint of heart. I am fortunate to have intrinsic motivation to learn on my own and have lots of experience with it as well. An ambitious project like this requires lots of discipline and energy and is not for most. ↩
2: I'm talking strictly about learning here so connections with professors and other students do not apply. Taking grad courses brings more value, but is not applicable to most undergrads. Also this post is written assuming basic programming skills. Skills such as debugging, googling, and problem solving are grouped under programming fundamentals as I do not see how one could meaningfully program without these. If you think that learning a field in a week cannot be called learning, you are probably right. I'm referring to a survey of topics rather than understanding the topics, which is what most introductory classes to anyway. ↩
3: I say hopefully not because I wish internships to be poor learning experiences, but because I hope others learn best when they're curious and excited to jump down rabbit holes. This type of learning encourages exploration and by extension innovation, not to mention how exhilarating it is. One unfortunate part of traditional internships is that we generally partake in them right when our CS muscles are starting to develop, when we are unsure of where or how we want to train them. Doing something more explorative seems like a good way to find what we excel at and/or are passionate about, so I hope more people realize this and pursue their own form of learning, whether it be within or without an internship. ↩
4: I say hopefully not because I wish internships to be poor learning experiences, but because I Academia is perfect for unpaid internships as the goal of the employer is konwledge, aligning very well if the intern's goal is also to learn. With companies, the goals of learning and making money often butt heads. ↩