<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shivam Shekhar</title>
    <description>The latest articles on DEV Community by Shivam Shekhar (@shivamx96).</description>
    <link>https://dev.to/shivamx96</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F120222%2F4cfde7b5-0fc5-46b3-922b-afdf77aee58e.jpeg</url>
      <title>DEV Community: Shivam Shekhar</title>
      <link>https://dev.to/shivamx96</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shivamx96"/>
    <language>en</language>
    <item>
      <title>Breadth vs Depth in Engineering</title>
      <dc:creator>Shivam Shekhar</dc:creator>
      <pubDate>Mon, 10 Oct 2022 15:23:20 +0000</pubDate>
      <link>https://dev.to/shivamx96/breadth-vs-depth-in-engineering-koe</link>
      <guid>https://dev.to/shivamx96/breadth-vs-depth-in-engineering-koe</guid>
      <description>&lt;p&gt;All of us probably remember graph data structures, and the &lt;strong&gt;traversal methods (BFS and DFS)&lt;/strong&gt;. As an engineer, we can visualise the expertise and learnings in tech industry as a graph. Going forward with this assumption, should one approach this knowledge graph in a breadth-first or depth-first fashion?&lt;/p&gt;

&lt;p&gt;Breadth is &lt;strong&gt;how many things you know about&lt;/strong&gt;, whereas depth is &lt;strong&gt;how much you know about that thing&lt;/strong&gt;. Depth helps you move fast in one direction, and breadth helps you determine the right direction to move in. Breadth gives you diverse perspectives, and thus wisdom. And, on a long time scale, &lt;strong&gt;wisdom is almost always more valuable than knowledge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Our tech industry is weird this way that a person with very deep expertise in one specific thing is praised as an expert whereas a person with broad set of skills is called out as a jack of all trades but master of none. As an industry, we overvalue knowledge much more than wisdom. This might be because &lt;strong&gt;testing knowledge is relatively easier compared to wisdom&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Moving fast is as important as moving in the right direction.&lt;/strong&gt; Early on in career, you should be optimising heavily on breadth. Why? I feel it’s more important to understand the questions and conversations around you. You can always go deeper to find the answers once you understand the questions. Going broad helps us identify these questions and core concepts in the deluge of languages, frameworks, and whatnot. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Focus on concepts&lt;/strong&gt;. There are very few concepts. Different frameworks just make different choices at these conceptual levels on approaching different problems. Understanding things at a conceptual level will help you quickly pick up other adjacent frameworks and technologies when needed.&lt;/p&gt;

&lt;p&gt;Without sufficient depth, you'll &lt;strong&gt;keep hitting walls&lt;/strong&gt; where you get stuck. This is really critical and an indicator to go deeper. This is when focus needs to temporarily shift to being depth-heavy. Deeply familiarising yourself with the framework/tech being used gives you a stronger basis which is very useful to find patterns when we go outside of that framework.&lt;/p&gt;

&lt;p&gt;With time, as you progress in our career you will hit many walls, go deeper into those blockers, and repeat. In the process, you've learnt 'n' number of things at a beginner or intermediate-level and also are at advanced-level in a few of these things. You evolve from just being a jack of all trades to also being expert in a few things.&lt;/p&gt;

&lt;p&gt;Essentially, &lt;strong&gt;you've transitioned from a short, fat engineer to a T-shaped engineer&lt;/strong&gt; who are much sought after. There is a good amount of breadth that you need to find the right direction to move into, and the sufficient amount of depth to move fast into the direction that you have chosen. Hope this is teeny bit helpful at least.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspirations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nested.substack.com/p/short-fat-engineers-are-undervalued"&gt;Short Fat Engineers Are Undervalued&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=KBy7CYOqjNU&amp;amp;list=PLLhBy6YSIT0DjPC-a9j-Alz21GHOjzrVe"&gt;SCALER POD 01 ft. Amod Malviya, Co-founder, Udaan | How Engineers Can Learn for Fun and Profit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/cscareerquestions/comments/1ww8bx/depth_vs_breadth_in_programming_knowledge/"&gt;Depth vs breadth in programming knowledge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://alexkondov.com/the-t-shaped-engineer/"&gt;The T-Shaped Engineer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>career</category>
      <category>engineer</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why we moved from 32-bit to 64-bit processors?</title>
      <dc:creator>Shivam Shekhar</dc:creator>
      <pubDate>Sun, 24 Apr 2022 07:20:24 +0000</pubDate>
      <link>https://dev.to/shivamx96/why-we-moved-from-32-bit-to-64-bit-processors-3hhl</link>
      <guid>https://dev.to/shivamx96/why-we-moved-from-32-bit-to-64-bit-processors-3hhl</guid>
      <description>&lt;p&gt;When I had just entered college, I got my first laptop almost 7-8 years back. Surprisingly, it said 64-bit instead of 32-bit, which I had seen till then on the computers everywhere. Why did it say 64-bit? Almost all the computers gradually moved from 32-bit to 64-bit processors in the late 2000s and early 2010s. What exactly did change with this?&lt;/p&gt;

