A note to engineering freshers
A few guiding truths for fresh engineering students, to develop excellence and stand out.
A couple of days back, I was invited to speak at the commencement day for Scaler School of Technology's first batch of students. I'm sharing the same thoughts here in this post, with the hope that it helps some of the students starting their 1st year in engineering colleges. My thoughts here are based on my observations having hired, worked and interacted with, a few thousand engineers - at Flipkart, Udaan, and the rest of the startups that reach out for help occassionally.
I've structured this as a set of truths that have held the test of time for me. As you go through this, bear in mind the following caveats:
- These are my truths. If you try hard enough, you'll always be able to find individual exceptions to what I'm saying here, but statistically, these truths should hold.
- The core audience for this is those looking to get into software engineering (irrespective of your branch), but most of this should be applicable to more general engineering too.
- I've shared what it takes to develop personal excellence and stand out. Not doing these does not mean you won't get a job.
Truth 1: Learning to learn is a superpower
The process of learning engineering is very different from what you might be used to. In school, knowing something to pass exams is usually sufficient, but in engineering, learning by doing is the mantra, because after all, you're learning to build something. This requires a lot of subtle changes to the process of learning, too many & too specific to list down here, so just bear this in mind as a guiding philosophy for now.
More importantly, this (the technology) industry changes at an extremely fast rate, which makes learning a life-long process. While this may sound intimidating, this is equally an opportunity - to make learning a differentiator. One can do that by learning to learn (meta-learning of sorts). A pre-requisite for this is to enjoy the process of learning. Those of you who are able to develop this, glory awaits you!
So how do we learn to learn? Protip: the more you learn, the easier it gets. So just sticking with the process of learning would reveal enough about how to develop meta-learning. I have my own techniques, but that's probably best covered in a different blog post.
Also, never give up - that's what separates the top 1% from the rest. You will come across things that take more time/iterations to learn. Most people give up, so just the habit of persevering puts you in the top 1% - it's like the slog overs in cricket, you just have to have the discipline of sticking around and not throwing away your wicket.
Truth 2: Foundations have a much longer shelf life than skills
Skills are specific techniques that you learn in order to get a job done, while foundations are the conceptual underpinnings of it. For example, knowing how to calculate compound interest is a skill, while algebra is the foundation behind it. Likewise, a programming language is a skill, but the concepts of state/concurrency/DSA is the foundation behind it. In practice, skills is what you actually use on a day-to-day basis, while foundations affect the way you think, model & plan.
The reason why I bring up this truth is that because of the immediate benefit of skills, and the (usually) harder process of learning foundations, students significantly over-index on the former at the cost of the latter. The problem they face later in their career, is that skills have a (much) shorter shelf life, so as skills change, they find it harder to keep up. On the other hand, if their foundations are strong, it becomes much easier to keep up with the rapidly changing industry & its skill landscape.
A common problem with colleges is that they put foundations before the skills, leading to students being very confused about why they're learning, and low motivation always leads to poor learning. This is something you can solve for yourself, but it requires keeping an eye out for two kinds of foundations:
- One that comes with pain: an example is Data Structures & Algorithms. It's hard to appreciate the value of an efficient sorting algorithm if you've never tried sorting a data set of 100 million+ data points. Similarly, hard to appreciate why parallel programming is important if you've never saturated a CPU core. Protip: Figure out the motivation for a foundation yourself by searching online about real world scenarios where this foundation gets used. Without empathising with the problem that a particular foundation solves, it'd be very hard for you to learn that foundation seriously enough. Go saturate out that CPU core, that memory bandwidth, feel the pain of inefficiency, so that you can better appreciate efficient algorithms.
- One that comes with generalisation: here, the foundation reveals itself by showing up as a pattern in diverse scenarios. An example is how the concept of latency vs throughput shows up repeatedly, whether you're talking about networks, disks, distributed systems, CPUs, memory. Another example is the concept of distance - euclidean (in elementary geometry), cosine, hamming, jaccard distances. As we come across the same pattern (with a slightly different form) in diverse situations, our brain distils out more foundational representations of those concepts. So, Protip: expose yourself to diversity, e.g. learn multiple programming languages. Also, always dig deeper than what's needed to get the job done.
It should also be noted that not all subjects are made equal, e.g. Linear Algebra, Probability & Statistics, Information Theory, Calculus, Discrete Maths, Computer Architecture, OS/Network fundamentals will carry far more shelf life for Software Engineers, so try to pay attention when you come across these subjects. Most of Engineering Mathematics is crucial to excelling as an engineer across disciplines, even if they're not strictly needed to be an average engineer. What's awesome is that there's a ton of really intuitive material on YouTube and other places for you to get comfortable with these topics, even if your Professor sucks at it.
Truth 3: The 80-20 rule
Only 20% of the outcome is going to be determined by your college, 80% is all you. Majority of you will probably not believe it, but it's the truth. The same majority of students will limit themselves to what their college teaches, and never try to go beyond it. My first question whenever I go for campus hiring is: "tell me one thing that you learnt/built that's not in your college curriculum", and yet less than 1 in 50 students are able to answer it meaningfully.
Protip: do NOT limit yourself to your college curriculum. Have a side project, think deeply about at least some problem(s) that you care about. And keep applying what you're learning, to these projects. After all, engineering is all about building.
Another Protip: learn to learn without teachers - develop a habit of reading technical papers, RFCs, original sources, code - you'll learn far more about sorting by reading code of standard libraries than just your book.
Back in 2013/2014, I'd written a response to a question on Quora (much before Quora turned to shit) where I'd called out that it's the alumni that makes IITs, not the other way around. You have the opportunity to be that alumni who defines the future reputation of your college, so don't limit yourself.
Truth 4: Knowledge building is not a zero-sum game
In schools (at least the ones we have in India), we often get conditioned into competing with our peers. After all, there's a limited number of seats in higher education, so the gain in chances of one, is the loss of another - this is what is called as a zero-sum game. But the demand-supply mismatch in (at least the technology) industry is so high, that this is not true anymore once you enter college.
Knowledge building is not competition - market is. So you don't have to treat knowledge building as a zero-sum game. If you're still unsure, consider this - most of your peers will give up on knowledge building anyways, so those that don't, at least all of you can band-up together and create a thriving community of yourselves to push knowledge building to new heights.
Protip: figure out your tribe, and learn together - have paper reading groups, group lab workshops, push each other at the edges of knowledge - that's how we grow. While our individual journeys are personal, our tribe isn't our competition.
Closing notes
These are truths I've repeated to many first year students in the past, but listening to these is easy, working through them is the hard part. You'd be surprised if I were to reveal how few students actually end up acting on these points. Despite having read through Truth 3, 80% of the folks will still limit themselves to their college. Such are the laws of statistics in human behaviour.
On a separate note, appearing smart is much easier than being smart, particularly with all the social media stuff anyways. While this works in more soft-skill oriented jobs, it doesn't work in engineering for long. Fakers are revealed much earlier in this space, so if you do plan a career in this space, there's really no alternative to actually developing the chops.
My best wishes to all of you starting your first year in engineering. May you respect & enjoy the power of creation in the palm of your hands.