Advice for a reader: getting started in computer science
Every once and a while someone writes to me out of the blue to ask for my advice. And sometimes fate surprises me with a few unanticipated free minutes and I am able to write back. Yesterday, a young man named Mason Moran, who is about to start his computer science undergraduate studies in the Fall after a tour of duty in the Navy, wrote to me and asked:
Is there any advice you can give someone starting in this field that will help them thrive?
I had a last minute change in my schedule that freed up a handful of minutes, so I spent some time replying to Mason. I thought that I would share my slightly edited response on LinkedIn on the chance that it might be useful to other folks. The advice could, IMHO, be useful to folks other than aspiring computer science students.
Mason,
Thanks for reaching out. First off, my Dad was in the Army in Vietnam, and my Grandfather served in the Navy in WWII. You have my appreciation and gratitude for your service.
My biggest pieces of advice to you, and the things that have helped me out over the years, are: be curious; be confident; be persistent; have a plan; and don't be afraid to take intelligent risks.
The hardest one of these 5 things for me was being confident. I grew up in rural central Virginia at a time when computers were scarce, and where the schools weren't really set up to help incipient computer scientists get their start. My parents hadn't gone to college, and the most likely thing for me to do when I graduated high school would have been to go into construction which is what my father, grandfather, and great grandfather had done. I chose a different path. But, for a very long time, I felt like an imposter on the path that I chose. I felt like I didn't belong wherever I was: in the internships that I got; in graduate school; at academic conferences where I was presenting papers I had written; and even at Google and my startup AdMob.
I think that the biggest reason that I felt like an imposter was that I was ambitious, and was always pushing myself really hard, trying to master difficult material, or putting myself into situations where I was surrounded by a lot of other capable folks and doing things at or beyond the limits of my experience. I hadn't accepted that pushing myself this hard was hard. No one ever told me that it was normal to struggle a little bit with hard things. I was constantly convinced that I was the only one struggling, which just made the struggle worse.
A good story to illustrate my "imposter syndrome" is from my freshman year in college by which point I was convinced that I wanted to become an expert in programming languages and compilers, go to graduate school, and eventually become a professor who taught these subjects at a good University. At the time it seemed to me that a natural first step would be reading and understanding papers from prominent journals like ACM Transactions on Programming Languages and Systems (TOPLAS) and Proceedings of the SIGPLAN Conference on Programming Language Design and Implementation (PLDI). I remember the first issue of TOPLAS that I picked up had papers in it with titles like "An interval-based approach to exhaustive and incremental interprocedural data-flow analysis" and "win and sin: predicate transformers for concurrency".
I looked at these papers as an 18 year old first year CS student and was totally lost. From my vantage point at that time I could barely conceive of a version of me who would be able to understand this material, much less master it. But I had more stubborn in me than self-doubt, so, I kept reading and attempting to understand the papers in these publications, very slowly at first, stopping to read some of the references that I needed to understand before I would have any hope of comprehending the papers themselves. Over time I got faster, and required less background research to fill in the holes in my understanding. After a few years I felt less incompetent. By my first few years of graduate school I was publishing my own papers in peer-reviewed conference proceedings (although funny enough, never TOPLAS or PLDI). And by the end of my graduate career I was being asked to sit on peer review committees for conferences where I would have to read stacks of submitted papers relatively quickly, provide critical feedback to the authors, and give my recommendations to program committees about which manuscripts I thought were publication worthy.
It took years of hard work to get to that level of mastery, but the task wasn't impossible, even though I thought it might be at the beginning.
Giving yourself permission to struggle with hard things is important. It's normal. Everyone encounters difficulty, and overcoming difficulty usually implies struggle. The only folks who don't struggle are those who don't challenge themselves enough, or those who give up too easily. So push yourself and embrace difficulty when it comes. Nothing worth doing is easy.
As you study computer science, you will find that some things, e.g., acquiring a new skill, being able to complete a meaningful project, tracking down the root cause of a pernicious bug, developing a new algorithm, proving an especially tricky theorem, or having enough impact in your job to be recognized by your peers and your company, can take a long time and require a lot of effort. Having the persistence to stick with these challenges until you've conquered them is more often than not the path to a career filled with fulfilling and distinguished accomplishments.
Curiosity can be a hard thing to cultivate if you don't have it, but, being interested in lots of things, especially in the field of computer science, can be an extremely important trait to have. Computer science is a broad field, and one that changes constantly. If you are not curious about things beyond the narrow slice of the world of software that you're focused on for your work, your hard-won skills can become irrelevant without you noticing. Being curious about what's happening around you and in the industry at large, and acting on that curiosity to learn and grow can help you stay on top of your craft, and open up opportunities that you might never have if you allow your skills to ossify.
Finally, having a plan for what you want to accomplish over a multi-year time horizon can be an amazing asset for you. It can help you focus when you're struggling. It can help you use your time well. And it can even help you figure out which risks are worth taking. For a very long time, from age 16 through 30, my plan was to be a computer science professor. Having that plan helped me not be distracted over the long years I spent in grad school, and informed which risks I took and didn't take. A very short while after I joined Google, my plan was to be a head of engineering at an important Internet company. (I had no idea what that meant, but it was my plan anyway!) That plan helped me decide which opportunities to pursue, which holes in my skillset to fill, and which risks were worth taking, particularly in terms of taking on new challenges and roles.
It's totally ok, and natural for your plan to change over time. Even if it is going to change, having a plan can be a very, very useful tool, and the difference between a life where you feel like you're being tossed around by forces beyond your control versus feeling like you're driving and that your destiny is mostly in your own hands.
Hope that helps. Good luck.
-Kevin
NerveLink Solutions ?? Privacy & Identity Management ?? Data Security ?? Business Growth Solutions ?? IT Manager
4 å¹´This is inspiring! Advice is a piece of information needed for you to grow and excel in what you already do. Never let yourself limit from learnings you may experience through time. Be curious enough what awaits in your door waiting to be discovered. And be confident that you can give it a go no matter where the instances may take you.
Leadership Thinker, Writer, Speaker Founder of World Spiritual Centre
7 å¹´Wonderful and invaluable advice...
Senior Product Manager at WegoPro (Part of Wego) | Ex-Entrepreneur | EdTech | Fintech | Travel-tech
7 å¹´Amazingly stupendous....
Problem Solver / Innovator / Investigative Technologist / Humanitarian / Performance-Enhancement
7 å¹´These same visual simulations can also be used in any Innovators designs, what comes up first to use and arrive at solving the problem usually turns into many different varieties to come to the final conclusion. The thrill to look up and actually find your best equation gives you the trust to sit back and fold your arms behind your head feeling accomplished. Innovators success is not the final piece in the equation it is the hunt for the best solution, most will tell you they are still refining the best solution. Ask any hunter making the kill, it isn't the greatest feeling having killed the prey, it's chasing the prey that he will best remember.
Open to Employment
7 å¹´Probably a good idea for the 21st century.