&lt;p&gt;Let's start with how processors exactly work. Processors are a collection of billions of transistors placed on a silicon wafer. These transistors combine to build logic gates and even sophisticated computational logic. There are two main parts to CPU- &lt;strong&gt;control unit&lt;/strong&gt; (CU); and &lt;strong&gt;arithmetic and logical unit&lt;/strong&gt; (ALU). CU is like an orchestrator at the opera (orchestrating the execution of programs), and ALU is like vocalists and instrumentalists at the opera (carries out arithmetic and logical computations). To carry out any computation, the processor needs some data. &lt;/p&gt;

&lt;p&gt;We already know there are two kinds of memories in our computers- &lt;strong&gt;primary memory&lt;/strong&gt; (also called RAM or just 'memory') and &lt;strong&gt;secondary memory&lt;/strong&gt; (also called storage). RAM holds data and programs that processors require for executing active programs, whereas the storage persists everything else that is not being actively used. Now, RAM has the entire Microsoft Excel program and required data, but all of it is not being processed simultaneously; the instructions currently being processed are stored in &lt;strong&gt;registers&lt;/strong&gt;, a tiny memory unit embedded within the processor. Technically, registers are the smallest data holding elements.&lt;/p&gt;

&lt;p&gt;When a computer or processor is marked as 32-bit or 64-bit, it is being talked about the size of registers in the processor. There are several kinds of registers; not going deeper into these, but some hold the address of data in memory, some hold instructions, and so on. In RAM, memory is typically marked by addresses from 0 - X (a 4GB ram has 2^32 bytes and requires 32 bits to store the address on a location, whereas an 8GB ram has 2^33 bytes so on). &lt;/p&gt;

&lt;p&gt;A 32-bit register won't ever be able to access any location in RAM beyond 4GB because it cannot store its address. This is a constraint if we want to use 8 or 16GB RAM. This is primarily why manufacturers decided to move to a 64-bit register that adds support for the address of 64-bit, i.e., allows 2^64 bytes in RAM (~16-17 exabytes; FYI, 1 exabyte is roughly 1 billion GBs). Today, with a 64-bit register, we are using at max 42-48 bits of these 64 in computers.&lt;/p&gt;

&lt;p&gt;Along with allowing more memory, this also allowed us to have 64-bit instructions. Since instructions are a part of the operating system, they also need to support 64-bit instructions, so almost all operating systems were rebuilt for a new generation of processors. You can run both 32-bit and 64-bit OS on a 64-bit processor but only run 32-bit OS on a 32-bit processor.&lt;/p&gt;

&lt;p&gt;That's all for today. I hope this was a tiny bit helpful.&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>cpu</category>
      <category>processor</category>
    </item>
    <item>
      <title>Why do array indexes mostly start at 0?</title>
      <dc:creator>Shivam Shekhar</dc:creator>
      <pubDate>Tue, 19 Apr 2022 19:29:55 +0000</pubDate>
      <link>https://dev.to/shivamx96/why-do-array-indexes-mostly-start-at-0-3k55</link>
      <guid>https://dev.to/shivamx96/why-do-array-indexes-mostly-start-at-0-3k55</guid>
      <description>&lt;p&gt;Have you ever wondered why array indexes start at 0 in most languages? I did. The road to satisfy this curiosity led to a few revelations and fundamentals that we tend to forget a lot of times. Let's start by defining an array.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Array&lt;/strong&gt; is typically a contiguous area within the computer memory. In most languages, the variable that we use to refer to this array is inherently a &lt;strong&gt;pointer.&lt;/strong&gt; A pointer that stores the starting address of the contiguous portion of memory.&lt;/p&gt;

&lt;p&gt;Let's take an example, say there's an integer array &lt;code&gt;arr&lt;/code&gt; of 5 numbers in a language where every integer occupies 2 bytes of memory. Say, this array's contiguous area starts at byte address 44 and continues until 54 (requiring 10 bytes, i.e. 5 integers of 2 bytes each).&lt;/p&gt;

&lt;p&gt;Within this, when referring to &lt;code&gt;arr[i]&lt;/code&gt; we are essentially looking up the memory location in a shorthand way.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;arr[i] points to a location = Start Address + Data size * Index
arr[0] points to a location = 44 + 2*0 = 44
arr[1] points to a location = 44 + 2*1 = 46
arr[2] points to a location = 44 + 2*2 = 48
arr[3] points to a location = 44 + 2*3 = 50
arr[4] points to a location = 44 + 2*4 = 52
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What difference would it have made had it started at 1 instead of 0?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;arr[i] points to a location = Start Address + Data size * (Index - 1)
arr[1] points to a location = 44 + 2*(1-1) = 44
arr[2] points to a location = 44 + 2*(2-1) = 46
arr[3] points to a location = 44 + 2*(3-1) = 48
arr[4] points to a location = 44 + 2*(4-1) = 50
arr[5] points to a location = 44 + 2*(5-1) = 52
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We would need to subtract 1 from every index we are accessing if we start indexing at 1. Looking keenly, we are offsetting from starting index to get every element. Using 0 as the index then means using an exact offset from starting point as the index whereas when using 1, we would have to compute the offset itself.&lt;/p&gt;

&lt;p&gt;Why use 0 then? Using 0 allows us one less computation for accessing elements. Does this matter that much? Not today, but probably it mattered in the early days of computing to have algorithms in the most efficient way. Maybe, it was an efficiency hack for ancient computers.&lt;/p&gt;

&lt;p&gt;Not just this, it also makes mathematical sense to use 0-based indexing. I would not dive much deeper here, but leave it to Dijkstra to &lt;a href="https://www.cs.utexas.edu/users/EWD/ewd08xx/EWD831.PDF"&gt;take home this point&lt;/a&gt; using conventions of representing a sequence of natural numbers.&lt;/p&gt;

&lt;p&gt;The simple choice of 0-based indexing simplifies a lot of mathematics on arrays for programmers and allows for some elegant implementations of some concepts like hash tables, consistent hashing, and binary heaps.&lt;/p&gt;

&lt;p&gt;Nevertheless, more than a decision of computational efficiency or mathematical accuracy, it is a matter of linguistic choice. With some tweaks in the implementation of the array, you can make any arbitrary indexing work.&lt;/p&gt;

</description>
      <category>array</category>
      <category>programming</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>Should I be a designer or a developer or .... ?</title>
      <dc:creator>Shivam Shekhar</dc:creator>
      <pubDate>Tue, 28 Dec 2021 13:51:03 +0000</pubDate>
      <link>https://dev.to/shivamx96/should-i-be-a-designer-or-a-developer-or--29fa</link>
      <guid>https://dev.to/shivamx96/should-i-be-a-designer-or-a-developer-or--29fa</guid>
      <description>&lt;p&gt;Whether to be a designer or a frontend developer or a cybersecurity expert or a blockchain developer or something else? There are so many domains within tech and this is such a difficult choice. Just like a grand buffet. I have gone through this dilemma myself and discovered a few things the hard way.&lt;/p&gt;

&lt;p&gt;First and foremost, &lt;strong&gt;it's your choice to make&lt;/strong&gt;. Stop asking people what would be the most optimal choice as per the market. Now, you'll say- but how do I choose the best option? There is no single method to figure this out. You need to fit your persona in what you want to do. &lt;/p&gt;

&lt;p&gt;What follows is a way that worked for me, may not work for everyone. This is not a sureshot way, but it helped me and a lot of people I know in figuring out what they wanna do. There will always be a road that we took and &lt;a href="https://poetryace.com/the-road-not-taken"&gt;another road not taken&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evaluate yourself.&lt;/strong&gt; Start with a few why questions and then move to a bunch of what questions. These questions would help you narrow down this infinite list to a few probables.&lt;br&gt;
&lt;em&gt;For example- Why do you want to be in tech? What are your strongest traits? What are the weakest ones? What is important to you? That's not all, you can think of even more questions to ask to yourself. (&lt;a href="https://medium.com/thrive-global/how-to-complete-a-personal-swot-analysis-2f8769aebd5e"&gt;SWOT&lt;/a&gt; is a good framework for this, but focus on SW, and not that much on OT for now.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try broadly understanding&lt;/strong&gt; all the domains that you can think of at first. You'll find a few of them interesting and others not. Then, dive a bit deeper into the things that you thought are interesting, try understanding what kinds of problems people are solving with it or any adjacent areas or sub-domains.&lt;br&gt;
&lt;em&gt;For example- If you're interested in machine learning, you can look at problems like risk assessment, fraud detection, recommendation engines etc or sub-domains like computer vision or predictive modeling. (This is where O of the SWOT framework kick in)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Combine your self-evaluation and domain understanding&lt;/strong&gt; to further narrow down this list basis whatever parameters you want. Find out what works for you, and what doesn't. You can use anything- how good it makes you feel, how well does it pay, does it fit in with my strengths, does it give me learning opportunities and whatnot (You can now complete the SWOT analysis you made for yourself).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start the journey.&lt;/strong&gt; Understand what is expected from a typical entry-level job in your chosen domain. You can use the Internet to understand this or you can talk to people (but don't ask for a roadmap) or even better, you can do both. Prepare yourself. Learning by doing is what I'd recommend.&lt;br&gt;
&lt;em&gt;For example- Continuing with the above ML example, find datasets and slice and dice through them. Go to websites hosting ML problem statements.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't wait to be perfect.&lt;/strong&gt; Start looking for internships or jobs as soon as you feel you know a few things that you can work with. Keep learning on the job. You won't be perfect at day 1 or at day 365. It's a long-term game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Grit&lt;/strong&gt; is the only thing you need to keep doing better. You'll be a bit better every passing day and over a sufficiently long time, the incremental gains would accumulate to a lot. Just remember this- even a 1% improvement every day translates to an exponential change.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w3P9SHDM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wv213ttrx1j97oeeuqle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w3P9SHDM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wv213ttrx1j97oeeuqle.png" alt="Image description" width="880" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
    </item>
  </channel>
</rss>
