I mean nowadays they expect even interns to know alot.Stuff like (CI/CD),cloud,containers, frameworks,software delopement lifecycles,etc.. so i understand why people are speedrunning knowledge.The game as of right now is to speedrun concepts and when you get the job , then you can deeply learn them.
Yea that's exactly what I'm going through. I don't know how people expect juniors to have this wide breadth of knowledge as is, but now we have to deeply learn all of it before getting a job as well? That's a fairy tale world
Agree. The problem is the "then" part, when in the end you don't spend time deepening knowledge because you have to go on with the new problem coming. "Later" becomes "Never"
At least from my experience, I feel like a big contributor to software devs only having shallow knowledge is because they’re expected to know a ton of different things and are never given the opportunity to become highly knowledgeable and proficient in a single thing. Deep knowledge is never prioritized and does not often garner praise/raise.
if you want to know something, you'll learn it *on your own*. "you're never given opportunity" because you're a below average programmer / LITERALLY have no time (wrong job?) / are a LITERAL, first time coder. no one will give you "an opportunity", you have to create that opportunity yourself... no words.
This is the comment I was waiting for. Most times many people are forced to have a knowledge of a dozen or so technologies and aren't allowed to specialize, especially in web dev and javascript. There's been many times I wanted to try to specialize but couldn't because I have to constantly context switch
Yeah I feel that. I'm a crap "full stack" engineer with only shallow knowledge of a dozen different things, mainly because I had to learn 5+ languages and frameworks on the job with little to no mentorship. You end up learning just enough to deliver on tickets and never have explicit time to dig deeper or learn best practices. I'm left having to find time outside of project work and regular work hours to do deeper learning, but companies also expect me to have 6+ months worth of practice in Leetcode to pass interviews, so I'm spending my spare time on that instead of becoming a better engineer.
For what it's worth, Leetcode does help familiarize you with algos, so it's not 100% wasted time. That being said, I do think 6+ months is overkill. Better to dive deeper on the languages you use instead - after all, it's the tool of your trade. Or learn another paradigm.
Leetcode is deep knowledge, the current trend is not. There's countless projects from the early 2000s that use a programming language you've never heard of, but the algorithms that these projects implement are typically still relevant.
Well, software architecture is sort of universal, just like algorithms. All of the languages are basically the same. Spending a bunch of time mastering syntax and memorizing functions isn't as useful as mastering algorithms and software design principles. Never memorize something you can look up. Mastering when and how to use algorithms and design choices is the skill, not memorizing trivia about your tech stack. You'll memorize what you use often anyway.
I think a lot of the old school gatekeepers, and I mean that with the greatest respect(I’m old in age but new to the industry), had a chance to naturally grow with new technologies. Similar to the first resident of a small town that became a city. They know their way around and know everyone who lives there. While the new resident gets dumped into a huge metropolis and must figure out his own way to get what he needs and get around. If you stop and ask 10 different old school residents for directions to somewhere, chances are you will get 10 different answers. Nobody knows for certain the best way to learn fundamentals like in other professions. So how is a new engineer supposed to know (especially if there’s a job on the line) ? Learn by doing and hope the pieces start to come together over time ?
Jonathan Blow has discussed this issue extensively in his talks, acknowledging the complexity of finding a definitive solution. Personally, I tackle this challenge by delving deep into my learning process. I immerse myself in the historical context of technological advancements, striving to comprehend the evolution of current systems. This involves studying influential papers that shaped developers' decisions, analyzing source code, and striving for a thorough understanding. In today's landscape, the level of abstraction is such that delving deep is imperative, unlike the past eras where necessity drove individuals to grasp every aspect, from circuitry to operating systems. It prompts the question of whether modern computer science education should be restructured to emphasize deep learning and essential insights. However, there's a concern that we might be expecting too much from educators who themselves lack these crucial insights, potentially failing to transmit them to the next generation. While contemporary computer science curricula excel in teaching mathematical principles and algorithms, they often fall short in applying this knowledge practically. Many new students express dissatisfaction, noting the perceived lack of value in theoretical courses and the insufficient emphasis on practical, marketable skills like web frameworks. This discrepancy underscores a flaw in computer science education. Spending even a single day delving into the source code of commonly used tools-operating systems, web browsers, search engines, text editors-reveals the foundational significance of these concepts and their pervasive application across various domains.
I spent my first 4 or so years in data engineering just getting by with the bare minimum of what I needed to know. Lots of Python, Bash, and whatever database I needed to know at the time. I've spent the past 4 years in my free time diving deep into "deep knowledge" of things like the low level implementation details of operating systems, programming languages, how CPU's and memory works, data structures and algorithms etc. and honestly now looking back at it I can't believe how I got away without knowing so much of this stuff. I was able to turn "I need to learn this" into "I want to learn this because I love it" and it really made this deep dive effortless. Not recommending others spend thousands of hours and dollars in their free time learning, however for me it's been absolutely invaluable in my career
My question is whats the outcome of this? asking for genaral info spending lots of hours gaining deep knowledge and only fraction of companies or lets say project team of people with Deep K, Big tech are also got polluted now. do you still work at same place / level compared to if you had not gained deep knowledge and stayed shallow and got promoted over time ? I have seen people being shallow and got promoted and working with very good knowledgeable people. People with DK do all the heavy lifting and other just get their slices out of result.
Are there any resources (e.g. books, websites, courses, people to study and learn from, etc) you think are particularly useful when it comes to getting deep knowledge?
NGL, I don't completely know everything about the frameworks or libraries I use. But I also feel like to an extent, this is a supply-and-demand issue. Companies don't care about your deep knowledge unless it directly applies to your role, so you only learn what you need to. But having a CS degree gives you enough deep knowledge to understand what the machine is doing and why, and IMO that's sufficient for almost all jobs.
I am a strong believer in just in time learning. If you try to learn everything in depth before you have a use case for it you will likely waste a lot of your time and not retain much. It can be an inefficient way of learning. Instead, you should get a high level understanding of what is possible, then dig deeper once you have a use for it.
Yup. I'd rather just build products that the business or client wants than slog through minute details to circle-jerk how good niche knowledge is. At some point, you may have to go into the deep knowledge and you can dive in when necessary.
I was a "framework dev" for a long time, basically just working in the most popular framework of the time and getting by, recently i've been diving deep and your channel/site has been monumental for me and my growth.
Literally same I used the frameworks to get employed and then I really just started going crazy on fundamentals and still do I feel like they matter more as you become more senior
We have to admit that this is the industry's fault too. I have ds and algos knowledge, systems design knowledge, db theory knowledge AND STILL, "yeah I see you have projects in Java but we specifically need professional experience in Spring Boot ...". So it's not only people learning but employeers don't care for people who have deep knowledge in general. I still advocate that you will be better off, learning ds and algos, systems design and computer theory but you can't ignore the "shallow" knowledge you will be asked to have, when applying to jobs.
Well, it sounds like they would like for you to have deep knowledge in Spring Boot. But, each role has wildly different requirements, so it isn't feasible to have the deep knowledge companies want for any given job listing. That's cool because that means there are more jobs out there because of it. That's also bad because you most likely don't know enough of the right thing to land a job. So, I guess jut learn the most common set of things related to your specialization and hope for the best?
@@iMagUdspEllr Wow 5 months go by fast lol. My statement is more towards employers that say, "We are looking for a developer, you have the programming language so, we are sorry but we are not going to move forward" , and in reality if you know how to do a well architected software in any language, you'll be better off. I really think that you can be better off with some dev knowing language applying to a language with 6+ years of experience than somebody that matches the description but has less years of experience overall. There are some really niche jobs where sure, if you do api's and suddenly apply for a graphics engine job, sure that is vastly different but api's in one lang. is almost the same in another. Everything can be learned and we as software engineers should always be learning. Knowledge is transferible and people doing recruiting in general, are doing a terrible job imo. This is why I hate specialization, people shouldn't niche into a programming language blindly, sure get good at one before you learn another but your knowledge is transferible. It is always more important to learn how to solve problems.
@@majksu Not the point though, I have personal experience with Java Springboot, professional experience with C# .Net, Go and Nodejs. Creating an API in one language is almost the same as creating it in another with some architectural decisions differing. BUT, you can learn the syntax and be proficient right away.
@@arturfil I mean once you land a job you'll probably be a one man army anyway writing in whatever project needs, but recruiters are looking for specific skills just for business needs. Either you talk your way through it or just paste in your cv skills you need for this job. It doesnt matter in the project, it's only for recruitment to be happy.
He has a point and I do agree to some extent but you have to admit some of these issues are due to the way the industry is wired in general. Technologies are easily replaced and knowledge gained become obsolete. Trying to have a deep understanding of every underlying concept or technology is a noble goal but not sustainable in the long run. Especially for junior programmers
I somewhat agree but I would distinguish between concepts and technologies. Having deep knowledge of concepts is viable and important. Having deep knowledge of all technologies (which are layers of abstraction over concepts) is not practical and less important.
Deepening the fundamental, that is the point. Frameworks are like company policies and people skills are fundamentals. Fundamentals can be always tranfer to different enviroment. If you are not manager, you won't go deep in how your company works. Same with frameworks, most people should not deepdive into every framework. Computers fundamentals hasn't change that much in past 20 year, everything is still linear calculation (branches are only to different linear pipe). Fundamentals make you understant that one instruction that broduce 100 cells, is a loop regardless level of abstraction. You won't make TypeA inside of TypeA object structures, because that is recursive memory threat that can invade whole memory exponentally. Road to hell is one bug away. (And all that wasted calculation that is needed just to avoid memory recursion to happend)
100% It isn't the devs fault if the companies hiring process is so bad that you end up working with a bunch of devs without the required skills/knowledge. The dev accepted a job that was OFFERED to them. It is the management and organizations job to only offer jobs to individuals who fit the criteria of the role.
The principle is that every new thing under the sun is just an iteration on the fundamentals, and someone with a grasp on them will be able to understand Shiny New Thing confidently, and much more quickly. You actually know what you don't know, and what you need to know.
You can't have deep knowledge if you are required to know 1300 libraries, programming languages, techniques, algorithms and others. Building and app can be compared to building a house. But to build a house you need an electrician ,a plumber, a builder, a develeloper. For apps, if you are a dev you are responsible for everything and supposed to know everything deep ;). Go learn to be a nurse, you will have a skill for life, go learn to be a programmer and you are out of date before you have started looking for your first job, even if you have a deep knowledge. You are a hamster on a spinning wheel that is spinning faster than a robot can run ... good luck chasing the dream and thinking in the era of bots you can keep up with them ;)
I think the problem is when you have too much abstraction. The obvious example is is-even/is-odd. Some abstraction is needed but I think we've gone a bit too far.
The great thing with deep knowledge is that it can be applied to every other similar technology once you understand how they work. You still need to know many different types of tools like web frameworks or languages, but you don‘t need to learn everything again when you use something new, because they all behave similarly
This hit too damn close. I do not feel "impostor syndrome" because I am straight up an impostor, so it kind of makes sense that I haven't been able to get my first Jr role. I've been studying so hard and tried to practice so much but I still feel miles and miles behind people writing Rust/C++ and being masters of leetcode (not implying those things are mutual). But oh well, what can I do.
the problem being outline is just the corporate structure and how they hire. No one wants to hire someone and train them to be very deeply knowledgeable in something
AFTER Reading through all 92 comments currently present, What I realize what JB is saying is actual truth. Most people are defending being shallow and calling have deep knowledge / fundamentals is not required in current environment, there points includes... * Current market is evolving very rapidly, you cant catch up having deep knowledge. * Companies just want to build and ship, no one wants to spend money for letting their people get deep knowledge. * Having deep knowledge in first layer of abstraction is better than having knowledge of core. * You dont need to know fundamentals to get the job done. IMO, these are those people which JB is referring here in 3:13, Out of 100 people only 10 wants to know fundamental and they are the ones who create packages, which is well created and maintained and have all those abstraction and performance improvements, So the left over 90 people can just install packages and get their job done. And both of them are fine, I am not saying first is best and later ones are worst. This point what JB is saying is currently becoz barrier of entry is/was very low the trend is more shifting on 90% side to 95% and 10% are now only 5% and JB wants to say is we need more people on building side than on consumption side.
100%. I think generally most developers I've bumped into have always had a good grip on the fundamentals but I can see people jumping into frameworks like React, Flutter or something similar without learning software fundamentals and it just being magic and no practice or exposure to the underlying language. We have to understand that the scope for a software engineer has grown fundamentally too. Back in the 90s, you wrote to just interface with a machine and this has now grown to deploying to cloud, pipelines, and potentially other microservices too. I think if someone just watched the video and didn't analyse it you'd assume Jonathan is the old guy shouting at the clouds but he's just saying it's moving a bit too fast for people to be able to actively get into the fundamentals first.
"well created and maintained and have all those abstraction and performance improvements" this made me remember i saw also the other extreme where so much over enginnered shit in the years just for the sake of "doing it well" that the code becomes a damn impossible task to understand creating.... vendor locking to the team that created the code from the start
When these people starting learning programming, there was probably only the so called deep knowledge required. But times have changed significantly. Even if you don't put time into the deep knowledge, you are still overwhelmed with all the new technology you need to learn to land a job. They had it easier. Much easier.
I've been coding for 6 months now, when I started I tried to go for a bootcamp where they encourage this sort of behavior. I said to one of the facilitators "I wonder why my code is able to do x" and he simply said to me,"you don't need to know how an engine works to drive a car" so I left that camp and went on to learn python and js on my own, now that I am decent at the two, I am learn c/c++ because screw that guy and his lame approach to life. The way I see it you go all in or stay out.
I agree with him in a sense, but most people are hired to a do a certain job. My job is to be a C# unity developer, I've expanded my knowledge into data structures and algorithms, worrying about performance and what not. But at the end of the day I write code in C#. Could I learn to write code in any language and figure out how to debug what I need? Sure, but at the moment I don't have the time for that. I think he's been working on his own for so long, and is so driven by his own success that he has no idea what it's like to be a normal person anymore who's just trying to survive.
The problem is expecting 5 years of experience from a fresher. Deep knowledge requires handling deep problems. It takes time for a developer to get deep knowledge. I would say for devs starting their journey, your curiosity and problem solving mentality is gonna help you get there what discussed in the interview. Thanks
Atleast watch full video , deep knowledge here means , if you are coming to me and saying you do not even know what nlog(n) time complexity means why is space complexity important what is stack and what is heap you dont know and how is memory allocated you dont know --- you are shallow dev .. most of these things are taught in undergrad these are basic foundations which many lack
@@seriouscapitalist you have a point but in the case where i know how things are working under the hood but at the same time that's not the concern because ee nee the feature out in production is how sometimes as a jr. Dev i experience so like just build shit and ship it. Unless I'm given the task to look closely into such stuff. The Deep tech knowledge even i know wouldn't make any difference here. Thanks for putting your thoughts buddy .
@arvee-4699 You tend to forget that a lot of people don't come from an IT cursus. From experience none of the points you mentioned were introduced to me nor useful for my day to day tasks. What I noticed though is how pedantic can senior be regarding this but they aren't even able to explain them. Internet resources, senior, online courses... whatever they are never ever consider those aspects and even if you're willing to learn and deepen that knowledge, you're lost. There is a ton shit of stuff to know nowadays and an overload of bad resources that even just sorting that and find what's relevant to learn is hell. No one agrees, everyone has opinions and in the end juniors are just running after a high speed train. I'm there today and have no fucking clue of a decent learning roadmap for my goals. Some junior dev might just be lured by money and don't even care but to me the problem is also companies, industries and how people are willing to teach. I was hoping to get that from some seniors in my previous team and in the end they just were as clueless as me.
All these people saying deep knowledge isn’t important in software are ridiculous. Having shallow vs deep knowledge of even your terminal and text editor will teach you so much and you’ll be able to see similarities and pull from them in your own software and other tools. It’s crazy to think that having shallow knowledge on sumn that you work on a daily basis will have you comparable to somebody w in depth knowledge… literally compare a Junior vs senior dev
It's breadth of knowledge vs depth of knowledge. I have 10 years of experience at FAANG and would argue that having a breadth of knowledge of commonly used technology is much better than having a depth of knowledge in stuff like the terminal or a text editor. We all have limited time and energy. Any time you spend learning things like deep knowledge of the terminal or text editor means less time spent learning the basics of other useful tools. I'd rather be good at a bunch of things that just great at a few.
I copy paste everytime, my senior devs made me do so. I asked questions, they gave weird looks, they asked why are you asking this question. I stopped asking questions afterwards. Work is not measured by knowledge, but by delivering features to customer, whether that feature is critical to customer based on that you get payscale.
@@aakashs1806 pretty much this. I do the work, the compagny is happy, the collegues are happy, i take the money so im happy, and i go back home. And im a mediocre devs.
When started the latest webdev project I was explicitly asked about which libraries we gonna use. For everything, from DOM manipulation, to forms handling, even without knowing exactly what parts will be complicated and which one will be not. I ended up cutting some of the list after realizing, that some of said libraries are not only unnecessary, but will slow the development process down. In the same project I see libraries being used in such a minuscule fashion - like comparing two dates and picking the later one - that I have to wonder if people are really able to write JS by hand anymore.
The JS standard library on everything (especially dates) is such garbage that if you need to do anything more it makes sense to use a library. Is there any standard functionality that isn’t much, much worse than some basic 20kb package dedicated to it?
@@frank13621 some places in the world that these 20kb packages are being downloaded to, barely get 3G mobile data. So for mobile apps that use these, you absolutely are adding bloat that is unnecessary, yes the standard library sucks, but its better to write the native code yourself and strip it down to be as small as possible than importing a 20kb library SIMPLY for comparing dates.
Honestly software engineering, networking, cybersecurity and Data science is All layers and layers of abstraction. Learning the basics of these can pretty much spring board you because many jobs combine these fields
idk if this idea is pertaining to this discussion but, it did pop in my mind that I think there are now two types of developers, one who is more into the fundamentals of code - like competitive programming, the math and logic behind stuff and, the other type to build apps to deal with specific problems - like automating something or building a shortcut of lengthy procedures! I feel like as long as the developer enjoys what they are doing, be it CP or projects, and are not in for the money, the domain would continue to flourish maybe.
It is a spectrum - the lower the level you are programming in, the deeper the knowledge about the hardware you get. Competitive programming is a distinct thing; knowing to simply implement lots of algorithms does not correlate with hardware knowledge.
This is not what I think but I know with 100% surety i.e. - Actually there are programmers in 2024 who have all the knowledge required to create a program but they don't have a deserving job and income for their knowledge which irritates them from new programming auditors of 2024 first time introduced in India, whoever this man is, from whatever era, doesn't appears as he have any knowledge of programming, he appears more like a sarcastic joker, but still for the baby guidance in programming, before having a deep knowledge, a programmer need to be aware of aspects which needs depth and aspects which don't... that's why it's said kids shouldn't enter into programming before being matured.
@@locinolacolino1302 not necessarily, people are always complaining about hiring leetcoders and competitive programmers that can't develop apps. although personally I do find junior-level web development easier than leetcode.
I think you need to compare this to: - keyboard/code monkeys pumping out duct taped garbage/spaghetti code (because of time/money constraints) - specialists who know nothing outside of their extremely small bubble of e.g. only assembly/C programming There seems to be little in between. You have a billion different job offers for companies looking for (webdev) code monkeys who are proficient in some variation of a shitstack comprised of "popular" frameworks/languages. No time to master any of the languages in the stack, just copy-paste your way until this whatever app/website is done and the boss can collect his paycheck from the customer. Pretty brain dead and soul crushing if done for long periods of time. You literally waste tons of precious time on learning languages and stacks which are as disposable as the websites and apps you build with them. At the end of your career, you will have no memory of your first app/website and what you used to build it with, as you will have worked with hundreds of languages/stacks and no time to master them or learn anything useful. No clue what you did all these years, but whatever, it brought in a paycheck. Not really a path for someone that loves software dev in their heart and soul. You might as well go out and get a bunch of random jobs to earn a living. And then you have the real hardcore low level, embedded/CS stuff for e.g. defense contractors with equally hardcore, tried and true, precision work with assembly, C, C++, whatever. Maybe here and there I might see some jobs looking for Java devs but that has pretty much dried up as far as I can see (and for the better in my opinion).
Some great advice I’ve heard for noobs is to go one step deeper than where you’re working, just one. It’s a good way to gain a deeper understanding without being overwhelmed early on.
I have no idea of 99% of the lingo jargon you use. I do and have always done programming ONLY for myself, for my math research. And, after 43 years of coding, I honestly can say I have no idea how to code in ANY language. I know less now than I did in Summer 1981 when I took my first and only Fortran course at community college. I am 60 now. I desperately need help with Mathematica. But it is not even worth trying any more.
Learning frameworks instead of just JS also makes it very difficult to learn other frameworks and libraries because if you don't know the common denominator - JS. You have trouble identifying what part of a code example is framework code vs plain JS, and this gets even more confusing by JS itself accumulating more features and syntactic sugar over time. It is really important to understand the basics, the problem is you often only notice this after you already learned them.
I learnt React first then now kind of know NextJS. I don't know the vanilla JS but I do know its importance. I do know the basics but not enough, now I am trying to learn JS and after learning it maybe I will go into some Data Structure or something like that. I really want to build a foundation
I didnt know react even existed at first. So I wrote a lot of vanilla js by hand like and then understood in depth about js. I understood about async programming after working in nodejs. Still has gaps in knowledge about the internal workings but still aiming to improve i have been mostly interested in how it work. I remember using react and writing document.querySelector inside it because i didn't know how to use it
I think this kind of opinion is the reason why tech or STEM people in general needs to at least try to learn social issues. Maybe a little bit philosophy, like critical realism. Because the way this opinion structured is ignoring the structure/mechanism/tendency behind the empirical event (softdev can't handle deep stuff). It almost likes they blame it on an individual, while the labour market is a part of free market, so when we talk about it we should take politics and economic issues into account. Because by doing that we would realize that this isn't entirely an individual issues, but systemic issues. This isn't skill mismatch issue, this is the demand-side issue. There's job scarcity issue, and they blame it on an individual skill? That's irrational. If a country is a labour surplus economy with scarcity of jobs & plenty of unemployment, building up its labour force to fulfill some jobs' technical or knowledge requirements is the least of its worries. Its main problem is generating the jobs to absorb them in the first place. So the demand for deep skill may not reflect actual need of skilled labour or particular composition of labour by the economy. Instead it might reflect more of the business cycle & labour market bargaining power between employers & workers. Moreover the skill mismatch discourse was part of "neoliberalisation" which dismantle the full employment agenda in developed countries & the developmental state in developing countries, among others, that made it more difficult to sustain job growth. Conclusion, this discourse on the needs of deeper knowledge ignores structural economic factors such as underdevelopment, scarcity of productive capacities, lack of jobs. The labour market simply reflects this.
Ive been learning for over a year and went really deep for web development, even into the V8 Engine to see how it all works, to me, regardless of how deep you want to go there's always more to learn. Thing is there will always be someone with half assed knowledge or even someone with knowledge that can't build anything.
Been doing this more than 30 years and I'm a hiring manager for a software company... he is SO correct with what we see with nearly all of the younger candidates.
I actually agree with this guy 100%. I’ve been a swift dev for about 5 years and did not take the time to learn the basics, I feel so behind :( Started reading up on patterns and other languages and feel much stronger now 💪
2:04 This is true, When I started it out, I made probably 3 Javascript projects and jumped right away into React, now the outcome is that I'm kinda bad at DOM manipulation, now I need to pursue something I should have known. Please, if you are a beginner, don't jump into React, learn JavaScript first
This problem is very complex. On one hand, a programmer is expected to have deep knowledge and on the other - newer and newer frameworks are coming which only add additional complexity and dependencies on libraries and other frameworks to achieve basically the same result as before any frameworks existed.
Yeah, but this is sort of not a problem because new frameworks either don't get adopted or they are basically the same thing with different syntax. It's rare that something new is actually head-and-shoulders better than the current solution. Then, in that rare case you can adopt the new solution if it is worth the time to rewrite the current stuff.
I actually agree, I’m self taught and I would say that I’m a developer, the word engineer should be reserved for people who went to college in cs, math or some type of engineering because of their deeper understanding!
It is evident that the field of programming is currently experiencing a decline rather than reaching its zenith. This observation is rooted in the belief that the industry is grappling with a substantial presence of subpar programmers.
be careful. The job market doesn't (nor did it ever) share JB's opinion. From financial stability POV it might be better to be a mediocre full stack. Especially if you plan to have a life outside of work (family etc.).
Well at smaller companies yeah but larger companies tend to hire specialized frontend and backend. Especially with the rise of microservices its easier to find specialized backend if you know a bit of cloud.
As an Indian , I can confirm that we are really into herd rather than what we actually like. If someone made OSS and got a good job yikes we all going to do that and get placed and someone did DSA and get FAANG we will also going to get their. But the problem is as myself we most of case don't care about under the hood stuffs and we really into some race... And if some 20 year guy get good salary that's might have his luck and also he might have some privileges towards this field and i promise his knowledge towards low level might be shallow.. And I'm also followed that same but after i left Indian youtubers and get into international youtubers ie primeagon theo low level learning neet and some more. I realised programming is not and shouldn't be an end goal rathee it's an art like learning musical instruments. It'll take their own time to get truly good at it rather than being shallow good.. And please take this as my experience and perception... Thankyou 😊
I had an app that I was trying to do for a capstone project for a bootcamp (don't hurt me, I joined the military instead of going to university). Some of the interactivity we needed for our core django app would've required a whole different backend etc .....OOOOOOR - screw it, do it in jQuery. Because I had been passionate about computing for a long time, despite my lack of formal education - being able to say "nah, we can just embed jQuery, it'll be fine" saved the project, because deadlines suck. Understanding what came before and how to do stuff the annoying way without fancy frameworks isn't necessarily always the best thing to learn, but it does come in handy and can't come without some amount of fundamental knowledge.
Speaking from the perspective of a beginner learning html for the first time, I %100 agree with what he is saying. I'm actually about to drop a course because I feel I'm just pushing out projects without having the time to actually learn what I'm doing. A good analogy would be I feel like I'm Bumblebee in Transformers, but with coding. I can string together a coherent sentence, but it's only by copying and pasting from another source. When it comes time to really understanding what I'm saying and formulate my own ideas, I still feel like I can't talk. Which I imagine is normal, but I feel like the attitude with a lot of other students is to just keep doing that and just "get the next assignment finished".
Frankly speaking I have seen people writing "Litcode" and not knowing any algorithm or concept of cache or even dont have general computer architecture knowledge, able to get into big tech software companies, god knows how by using Proxy, makes me re-evaluate my degree and practice once again
Well civil engineering is a bad example because it needs to be correct. Software most of the time can be incorrect and be updated later. No one's life is on the line unless you're coding some medical software or something
The solution is actually fostering a culture of apprenticeship. This applies to all subsets of engineering. Don't want people to form bad habits with mediocre skillsets and make the assumption that they should be getting paid like a doctor? Teach them what it takes to be successful.
There is nothing wrong with that. Those are very widely used and good languages. There will always be job opportunities with those languages, and it gives you the ability to really dig deep into how those languages work to use them more efficiently.
Guys trust me when i started learning i skipped all these and when i started learning all these i came to know how it works and the underlying concepts of it . if you are a beginner learn the basics its gonna help you alot And dont learn programming if you want moneyyy learn it if you are really passionate about or you wont grow and its a complete waste of time you will loose interest after a while
No point in having deep knowledge when you'll be laid off after working hard. Fuck these companies Do the bare minimum, get paid, and move to the next one.
@hurstilthymy4943 The problem with this mentality is that it will stunt your growth as a developer, therefore stunt your career growth. I've gone deep at my company and have introduced a new language (Go) and built out our monitoring solutions. I'm now proficient in two new languages thanks to going further at my company (C# and Go) and now getting new offers out of the wazoo. Do more, get paid more and move to a better job when your ready.
I think you're mixing concepts up. One thing is working hard; another thing is being knowledgeable in your domain. You can be very knowledgeable and an expert in your niche, yet still do only the bare minimum for which you get paid.
I have the opposite problem: I know a decent amount about how C++ interacts with the computer architecture, but I never learned any frameworks because I didn’t know I had to, and now I feel lost
I don't agree that if you don't have deep knowledge, that it will catch up with you in the long run, I've seen Principal software developers who don't know how to solve LC easy problems, or have not heard of Time Complexity and all that theory, but they know how to Design Systems, they know how to Manage Big Teams, they know the necessary Frontend Framework that is used by the company from end to end. Often there is a debate who is better programmer, the ones who focus on the CS fundamentals vs those that Experiment with new Technologies, and often the answer is that both can be successful depending on the job.
Deep knowledge != fundamentals, when you know for example how React works under the hood you have deep knowledge about a framework that can probably be applied to every other frontend framework. It doesn‘t matter if you know about every abstraction layer down to the cpu instructions, but that you know more than just the syntax of and when to use some technology
@sebastiankrali2547 Deep knowledge is when you know some concept to the fundamentals. If you know React under hood, it will serve you no benefit for other frameworks at all. Since all of them have different architectural methodologies. Also, I meant about programmers who focus on the CS fundamentals side rather than technology speficic deep knowledge. I don't think the topic is about deep knowledge here, because I acknowledge that both types can have deep knowledge about different things. I mean, you might learn how React creates elements, but would that serve when you design some form or when you are coding a logic for some button with hooks? I know quite a lot of high level engineers that don't bother themselves wiyh learning "React under the hood" but they know the general frontend patterns and they can adapt to new frameworks like Angular becsuse there mightvbe reuse of some of them, even tough I would say this rarely happens for the high level patterns since the frameworks have 2 different approaches for the frontend.
I've just got the SICP book to work through because i have a high level programming understanding (junior no cs degree) so i'm now going to try learn the lower stuff see how much it helps me.
I agree: build deep knowledge about things. Don't memorize "things about stuff"; understand how it actually works. I keep hearing how Chat-GPT is going to take software engineer jobs, and it's true because we have so many devs just copying and pasting others' code (that probably wasn't very intuitive to begin with). These copy-pasta "developers" have no idea what they plagiarized because they never took the time to understand what they copy-pasted. If all you do is copy others' work, then Chat-GPT is already more valuable because it can at least generate boilerplate code based off of some specs. So, if you want to be more valuable than an AI, then you need to take the time to understand various concepts. It sounds difficult, but it's easier than you think. Just gotta put the time in...
yea, not all plumbers going to care about deep knowledge of plumbing system as long it fixes a leak and earn a living. also dont sweat it, just gets better at what you do, dont stop learning
There is a solution. And lots of people are going to hate it. Regulate the industry. Require the same barrier of entry for being being a software engineer that lawyers need to practice law.
There already kind of is. If the US required a masters in CS to be a SWE, then people would just go into more debt. Nonetheless, jobs would eventually become just as scarce because tech isn't creating many jobs So you're pretty much proposing to go into more debt without much gain
that's not a solution that anybody is going to support, because it leads nowhere. At the end of the day, the businesses out there want to have more software developers. And if they can't find a certified one, they'll find an uncertified one. And sooner or later the companies using uncertified devs would easily take over the companies that rely solely on certified devs. Or you could ban any software development to non-certified devs (I don't know how you could do that though). Sure this is only achievable at a country level, not a global level. That country (presumably in your case the US) would just lose the competition for innovation, because less people would enter the field. And the US would then heavily rely on off-shoring the software development, which would only hurt the software devs in the US, because unlike law, software work can actually be off-shored very easily. Even when it comes to law, these certifications achieve nothing else than making it extremely expensive to not only become a lawyer, but also to receive legal advice. And that legal advice at the end of the day, certification or not, is going to be very often different from lawyer to lawyer and therefore quite possibly completely useless. So certification has only benefited the wallets of those certified lawyers, but not anybody else. Finally, let's say we would have certification for software engineering. You would think and hope that this would mean you would only get to work with competent colleagues. But that's just a dream, a wish, it has nothing to do with reality. In reality, most professions follow the same bell curve, the same Gaussian distribution. And you'd still end up working with a colleague that you'd be asking yourself, how is it even possible that this person has ever passed the certification? Not to mention, that many many software devs already undergo something of a small certification -> they graduate from a university. You probably have good enough personal experience with this yourself, but ask yourself. Is graduating a CS program at a university really a guarantee that your colleague will be competent. You have surely, same as I, met many graduated software devs, who simply weren't that good and their knowledge wasn't particularly deep. Certification is not going to solve anything. And it's not even a matter of liking or disliking it, it's just a system that is setup to fail sooner than it even starts.
IMO most people don't have a personality that makes them a good engineer. If you don't feel the need to find out why stuff works, you're not made for this. It's all about learning.
ive done a course in programming and passed the exam and the teacher said alot of people just had no idea about anything, Beacuse they just copy pasted from chat gpt without learning anything.
I would like to add 2:00, as someone who learns to code for 3 weeks now, a huge problem as a beginner is that there are so many contradicting informations on this topic. You just have to google "what language should i learn first when i wanna get into coding ?" or "what basics should i know before i start to learn coding ?" and you get a ton of results, everyone's saying something different plus an absolute overwhelming amount of other informations to a point where i just said "F it I'll just learn C (in my case) and see where it leads". Sure you can't expect random people to handhold you and you have to be really interessted in this stuff to get a deeper understanding of how things work and why you use ceratin tools over others but already getting to this point is so hard as a beginner. And thats just me in my free time. Sure there are always these overconfident people that know one thing about topic X and think they're now an expert in that field, but can you really blame them if there is no clear path that tells them before you do Z you should first learn about w,x and y ?
People back in the day spent so much of their efforts in abstraction of low level programming to make it easy for future developers. Relearning them would be just reinventing the wheel. I do enjoy learning the computer science but making developers believe that you're not enough bc you don't know this and that is just gonna make everyone unhappy
should we learn to make a fire with sticks and stones before using a lighter? Most of us actually have shallow understanding about tools we use to live our lives, but we can still effectively use them and continue to develop further with those tools.
I don't think anyone is suggesting that we regress back and use archaic tooling, I think instead we are asking "should you use a lighter before you even know how fire works?" or "should you use tools without first understanding what it is abstracting away from you?". What if your lighter runs out of fluid? What if your lighter becomes deprecated and you need to switch. Someone who has foundational knowledge about what it takes to make a fire, who knows it needs heat, fuel and oxygen will be able to quickly adapt to any tool that they're forced to use (the mark of a truly great software engineer). Someone who only knows how to make fires with their lighter WILL be left behind.
When you become a senior level engineer and have to worry about performance then it will definitely affect how good you know your tools. You can not write efficient code if you don’t know what the underlying code is and how it works. At some point, you will have to write that underlying code yourself or else you get stuck in dependency hell.
@@Trizzi2931 Why not figure out how to deal with performance when you get to that part? Do you think that approach to problem solving is less effective than going deep dive into the root of the technologies that are already solved? I honestly don't believe so.
Can't lie, as someone who lives somewhere that's not a great place, this speaker you're showing infuriates me. I'm making my way through college CS, but there's many of us who really need to meet the foundations of the Maslow Hierarchy. The speaker sounds to me to don't dare go into this field unless you truly love the subject as he does. I see this as a shaming tactic. Many people are trying to get into a decent field and live. If the argument is: you know, you're still at a beginner or intermediate level. Getting as foundational an understanding as possible will make you more valuable. I can see that. These people, I deal with these people at campus all the time, f-ing insufferable. Not saying people shouldn't know everything foundationally, it's that a lot of people want to live better at first.
Funniest thing is that Jblow has spent 20 million USD so far on developing his upcoming sokoban puzzle game. Could have probably been made using Unity/Unreal for 1/4 of the cost.
He's not just developing a sokoban game. He's making his own programming language and game engine, the game is just a testbed to prove that the language works for large projects.
well it's not gonna change unless we stop hiring developers over a piece of paper that says they know how to do math and over knowing legacy languages like java.
It’s funny because as somebody from a non traditional background, the “why” behind programming has always been my favorite . I hate just using tools without exploring how they work it feels like I’m guessing lol
Can you blame the developers tho, majority of them do this as a job and as you said me knowing how to code a http server from scratch won't really help me when I just want to create a api for my service, pair that with the increasing demands of companies and we get people with a bunch of frameworks in their resumes and no knowledge of how or why that framework was created. Also the knowledge of why the framework was developed can't really be obtained while developing personal projects but I agree you should deep dive enough to make sense what you are doing.
very true, have seen this in most all companies i have worked in, developers are just surviving from stand up to stand up by saying a bunch of BS to justify why their ticket is not done, recent i have heard: "css is just not playing nice", "3rd party lib does not support this", etc - POs and scrum master have no other option but to trust them. Now if you can code, but you are a not talker and just do your stories on time , give a one min update, that makes you not as noticeable and as if you are not working on such 'hard' features as the above ones - when i am interviewing , i am trying to sift through those 'talkers' who cannot solve an easy leetcode problem - sad.
I feel this way. I never went out of my way to be a front end dev, but just kind of fell into React as part of my job. However, I think that maybe I make up for the lack of deep DOM knowledge via my EE background and literally writing ASM and C?
Hot takes 1.) Before people boast their deep knowledge. They should know the difference between algorithms and techniques. 2.) Any shallow knowledge becomes deep. If you deep dive into it. See that person who use web API? If the same person makes your web fast or not resource intensive. That's deep knowledge.
Everyone wants amazing engineers; but nobody wants to mentor them. Companies are doing their best not to pay them. Startup founders are desperate to "no-code" their way around them.
As a senior having to PR review work from Jr's that are copy pasting ChatGPT code by trial and error. Ending up with 5 different functions that does the same but neither does it correctly and on top of that when they are on their 5th iteration they don't even remember why they added the first 2. This is soooo true. Please don't blindly copy paste nor use AI to bridge massive knowledge gaps. You will end up shooting your -foot- legs off
For the most part, people who use javascript are not programmers. I share this opinion with Jonathan Blow. People who write javascript as so far away from actual programming that it almost has nothing to do with programming. Use Zig, Rust, Jai and other programming languages and see the difference.
Ooooh boy is he wrong about civil engineering! First of all very little changes in materials and constructions -- the all reuse age old construction methods. And when they do something new, they have the time to actually created modes, and test their calculations than upscale to a bigger model and solve issues and only then do they build and even then freaky shit happens. Take the Millenium Bridge in London, the Zwanenbrug in Rotterdam, arguably the Twin Tower and Building 7 that collapsed which no building is supposed to do from fire and debris. I have seen planes that have had serious design flaws where doors blew off (recently even), engines dropped off (Amsterdam 1991), Tanks that killed their own gunner because of moisture in a barrel. Wherever people engineer something new things go wrong, thats a fact of life. Even the space shuttle had serious design flaws two catastrophic failures. And him doing merely game development, is not someone who actually does develop systems that have any real impact. Games are generally relatively simple because they all have a few components, input, logic, rendering. The speed at which things need to be done is sometimes challenging but nowhere near as complex as for example automated order pick robots in a chaotic storage or flight control systems
Nail on the head. blow is a clown. He's a megalomaniac who wrote a couple of crappy indie games and acts like he's John Carmack. There's something uniquely embarrassing about these (always male) ego driven nerds who honestly think that sitting in front of a keyboard and typing makes them action heroes. They're laughable.
I'm not buying an argument that construction engineers are better - check how many bridges collapsed due to engineering errors. People make mistakes in every field. People excel in every field.
There are much more bugs and shit code and terrible websites and other garbage than there are construction failures.... And most construction failures don't come from engineering failures. They come from technician and construction failures.
@@mirakekkle9476but there's thousands of apps made by amateurs every week while physical construction projects are opened and then just sit there barely making progress for years with hundreds of inspections until it's eventually finished. You can't compare that like this.
the moment i started learning a programming language & trying to make something complex, i just come back again to memory, database Queries, Data structures / Algorithms ... that part alone i made a plan for studying it for 2 Years 🤷♂🤷♂
I too agree with most of the other folk here, the main reason is the companies just pushing the limits of devs by forcing them to learn 100s of things right from the beginning, I remember many people told me in the first couple years I won't be given much work in better techs rather I will get familiarized with things, if I join any start up from day 0 itself I will be given lots of responsibility, and this only helps in increasing the sweet numbers in your salary, till some point but sad reality is after certain age you end up getting staggerd on knowledge as you cultivated a habit of learning on demand or just completing on demand not learning deep or worst not learning at all. I don't know how someone junior can achieve this, as you will have not just pressure from office to learn but also from society on your salary, evevn though you are doing great you will be treated as a waste, and that does matter not always but still, it's real life not movie... It's easier to say, oh you don't have enough knowledge, but try to understand the choices he had?
part of the problem with newbies getting into open source is that RUclipsrs are suggesting they do. I am a noob and i watched a video were this guy thought that the best way to learn was contributing to an open source project. I thought it was stupid but i am sure that at least some people have taken it to heart.
I think that this is due to the complexity of the software production world. In order to be productive nowadays and be paid to resolve some kind of problem for some company/client you rely 90% of the time on web or similar development, where most of the complexity have been abstracted away, you don't have to reinvent the wheel. In the past where everything was more low level you had to deep dive and so to grasp the complexity of the algorithms and data structures, so by now the only way you have to deep dive into the fundamentals of programming is either working on niches of software development (like low level/embedded/os) or work on specific features of products, where performance and reliability is a necessity. But that's the very small part of the programming world, otherwise you have to go by yourself with side projects, where always I find myself not having the drive to do something useful, because it seems always to be a "dumb" useless software project
As a senior comp sci student, I think understanding low level and systems concepts, as well as the mathematical background is extremely important to creating quality software
I suck at Python, but whenever i see an actual good Python dev its always like using some libraries i never even heard of. So in order for a dev to be good he needs to just grind and memorise stuff like that? Thats unreal, i feel like the age of that is over, and its about learning how to find things instead of memorising it
Also it’s interesting how this guys take is that one of the instances of deep knowledge that’s missing is time complexity lol. That’s the one thing we don’t need to worry about for junior engineers fresh off dsa prep
@marcelofernandes6501I never said it wasn’t. I’m saying it’s something that almost all new grads know so it was a poor pick of an example of deep understanding that’s lacking across junior devs
*Counterpoint:* Don't learn more than you need. If you don't use it every day you'll forget it. If you do use it every day it will become obsolete in 5 years anyway.
The prototypical approach to programming is full of profundity. Web apis are a good example of apis - they unlock data for the developer. WebGL is a another great example of a good system that opens up options safely for the developer. Game Dev related Graphics APIs, however, are notoriously horrendous, to the point where they not only lock the developer out of the fundamentals of the apps they are writing, but even the coding tools are non existent, webgl has actual proper tools for graphics programming, whilst traditional tools for graphics programming sometimes even lack basic syntax highlighting
By profundity, I am naturally referring to the one shot nature of prototypical languages - unlike OOP, they allow single small programs to work without overly specific declarations, and popular web frameworks are always quick to prototype with and relatively lightweight. In other words, the precise reason J Blow sees not the profundity, is because he underestimates the nuance and meaning available in a small piece of JavaScript frontend code
Heres the thing... the part of your brain that solves leet code and comes up with all the crazy algorithms is veery different from the one that designs systems and full stack apps in general. Ive worked with really smart people who can solve some pretty serious algorithmic problems but somewhat have an issue with putting together a fullstack app. So verdict? Well... never stop learning. You need leetcode for the interviews (and to design efficient algorithms), but you also need to know the systems and technologies involved to making an software work. THAT is what deep knowledge is about. Always start from the bottom. And this is coming from someone who started with React without knowing js well😅 (but i had to later learn about it).
Instead of copy and pasting, I re-right the code several times over until I memorize it, even though I copied it so that I understand it thoroughly. Especially your neet code questions.
About the dom in JS there is know and know. I though I knew about pure JS in the dom before as a React Developer but I was wrong. I had to work in a legacy project for 6 months last year. JS & Jquery without any modern SPA framework and let me tell you why developers dont know about pure JS in the DOM: Its so shit compared to react (or angular and vue) that it is highly unlikely that is in any project that is still running. I found myself in this situation not because I was working on a standard web app but on an industrial web front end that is used in manufacturing. JS on its own in the browser is so shit I am glad nobody is using it anymore. You should get hazard pay to work on Jquery or pure js. (Disclaimer: I am talking about somewhat large projects not about small ones)
same here,I work in the manufacturing industry with a legacy codebase. It is such utter shit that I wouldnt dare anyone to even touch pure vanilla js + jquery
Software Engineers will never be recognised by law and regulations as “Engineers”. There is no legal recognition in any country at the national/federal level for Software Engineers, in the typical sense that we consider other Engineering disciplines - mechanical, industrial, aero, chemical etc. There is no truly single 1 practice that Software must follow as these other engineering disciplines have to, because if these other engineering disciplines DONT follow their legal guidelines, the results of their designs WOULD BE CATASTROPHIC. *You will never meet a civil engineer that designs bridges with the mindset of Software, where the mindset is “If it runs, don’t touch it”* You cannot possibly design a bridge, a car, an aeroplane, a building or a factory without considering every single possible safety factor involved in the design.
I’m trying to learn to walk before I can run but JavaScript is hard and no jobs are willing to hire if you only know html css and vanilla JavaScript and it takes way too long to fully fundamentally learn JavaScript even tho I do run into a lot of problems I wouldn’t if i fundamentally knew JavaScript fully I wanna put it away until I get a job using react or whatever else places hiring want
I mean honestly, if you don't understand machine language you haven't studied enough. Like for example you wouldn't be able to tell why this: for(int i = 0; i < n; ++i) { arr_cpy[i] = arr[i]; } Is SIGNIFICANTLY slower than this: for(int i = 0; i < n; i+=5) { arr_cpy[i] = arr[i]; arr_cpy[i+1] = arr[i+1]; arr_cpy[i+2] = arr[i+2]; arr_cpy[i+3] = arr[i+3]; arr_cpy[i+4] = arr[i+4]; } And I'm not saying that you should code in machine language just generally understand the machine you're using. And yes for gods sake work on projects and learn algorithms.
There's a BIG difference between `programming` and `software development` that's akin to `shallow` and `deep`. If you don't know the vast & wide difference, you're in the `programming` domain.
I had a senior dev once tell a beginner to just go learn a CSS framework when that junior dev had no knowledge of what CSS is. I was like that’s just the worst advice you could give a beginner.
Boomers dev is talking in the video. There waw very very limited technology/path to do something in the past. So it is easy to cover fundamentals. Today’s engineers must handle bunch of technologies at the same time like a circus performer. I don’t care how webpack works internally, my story must be closed in two days, and if I don’t how to configure webpack, I can not close it. This is end of the story.
I mean nowadays they expect even interns to know alot.Stuff like (CI/CD),cloud,containers, frameworks,software delopement lifecycles,etc.. so i understand why people are speedrunning knowledge.The game as of right now is to speedrun concepts and when you get the job , then you can deeply learn them.
🎯
Yea that's exactly what I'm going through. I don't know how people expect juniors to have this wide breadth of knowledge as is, but now we have to deeply learn all of it before getting a job as well? That's a fairy tale world
It does not take much to learn the fundamentals. Yes, it takes maybe more than half a year, but this time is well spent and will be with you forever
Agree. The problem is the "then" part, when in the end you don't spend time deepening knowledge because you have to go on with the new problem coming.
"Later" becomes "Never"
@@absent72I changed my major recently, I couldn’t take it anymore I’m looking towards nursing now
At least from my experience, I feel like a big contributor to software devs only having shallow knowledge is because they’re expected to know a ton of different things and are never given the opportunity to become highly knowledgeable and proficient in a single thing. Deep knowledge is never prioritized and does not often garner praise/raise.
Very valid comment
100%. Ut takes 1000 hours to learn one thing well yet junior development need to know 10 different technologies
@@Sub0x-x40 It's a sad problem, juniors have tough decisions to make - depth vs. breadth, depth vs. breadth... DFS vs. BFS ;)
if you want to know something, you'll learn it *on your own*. "you're never given opportunity" because you're a below average programmer / LITERALLY have no time (wrong job?) / are a LITERAL, first time coder. no one will give you "an opportunity", you have to create that opportunity yourself...
no words.
This is the comment I was waiting for. Most times many people are forced to have a knowledge of a dozen or so technologies and aren't allowed to specialize, especially in web dev and javascript. There's been many times I wanted to try to specialize but couldn't because I have to constantly context switch
Thats why I started by mining aluminum and copper to make my own PC, hopefully by next year I will be able to start coding in machine language
I hope you also made your own tools or otherwise it's not deep enough 🫃
😂
start from learning assembly level language😊
@@0x2B you r spoiled kid😐
Tbh though you would learn a lot
Yeah I feel that. I'm a crap "full stack" engineer with only shallow knowledge of a dozen different things, mainly because I had to learn 5+ languages and frameworks on the job with little to no mentorship. You end up learning just enough to deliver on tickets and never have explicit time to dig deeper or learn best practices. I'm left having to find time outside of project work and regular work hours to do deeper learning, but companies also expect me to have 6+ months worth of practice in Leetcode to pass interviews, so I'm spending my spare time on that instead of becoming a better engineer.
For what it's worth, Leetcode does help familiarize you with algos, so it's not 100% wasted time. That being said, I do think 6+ months is overkill. Better to dive deeper on the languages you use instead - after all, it's the tool of your trade. Or learn another paradigm.
I feel that, and empathize with you on that a lot.
Leetcode is deep knowledge, the current trend is not. There's countless projects from the early 2000s that use a programming language you've never heard of, but the algorithms that these projects implement are typically still relevant.
Well, software architecture is sort of universal, just like algorithms. All of the languages are basically the same. Spending a bunch of time mastering syntax and memorizing functions isn't as useful as mastering algorithms and software design principles. Never memorize something you can look up. Mastering when and how to use algorithms and design choices is the skill, not memorizing trivia about your tech stack. You'll memorize what you use often anyway.
I feel you bro I’m in the same boat but we will sail through💪💪
I think a lot of the old school gatekeepers, and I mean that with the greatest respect(I’m old in age but new to the industry), had a chance to naturally grow with new technologies. Similar to the first resident of a small town that became a city. They know their way around and know everyone who lives there. While the new resident gets dumped into a huge metropolis and must figure out his own way to get what he needs and get around. If you stop and ask 10 different old school residents for directions to somewhere, chances are you will get 10 different answers. Nobody knows for certain the best way to learn fundamentals like in other professions. So how is a new engineer supposed to know (especially if there’s a job on the line) ? Learn by doing and hope the pieces start to come together over time ?
I like this analogy
This comment is criminally underrated
I was convinced by their talk at first.
But i think your point is way better
This is a fact. The education cirriculum is inept. Data structures and algorithms should be taught through the context of writing a compiler.
Jonathan Blow has discussed this issue extensively in his talks, acknowledging the complexity of finding a definitive solution.
Personally, I tackle this challenge by delving deep into my learning process. I immerse myself in the historical context of technological advancements, striving to comprehend the evolution of current systems. This involves studying influential papers that shaped developers' decisions, analyzing source code, and striving for a thorough understanding. In today's landscape, the level of abstraction is such that delving deep is imperative, unlike the past eras where necessity drove individuals to grasp every aspect, from circuitry to operating systems.
It prompts the question of whether modern computer science education should be restructured to emphasize deep learning and essential insights. However, there's a concern that we might be expecting too much from educators who themselves lack these crucial insights, potentially failing to transmit them to the next generation. While contemporary computer science curricula excel in teaching mathematical principles and algorithms, they often fall short in applying this knowledge practically.
Many new students express dissatisfaction, noting the perceived lack of value in theoretical courses and the insufficient emphasis on practical, marketable skills like web frameworks. This discrepancy underscores a flaw in computer science education. Spending even a single day delving into the source code of commonly used tools-operating systems, web browsers, search engines, text editors-reveals the foundational significance of these concepts and their pervasive application across various domains.
I spent my first 4 or so years in data engineering just getting by with the bare minimum of what I needed to know. Lots of Python, Bash, and whatever database I needed to know at the time. I've spent the past 4 years in my free time diving deep into "deep knowledge" of things like the low level implementation details of operating systems, programming languages, how CPU's and memory works, data structures and algorithms etc. and honestly now looking back at it I can't believe how I got away without knowing so much of this stuff. I was able to turn "I need to learn this" into "I want to learn this because I love it" and it really made this deep dive effortless. Not recommending others spend thousands of hours and dollars in their free time learning, however for me it's been absolutely invaluable in my career
exactly same thing happened to me its just like having a new perspective
Do you have any favorite resources that you've come across?
Yes. I would also like some recommendations to learn
My question is whats the outcome of this? asking for genaral info
spending lots of hours gaining deep knowledge and only fraction of companies or lets say project team of people with Deep K, Big tech are also got polluted now.
do you still work at same place / level compared to if you had not gained deep knowledge and stayed shallow and got promoted over time ?
I have seen people being shallow and got promoted and working with very good knowledgeable people.
People with DK do all the heavy lifting and other just get their slices out of result.
Are there any resources (e.g. books, websites, courses, people to study and learn from, etc) you think are particularly useful when it comes to getting deep knowledge?
NGL, I don't completely know everything about the frameworks or libraries I use. But I also feel like to an extent, this is a supply-and-demand issue. Companies don't care about your deep knowledge unless it directly applies to your role, so you only learn what you need to. But having a CS degree gives you enough deep knowledge to understand what the machine is doing and why, and IMO that's sufficient for almost all jobs.
I am a strong believer in just in time learning. If you try to learn everything in depth before you have a use case for it you will likely waste a lot of your time and not retain much. It can be an inefficient way of learning. Instead, you should get a high level understanding of what is possible, then dig deeper once you have a use for it.
Yup. I'd rather just build products that the business or client wants than slog through minute details to circle-jerk how good niche knowledge is. At some point, you may have to go into the deep knowledge and you can dive in when necessary.
You can't have deep knowledge with all the products you need to learn
@@evancombs5159 💯💯💯💯💯💯
I completely agree
I was a "framework dev" for a long time, basically just working in the most popular framework of the time and getting by, recently i've been diving deep and your channel/site has been monumental for me and my growth.
Literally same I used the frameworks to get employed and then I really just started going crazy on fundamentals and still do I feel like they matter more as you become more senior
We have to admit that this is the industry's fault too.
I have ds and algos knowledge, systems design knowledge, db theory knowledge AND STILL, "yeah I see you have projects in Java but we specifically need professional experience in Spring Boot ...". So it's not only people learning but employeers don't care for people who have deep knowledge in general.
I still advocate that you will be better off, learning ds and algos, systems design and computer theory but you can't ignore the "shallow" knowledge you will be asked to have, when applying to jobs.
Well, it sounds like they would like for you to have deep knowledge in Spring Boot. But, each role has wildly different requirements, so it isn't feasible to have the deep knowledge companies want for any given job listing. That's cool because that means there are more jobs out there because of it. That's also bad because you most likely don't know enough of the right thing to land a job. So, I guess jut learn the most common set of things related to your specialization and hope for the best?
@@iMagUdspEllr Wow 5 months go by fast lol. My statement is more towards employers that say, "We are looking for a developer, you have the programming language so, we are sorry but we are not going to move forward" , and in reality if you know how to do a well architected software in any language, you'll be better off.
I really think that you can be better off with some dev knowing language applying to a language with 6+ years of experience than somebody that matches the description but has less years of experience overall.
There are some really niche jobs where sure, if you do api's and suddenly apply for a graphics engine job, sure that is vastly different but api's in one lang. is almost the same in another. Everything can be learned and we as software engineers should always be learning.
Knowledge is transferible and people doing recruiting in general, are doing a terrible job imo. This is why I hate specialization, people shouldn't niche into a programming language blindly, sure get good at one before you learn another but your knowledge is transferible. It is always more important to learn how to solve problems.
Yes, Spring Boot is quite big and nowadays you don't do any project in Java without Spring.
@@majksu Not the point though, I have personal experience with Java Springboot, professional experience with C# .Net, Go and Nodejs. Creating an API in one language is almost the same as creating it in another with some architectural decisions differing. BUT, you can learn the syntax and be proficient right away.
@@arturfil I mean once you land a job you'll probably be a one man army anyway writing in whatever project needs, but recruiters are looking for specific skills just for business needs. Either you talk your way through it or just paste in your cv skills you need for this job. It doesnt matter in the project, it's only for recruitment to be happy.
He has a point and I do agree to some extent but you have to admit some of these issues are due to the way the industry is wired in general. Technologies are easily replaced and knowledge gained become obsolete. Trying to have a deep understanding of every underlying concept or technology is a noble goal but not sustainable in the long run. Especially for junior programmers
I somewhat agree but I would distinguish between concepts and technologies. Having deep knowledge of concepts is viable and important. Having deep knowledge of all technologies (which are layers of abstraction over concepts) is not practical and less important.
Deepening the fundamental, that is the point.
Frameworks are like company policies and people skills are fundamentals. Fundamentals can be always tranfer to different enviroment.
If you are not manager, you won't go deep in how your company works.
Same with frameworks, most people should not deepdive into every framework.
Computers fundamentals hasn't change that much in past 20 year, everything is still linear calculation (branches are only to different linear pipe).
Fundamentals make you understant that one instruction that broduce 100 cells, is a loop regardless level of abstraction.
You won't make TypeA inside of TypeA object structures, because that is recursive memory threat that can invade whole memory exponentally. Road to hell is one bug away. (And all that wasted calculation that is needed just to avoid memory recursion to happend)
100% It isn't the devs fault if the companies hiring process is so bad that you end up working with a bunch of devs without the required skills/knowledge. The dev accepted a job that was OFFERED to them. It is the management and organizations job to only offer jobs to individuals who fit the criteria of the role.
The principle is that every new thing under the sun is just an iteration on the fundamentals, and someone with a grasp on them will be able to understand Shiny New Thing confidently, and much more quickly. You actually know what you don't know, and what you need to know.
You can't have deep knowledge if you are required to know 1300 libraries, programming languages, techniques, algorithms and others. Building and app can be compared to building a house. But to build a house you need an electrician ,a plumber, a builder, a develeloper. For apps, if you are a dev you are responsible for everything and supposed to know everything deep ;). Go learn to be a nurse, you will have a skill for life, go learn to be a programmer and you are out of date before you have started looking for your first job, even if you have a deep knowledge. You are a hamster on a spinning wheel that is spinning faster than a robot can run ... good luck chasing the dream and thinking in the era of bots you can keep up with them ;)
I think the problem is when you have too much abstraction. The obvious example is is-even/is-odd. Some abstraction is needed but I think we've gone a bit too far.
The great thing with deep knowledge is that it can be applied to every other similar technology once you understand how they work.
You still need to know many different types of tools like web frameworks or languages, but you don‘t need to learn everything again when you use something new, because they all behave similarly
This hit too damn close. I do not feel "impostor syndrome" because I am straight up an impostor, so it kind of makes sense that I haven't been able to get my first Jr role. I've been studying so hard and tried to practice so much but I still feel miles and miles behind people writing Rust/C++ and being masters of leetcode (not implying those things are mutual). But oh well, what can I do.
I felt this too hard as well, you're not alone.
1:07 "everybody hates algorithms & data structures" whaaat? That's legitimately the only programming i enjoy...
the problem being outline is just the corporate structure and how they hire. No one wants to hire someone and train them to be very deeply knowledgeable in something
AFTER Reading through all 92 comments currently present, What I realize what JB is saying is actual truth. Most people are defending being shallow and calling have deep knowledge / fundamentals is not required in current environment, there points includes...
* Current market is evolving very rapidly, you cant catch up having deep knowledge.
* Companies just want to build and ship, no one wants to spend money for letting their people get deep knowledge.
* Having deep knowledge in first layer of abstraction is better than having knowledge of core.
* You dont need to know fundamentals to get the job done.
IMO, these are those people which JB is referring here in 3:13, Out of 100 people only 10 wants to know fundamental and they are the ones who create packages, which is well created and maintained and have all those abstraction and performance improvements, So the left over 90 people can just install packages and get their job done.
And both of them are fine, I am not saying first is best and later ones are worst. This point what JB is saying is currently becoz barrier of entry is/was very low the trend is more shifting on 90% side to 95% and 10% are now only 5% and JB wants to say is we need more people on building side than on consumption side.
100%. I think generally most developers I've bumped into have always had a good grip on the fundamentals but I can see people jumping into frameworks like React, Flutter or something similar without learning software fundamentals and it just being magic and no practice or exposure to the underlying language.
We have to understand that the scope for a software engineer has grown fundamentally too. Back in the 90s, you wrote to just interface with a machine and this has now grown to deploying to cloud, pipelines, and potentially other microservices too.
I think if someone just watched the video and didn't analyse it you'd assume Jonathan is the old guy shouting at the clouds but he's just saying it's moving a bit too fast for people to be able to actively get into the fundamentals first.
"well created and maintained and have all those abstraction and performance improvements" this made me remember i saw also the other extreme where so much over enginnered shit in the years just for the sake of "doing it well" that the code becomes a damn impossible task to understand creating.... vendor locking to the team that created the code from the start
you just saying nonsense
When these people starting learning programming, there was probably only the so called deep knowledge required. But times have changed significantly. Even if you don't put time into the deep knowledge, you are still overwhelmed with all the new technology you need to learn to land a job. They had it easier. Much easier.
25 years as a software engineer. You are 💯 correct. Was wayyyyyyy easier back in 1999.
I've been coding for 6 months now, when I started I tried to go for a bootcamp where they encourage this sort of behavior. I said to one of the facilitators "I wonder why my code is able to do x" and he simply said to me,"you don't need to know how an engine works to drive a car" so I left that camp and went on to learn python and js on my own, now that I am decent at the two, I am learn c/c++ because screw that guy and his lame approach to life. The way I see it you go all in or stay out.
yet he's right... You dont need to know how your car work to drive it very well...
@@Ludo045Can you even compare the two? If you are going to become an engineer it does NOT hurt to learn the inner working of things.
I agree with him in a sense, but most people are hired to a do a certain job. My job is to be a C# unity developer, I've expanded my knowledge into data structures and algorithms, worrying about performance and what not. But at the end of the day I write code in C#. Could I learn to write code in any language and figure out how to debug what I need? Sure, but at the moment I don't have the time for that. I think he's been working on his own for so long, and is so driven by his own success that he has no idea what it's like to be a normal person anymore who's just trying to survive.
The problem is expecting 5 years of experience from a fresher. Deep knowledge requires handling deep problems. It takes time for a developer to get deep knowledge.
I would say for devs starting their journey, your curiosity and problem solving mentality is gonna help you get there what discussed in the interview.
Thanks
Atleast watch full video , deep knowledge here means , if you are coming to me and saying you do not even know what nlog(n) time complexity means why is space complexity important what is stack and what is heap you dont know and how is memory allocated you dont know --- you are shallow dev .. most of these things are taught in undergrad these are basic foundations which many lack
@@seriouscapitalist you have a point but in the case where i know how things are working under the hood but at the same time that's not the concern because ee nee the feature out in production is how sometimes as a jr. Dev i experience so like just build shit and ship it. Unless I'm given the task to look closely into such stuff. The Deep tech knowledge even i know wouldn't make any difference here.
Thanks for putting your thoughts buddy .
@arvee-4699 You tend to forget that a lot of people don't come from an IT cursus. From experience none of the points you mentioned were introduced to me nor useful for my day to day tasks. What I noticed though is how pedantic can senior be regarding this but they aren't even able to explain them.
Internet resources, senior, online courses... whatever they are never ever consider those aspects and even if you're willing to learn and deepen that knowledge, you're lost. There is a ton shit of stuff to know nowadays and an overload of bad resources that even just sorting that and find what's relevant to learn is hell. No one agrees, everyone has opinions and in the end juniors are just running after a high speed train. I'm there today and have no fucking clue of a decent learning roadmap for my goals.
Some junior dev might just be lured by money and don't even care but to me the problem is also companies, industries and how people are willing to teach. I was hoping to get that from some seniors in my previous team and in the end they just were as clueless as me.
@@seriouscapitalistThese are topics explained in undergrad classes though.
@@pocolocoheyya3375 oops my bad thanks for correction meant to write undergrad :D
All these people saying deep knowledge isn’t important in software are ridiculous. Having shallow vs deep knowledge of even your terminal and text editor will teach you so much and you’ll be able to see similarities and pull from them in your own software and other tools.
It’s crazy to think that having shallow knowledge on sumn that you work on a daily basis will have you comparable to somebody w in depth knowledge… literally compare a Junior vs senior dev
You can't have deep knowledge because you have to learn an entire stack and devops. It's impossible to know everything
Well the argument for that is what do you mean by shallow and deep knowledge?
Technically all knowledge that are beneficial should be learned.
It's breadth of knowledge vs depth of knowledge. I have 10 years of experience at FAANG and would argue that having a breadth of knowledge of commonly used technology is much better than having a depth of knowledge in stuff like the terminal or a text editor. We all have limited time and energy. Any time you spend learning things like deep knowledge of the terminal or text editor means less time spent learning the basics of other useful tools. I'd rather be good at a bunch of things that just great at a few.
I copy paste everytime, my senior devs made me do so. I asked questions, they gave weird looks, they asked why are you asking this question. I stopped asking questions afterwards. Work is not measured by knowledge, but by delivering features to customer, whether that feature is critical to customer based on that you get payscale.
@@aakashs1806
pretty much this.
I do the work, the compagny is happy, the collegues are happy, i take the money so im happy, and i go back home.
And im a mediocre devs.
When started the latest webdev project I was explicitly asked about which libraries we gonna use. For everything, from DOM manipulation, to forms handling, even without knowing exactly what parts will be complicated and which one will be not. I ended up cutting some of the list after realizing, that some of said libraries are not only unnecessary, but will slow the development process down. In the same project I see libraries being used in such a minuscule fashion - like comparing two dates and picking the later one - that I have to wonder if people are really able to write JS by hand anymore.
The JS standard library on everything (especially dates) is such garbage that if you need to do anything more it makes sense to use a library. Is there any standard functionality that isn’t much, much worse than some basic 20kb package dedicated to it?
@@frank13621 some places in the world that these 20kb packages are being downloaded to, barely get 3G mobile data. So for mobile apps that use these, you absolutely are adding bloat that is unnecessary, yes the standard library sucks, but its better to write the native code yourself and strip it down to be as small as possible than importing a 20kb library SIMPLY for comparing dates.
Honestly software engineering, networking, cybersecurity and Data science is All layers and layers of abstraction. Learning the basics of these can pretty much spring board you because many jobs combine these fields
idk if this idea is pertaining to this discussion but, it did pop in my mind that I think there are now two types of developers, one who is more into the fundamentals of code - like competitive programming, the math and logic behind stuff and, the other type to build apps to deal with specific problems - like automating something or building a shortcut of lengthy procedures! I feel like as long as the developer enjoys what they are doing, be it CP or projects, and are not in for the money, the domain would continue to flourish maybe.
The difference is the math developer can do the app developer's job, but not vice versa: and we're stuck with a whole lot of the latter.
It is a spectrum - the lower the level you are programming in, the deeper the knowledge about the hardware you get. Competitive programming is a distinct thing; knowing to simply implement lots of algorithms does not correlate with hardware knowledge.
This is not what I think but I know with 100% surety i.e. - Actually there are programmers in 2024 who have all the knowledge required to create a program but they don't have a deserving job and income for their knowledge which irritates them from new programming auditors of 2024 first time introduced in India, whoever this man is, from whatever era, doesn't appears as he have any knowledge of programming, he appears more like a sarcastic joker, but still for the baby guidance in programming, before having a deep knowledge, a programmer need to be aware of aspects which needs depth and aspects which don't... that's why it's said kids shouldn't enter into programming before being matured.
@@locinolacolino1302 not necessarily, people are always complaining about hiring leetcoders and competitive programmers that can't develop apps. although personally I do find junior-level web development easier than leetcode.
I think you need to compare this to:
- keyboard/code monkeys pumping out duct taped garbage/spaghetti code (because of time/money constraints)
- specialists who know nothing outside of their extremely small bubble of e.g. only assembly/C programming
There seems to be little in between.
You have a billion different job offers for companies looking for (webdev) code monkeys who are proficient in some variation of a shitstack comprised of "popular" frameworks/languages. No time to master any of the languages in the stack, just copy-paste your way until this whatever app/website is done and the boss can collect his paycheck from the customer. Pretty brain dead and soul crushing if done for long periods of time.
You literally waste tons of precious time on learning languages and stacks which are as disposable as the websites and apps you build with them.
At the end of your career, you will have no memory of your first app/website and what you used to build it with, as you will have worked with hundreds of languages/stacks and no time to master them or learn anything useful.
No clue what you did all these years, but whatever, it brought in a paycheck. Not really a path for someone that loves software dev in their heart and soul. You might as well go out and get a bunch of random jobs to earn a living.
And then you have the real hardcore low level, embedded/CS stuff for e.g. defense contractors with equally hardcore, tried and true, precision work with assembly, C, C++, whatever.
Maybe here and there I might see some jobs looking for Java devs but that has pretty much dried up as far as I can see (and for the better in my opinion).
gotta have the right balance of learning on the go and knowing the prerequisite stuff
Some great advice I’ve heard for noobs is to go one step deeper than where you’re working, just one. It’s a good way to gain a deeper understanding without being overwhelmed early on.
I have no idea of 99% of the lingo jargon you use. I do and have always done programming ONLY for myself, for my math research. And, after 43 years of coding, I honestly can say I have no idea how to code in ANY language. I know less now than I did in Summer 1981 when I took my first and only Fortran course at community college. I am 60 now. I desperately need help with Mathematica. But it is not even worth trying any more.
Learning frameworks instead of just JS also makes it very difficult to learn other frameworks and libraries because if you don't know the common denominator - JS. You have trouble identifying what part of a code example is framework code vs plain JS, and this gets even more confusing by JS itself accumulating more features and syntactic sugar over time.
It is really important to understand the basics, the problem is you often only notice this after you already learned them.
I learnt React first then now kind of know NextJS. I don't know the vanilla JS but I do know its importance. I do know the basics but not enough, now I am trying to learn JS and after learning it maybe I will go into some Data Structure or something like that. I really want to build a foundation
I didnt know react even existed at first. So I wrote a lot of vanilla js by hand like and then understood in depth about js. I understood about async programming after working in nodejs. Still has gaps in knowledge about the internal workings but still aiming to improve i have been mostly interested in how it work. I remember using react and writing document.querySelector inside it because i didn't know how to use it
I think this kind of opinion is the reason why tech or STEM people in general needs to at least try to learn social issues. Maybe a little bit philosophy, like critical realism. Because the way this opinion structured is ignoring the structure/mechanism/tendency behind the empirical event (softdev can't handle deep stuff). It almost likes they blame it on an individual, while the labour market is a part of free market, so when we talk about it we should take politics and economic issues into account. Because by doing that we would realize that this isn't entirely an individual issues, but systemic issues. This isn't skill mismatch issue, this is the demand-side issue.
There's job scarcity issue, and they blame it on an individual skill? That's irrational. If a country is a labour surplus economy with scarcity of jobs & plenty of unemployment, building up its labour force to fulfill some jobs' technical or knowledge requirements is the least of its worries. Its main problem is generating the jobs to absorb them in the first place. So the demand for deep skill may not reflect actual need of skilled labour or particular composition of labour by the economy. Instead it might reflect more of the business cycle & labour market bargaining power between employers & workers. Moreover the skill mismatch discourse was part of "neoliberalisation" which dismantle the full employment agenda in developed countries & the developmental state in developing countries, among others, that made it more difficult to sustain job growth.
Conclusion, this discourse on the needs of deeper knowledge ignores structural economic factors such as underdevelopment, scarcity of productive capacities, lack of jobs. The labour market simply reflects this.
Ive been learning for over a year and went really deep for web development, even into the V8 Engine to see how it all works, to me, regardless of how deep you want to go there's always more to learn. Thing is there will always be someone with half assed knowledge or even someone with knowledge that can't build anything.
Been doing this more than 30 years and I'm a hiring manager for a software company... he is SO correct with what we see with nearly all of the younger candidates.
I actually agree with this guy 100%. I’ve been a swift dev for about 5 years and did not take the time to learn the basics, I feel so behind :(
Started reading up on patterns and other languages and feel much stronger now 💪
2:04 This is true, When I started it out, I made probably 3 Javascript projects and jumped right away into React, now the outcome is that I'm kinda bad at DOM manipulation, now I need to pursue something I should have known. Please, if you are a beginner, don't jump into React, learn JavaScript first
This problem is very complex. On one hand, a programmer is expected to have deep knowledge and on the other - newer and newer frameworks are coming which only add additional complexity and dependencies on libraries and other frameworks to achieve basically the same result as before any frameworks existed.
Yeah, but this is sort of not a problem because new frameworks either don't get adopted or they are basically the same thing with different syntax. It's rare that something new is actually head-and-shoulders better than the current solution. Then, in that rare case you can adopt the new solution if it is worth the time to rewrite the current stuff.
I actually agree, I’m self taught and I would say that I’m a developer, the word engineer should be reserved for people who went to college in cs, math or some type of engineering because of their deeper understanding!
It is evident that the field of programming is currently experiencing a decline rather than reaching its zenith. This observation is rooted in the belief that the industry is grappling with a substantial presence of subpar programmers.
Although I kind of know React I only focus on backend skills as id rather be a proficient backend developer than a mediocre full stack dev.
be careful. The job market doesn't (nor did it ever) share JB's opinion. From financial stability POV it might be better to be a mediocre full stack. Especially if you plan to have a life outside of work (family etc.).
These days you'll need to be proficient at both
Well at smaller companies yeah but larger companies tend to hire specialized frontend and backend. Especially with the rise of microservices its easier to find specialized backend if you know a bit of cloud.
Good on ya, I hope you can convince all your colleagues to follow in a similar path.
As an Indian , I can confirm that we are really into herd rather than what we actually like. If someone made OSS and got a good job yikes we all going to do that and get placed and someone did DSA and get FAANG we will also going to get their. But the problem is as myself we most of case don't care about under the hood stuffs and we really into some race... And if some 20 year guy get good salary that's might have his luck and also he might have some privileges towards this field and i promise his knowledge towards low level might be shallow..
And I'm also followed that same but after i left Indian youtubers and get into international youtubers ie primeagon theo low level learning neet and some more. I realised programming is not and shouldn't be an end goal rathee it's an art like learning musical instruments. It'll take their own time to get truly good at it rather than being shallow good..
And please take this as my experience and perception... Thankyou 😊
His name is ... Indian--aegen!
It's because d i r t b a g s like you only do things for money.
Moral of the story: Don't be hasty in acquiring knowledge.
I had an app that I was trying to do for a capstone project for a bootcamp (don't hurt me, I joined the military instead of going to university). Some of the interactivity we needed for our core django app would've required a whole different backend etc .....OOOOOOR - screw it, do it in jQuery. Because I had been passionate about computing for a long time, despite my lack of formal education - being able to say "nah, we can just embed jQuery, it'll be fine" saved the project, because deadlines suck. Understanding what came before and how to do stuff the annoying way without fancy frameworks isn't necessarily always the best thing to learn, but it does come in handy and can't come without some amount of fundamental knowledge.
Speaking from the perspective of a beginner learning html for the first time, I %100 agree with what he is saying. I'm actually about to drop a course because I feel I'm just pushing out projects without having the time to actually learn what I'm doing. A good analogy would be I feel like I'm Bumblebee in Transformers, but with coding. I can string together a coherent sentence, but it's only by copying and pasting from another source. When it comes time to really understanding what I'm saying and formulate my own ideas, I still feel like I can't talk. Which I imagine is normal, but I feel like the attitude with a lot of other students is to just keep doing that and just "get the next assignment finished".
Frankly speaking I have seen people writing "Litcode" and not knowing any algorithm or concept of cache or even dont have general computer architecture knowledge, able to get into big tech software companies, god knows how by using Proxy, makes me re-evaluate my degree and practice once again
Well civil engineering is a bad example because it needs to be correct. Software most of the time can be incorrect and be updated later. No one's life is on the line unless you're coding some medical software or something
This is true for not Big Giants like MAANG
Or NASA lol
The banking sector will fudge you up if you think like this , you need to be correct
and kids thats why your data keeps getting breached online
The solution is actually fostering a culture of apprenticeship. This applies to all subsets of engineering. Don't want people to form bad habits with mediocre skillsets and make the assumption that they should be getting paid like a doctor? Teach them what it takes to be successful.
I work with a lot of older guys that only ever did C# or Java (only a few tried both). I think it is not a new issue.
There is nothing wrong with that. Those are very widely used and good languages. There will always be job opportunities with those languages, and it gives you the ability to really dig deep into how those languages work to use them more efficiently.
Guys trust me when i started learning i skipped all these and when i started learning all these i came to know how it works and the underlying concepts of it . if you are a beginner learn the basics its gonna help you alot And dont learn programming if you want moneyyy learn it if you are really passionate about or you wont grow and its a complete waste of time you will loose interest after a while
No point in having deep knowledge when you'll be laid off after working hard.
Fuck these companies
Do the bare minimum, get paid, and move to the next one.
And sadly the culture has become like this. Time passed by and the people and companies became more selfish, a sad reality.
@@p0tat0627 Don't hate the player, hate the game. I make $7k a month for doing almost nothing. I'm gonna milk the fuck out of these companies
@hurstilthymy4943
The problem with this mentality is that it will stunt your growth as a developer, therefore stunt your career growth.
I've gone deep at my company and have introduced a new language (Go) and built out our monitoring solutions.
I'm now proficient in two new languages thanks to going further at my company (C# and Go) and now getting new offers out of the wazoo.
Do more, get paid more and move to a better job when your ready.
I think you're mixing concepts up. One thing is working hard; another thing is being knowledgeable in your domain. You can be very knowledgeable and an expert in your niche, yet still do only the bare minimum for which you get paid.
This mentality is going to get you nowhere but to be a mediocre person forever.
I have the opposite problem: I know a decent amount about how C++ interacts with the computer architecture, but I never learned any frameworks because I didn’t know I had to, and now I feel lost
Lol.. that what I was thinking.... Most Dev get job through frameworks
I don't agree that if you don't have deep knowledge, that it will catch up with you in the long run, I've seen Principal software developers who don't know how to solve LC easy problems, or have not heard of Time Complexity and all that theory, but they know how to Design Systems, they know how to Manage Big Teams, they know the necessary Frontend Framework that is used by the company from end to end.
Often there is a debate who is better programmer, the ones who focus on the CS fundamentals vs those that Experiment with new Technologies, and often the answer is that both can be successful depending on the job.
Deep knowledge != fundamentals, when you know for example how React works under the hood you have deep knowledge about a framework that can probably be applied to every other frontend framework.
It doesn‘t matter if you know about every abstraction layer down to the cpu instructions, but that you know more than just the syntax of and when to use some technology
@sebastiankrali2547 Deep knowledge is when you know some concept to the fundamentals.
If you know React under hood, it will serve you no benefit for other frameworks at all.
Since all of them have different architectural methodologies.
Also, I meant about programmers who focus on the CS fundamentals side rather than technology speficic deep knowledge.
I don't think the topic is about deep knowledge here, because I acknowledge that both types can have deep knowledge about different things.
I mean, you might learn how React creates elements, but would that serve when you design some form or when you are coding a logic for some button with hooks?
I know quite a lot of high level engineers that don't bother themselves wiyh learning "React under the hood" but they know the general frontend patterns and they can adapt to new frameworks like Angular becsuse there mightvbe reuse of some of them, even tough I would say this rarely happens for the high level patterns since the frameworks have 2 different approaches for the frontend.
I've just got the SICP book to work through because i have a high level programming understanding (junior no cs degree) so i'm now going to try learn the lower stuff see how much it helps me.
Even the framework developers have changed their documentation style. In the old times, the documentation used to talk about how the framework works.
I agree: build deep knowledge about things. Don't memorize "things about stuff"; understand how it actually works. I keep hearing how Chat-GPT is going to take software engineer jobs, and it's true because we have so many devs just copying and pasting others' code (that probably wasn't very intuitive to begin with). These copy-pasta "developers" have no idea what they plagiarized because they never took the time to understand what they copy-pasted. If all you do is copy others' work, then Chat-GPT is already more valuable because it can at least generate boilerplate code based off of some specs. So, if you want to be more valuable than an AI, then you need to take the time to understand various concepts. It sounds difficult, but it's easier than you think. Just gotta put the time in...
yea, not all plumbers going to care about deep knowledge of plumbing system as long it fixes a leak and earn a living.
also dont sweat it, just gets better at what you do, dont stop learning
There is a solution. And lots of people are going to hate it.
Regulate the industry. Require the same barrier of entry for being being a software engineer that lawyers need to practice law.
There already kind of is.
If the US required a masters in CS to be a SWE, then people would just go into more debt. Nonetheless, jobs would eventually become just as scarce because tech isn't creating many jobs
So you're pretty much proposing to go into more debt without much gain
that's not a solution that anybody is going to support, because it leads nowhere. At the end of the day, the businesses out there want to have more software developers. And if they can't find a certified one, they'll find an uncertified one. And sooner or later the companies using uncertified devs would easily take over the companies that rely solely on certified devs.
Or you could ban any software development to non-certified devs (I don't know how you could do that though). Sure this is only achievable at a country level, not a global level. That country (presumably in your case the US) would just lose the competition for innovation, because less people would enter the field. And the US would then heavily rely on off-shoring the software development, which would only hurt the software devs in the US, because unlike law, software work can actually be off-shored very easily.
Even when it comes to law, these certifications achieve nothing else than making it extremely expensive to not only become a lawyer, but also to receive legal advice. And that legal advice at the end of the day, certification or not, is going to be very often different from lawyer to lawyer and therefore quite possibly completely useless. So certification has only benefited the wallets of those certified lawyers, but not anybody else.
Finally, let's say we would have certification for software engineering. You would think and hope that this would mean you would only get to work with competent colleagues. But that's just a dream, a wish, it has nothing to do with reality. In reality, most professions follow the same bell curve, the same Gaussian distribution. And you'd still end up working with a colleague that you'd be asking yourself, how is it even possible that this person has ever passed the certification?
Not to mention, that many many software devs already undergo something of a small certification -> they graduate from a university. You probably have good enough personal experience with this yourself, but ask yourself. Is graduating a CS program at a university really a guarantee that your colleague will be competent. You have surely, same as I, met many graduated software devs, who simply weren't that good and their knowledge wasn't particularly deep. Certification is not going to solve anything. And it's not even a matter of liking or disliking it, it's just a system that is setup to fail sooner than it even starts.
I think the most important ability to have as a dev nowadays is to be able to learn quickly rather then learn deep, atleast at first.
IMO most people don't have a personality that makes them a good engineer.
If you don't feel the need to find out why stuff works, you're not made for this. It's all about learning.
Honestly I cant do it if i dont have a deep knowledge about it so i always strive for that.
I agree word for word with JB
How embarrassing.
ive done a course in programming and passed the exam and the teacher said alot of people just had no idea about anything, Beacuse they just copy pasted from chat gpt without learning anything.
I would like to add 2:00, as someone who learns to code for 3 weeks now, a huge problem as a beginner is that there are so many contradicting informations on this topic. You just have to google "what language should i learn first when i wanna get into coding ?" or "what basics should i know before i start to learn coding ?" and you get a ton of results, everyone's saying something different plus an absolute overwhelming amount of other informations to a point where i just said "F it I'll just learn C (in my case) and see where it leads". Sure you can't expect random people to handhold you and you have to be really interessted in this stuff to get a deeper understanding of how things work and why you use ceratin tools over others but already getting to this point is so hard as a beginner. And thats just me in my free time. Sure there are always these overconfident people that know one thing about topic X and think they're now an expert in that field, but can you really blame them if there is no clear path that tells them before you do Z you should first learn about w,x and y ?
People back in the day spent so much of their efforts in abstraction of low level programming to make it easy for future developers. Relearning them would be just reinventing the wheel. I do enjoy learning the computer science but making developers believe that you're not enough bc you don't know this and that is just gonna make everyone unhappy
should we learn to make a fire with sticks and stones before using a lighter? Most of us actually have shallow understanding about tools we use to live our lives, but we can still effectively use them and continue to develop further with those tools.
I don't think anyone is suggesting that we regress back and use archaic tooling, I think instead we are asking "should you use a lighter before you even know how fire works?" or "should you use tools without first understanding what it is abstracting away from you?". What if your lighter runs out of fluid? What if your lighter becomes deprecated and you need to switch. Someone who has foundational knowledge about what it takes to make a fire, who knows it needs heat, fuel and oxygen will be able to quickly adapt to any tool that they're forced to use (the mark of a truly great software engineer). Someone who only knows how to make fires with their lighter WILL be left behind.
When you become a senior level engineer and have to worry about performance then it will definitely affect how good you know your tools. You can not write efficient code if you don’t know what the underlying code is and how it works. At some point, you will have to write that underlying code yourself or else you get stuck in dependency hell.
@@Trizzi2931 Why not figure out how to deal with performance when you get to that part? Do you think that approach to problem solving is less effective than going deep dive into the root of the technologies that are already solved? I honestly don't believe so.
Can't lie, as someone who lives somewhere that's not a great place, this speaker you're showing infuriates me.
I'm making my way through college CS, but there's many of us who really need to meet the foundations of the Maslow Hierarchy. The speaker sounds to me to don't dare go into this field unless you truly love the subject as he does.
I see this as a shaming tactic. Many people are trying to get into a decent field and live.
If the argument is: you know, you're still at a beginner or intermediate level. Getting as foundational an understanding as possible will make you more valuable. I can see that.
These people, I deal with these people at campus all the time, f-ing insufferable.
Not saying people shouldn't know everything foundationally, it's that a lot of people want to live better at first.
Funniest thing is that Jblow has spent 20 million USD so far on developing his upcoming sokoban puzzle game. Could have probably been made using Unity/Unreal for 1/4 of the cost.
He's not just developing a sokoban game. He's making his own programming language and game engine, the game is just a testbed to prove that the language works for large projects.
@@Ryan-hl1btNeither of which anyone besides him will ever use seriously. Previous commenter is right to snicker.
ruclips.net/video/llK5tk0jiN8/видео.html
well it's not gonna change unless we stop hiring developers over a piece of paper that says they know how to do math and over knowing legacy languages like java.
How else are you going to hire people?
It’s funny because as somebody from a non traditional background, the “why” behind programming has always been my favorite . I hate just using tools without exploring how they work it feels like I’m guessing lol
Can you blame the developers tho, majority of them do this as a job and as you said me knowing how to code a http server from scratch won't really help me when I just want to create a api for my service, pair that with the increasing demands of companies and we get people with a bunch of frameworks in their resumes and no knowledge of how or why that framework was created. Also the knowledge of why the framework was developed can't really be obtained while developing personal projects but I agree you should deep dive enough to make sense what you are doing.
very true, have seen this in most all companies i have worked in, developers are just surviving from stand up to stand up by saying a bunch of BS to justify why their ticket is not done, recent i have heard: "css is just not playing nice", "3rd party lib does not support this", etc - POs and scrum master have no other option but to trust them. Now if you can code, but you are a not talker and just do your stories on time , give a one min update, that makes you not as noticeable and as if you are not working on such 'hard' features as the above ones - when i am interviewing , i am trying to sift through those 'talkers' who cannot solve an easy leetcode problem - sad.
I feel this way. I never went out of my way to be a front end dev, but just kind of fell into React as part of my job. However, I think that maybe I make up for the lack of deep DOM knowledge via my EE background and literally writing ASM and C?
Hot takes
1.) Before people boast their deep knowledge. They should know the difference between algorithms and techniques.
2.) Any shallow knowledge becomes deep. If you deep dive into it. See that person who use web API? If the same person makes your web fast or not resource intensive.
That's deep knowledge.
It's a job. We're all trying to make money to live the life. If you want real knowledge then stop asking stupid questions.
Everyone wants amazing engineers; but nobody wants to mentor them. Companies are doing their best not to pay them. Startup founders are desperate to "no-code" their way around them.
As a senior having to PR review work from Jr's that are copy pasting ChatGPT code by trial and error. Ending up with 5 different functions that does the same but neither does it correctly and on top of that when they are on their 5th iteration they don't even remember why they added the first 2.
This is soooo true. Please don't blindly copy paste nor use AI to bridge massive knowledge gaps. You will end up shooting your -foot- legs off
For the most part, people who use javascript are not programmers.
I share this opinion with Jonathan Blow.
People who write javascript as so far away from actual programming that it almost has nothing to do
with programming.
Use Zig, Rust, Jai and other programming languages and see the difference.
Ooooh boy is he wrong about civil engineering! First of all very little changes in materials and constructions -- the all reuse age old construction methods.
And when they do something new, they have the time to actually created modes, and test their calculations than upscale to a bigger model and solve issues and only then do they build and even then freaky shit happens. Take the Millenium Bridge in London, the Zwanenbrug in Rotterdam, arguably the Twin Tower and Building 7 that collapsed which no building is supposed to do from fire and debris. I have seen planes that have had serious design flaws where doors blew off (recently even), engines dropped off (Amsterdam 1991), Tanks that killed their own gunner because of moisture in a barrel. Wherever people engineer something new things go wrong, thats a fact of life. Even the space shuttle had serious design flaws two catastrophic failures.
And him doing merely game development, is not someone who actually does develop systems that have any real impact. Games are generally relatively simple because they all have a few components, input, logic, rendering. The speed at which things need to be done is sometimes challenging but nowhere near as complex as for example automated order pick robots in a chaotic storage or flight control systems
Nail on the head. blow is a clown. He's a megalomaniac who wrote a couple of crappy indie games and acts like he's John Carmack.
There's something uniquely embarrassing about these (always male) ego driven nerds who honestly think that sitting in front of a keyboard and typing makes them action heroes. They're laughable.
I, a beginner, am literally looking for teachers online to explain the main concept. They are just drowned in the flood of tutorials
I'm not buying an argument that construction engineers are better - check how many bridges collapsed due to engineering errors. People make mistakes in every field. People excel in every field.
There are much more bugs and shit code and terrible websites and other garbage than there are construction failures.... And most construction failures don't come from engineering failures. They come from technician and construction failures.
@@mirakekkle9476but there's thousands of apps made by amateurs every week while physical construction projects are opened and then just sit there barely making progress for years with hundreds of inspections until it's eventually finished. You can't compare that like this.
What .. there are really developers who use React without knowing JS?
the moment i started learning a programming language & trying to make something complex, i just come back again to memory, database Queries, Data structures / Algorithms ... that part alone i made a plan for studying it for 2 Years 🤷♂🤷♂
More books should be written on this so that we all can learn the mechanism beyond the abstractions
I too agree with most of the other folk here, the main reason is the companies just pushing the limits of devs by forcing them to learn 100s of things right from the beginning, I remember many people told me in the first couple years I won't be given much work in better techs rather I will get familiarized with things, if I join any start up from day 0 itself I will be given lots of responsibility, and this only helps in increasing the sweet numbers in your salary, till some point but sad reality is after certain age you end up getting staggerd on knowledge as you cultivated a habit of learning on demand or just completing on demand not learning deep or worst not learning at all.
I don't know how someone junior can achieve this, as you will have not just pressure from office to learn but also from society on your salary, evevn though you are doing great you will be treated as a waste, and that does matter not always but still, it's real life not movie...
It's easier to say, oh you don't have enough knowledge, but try to understand the choices he had?
part of the problem with newbies getting into open source is that RUclipsrs are suggesting they do. I am a noob and i watched a video were this guy thought that the best way to learn was contributing to an open source project. I thought it was stupid but i am sure that at least some people have taken it to heart.
I think that this is due to the complexity of the software production world.
In order to be productive nowadays and be paid to resolve some kind of problem for some company/client you rely 90% of the time on web or similar development, where most of the complexity have been abstracted away, you don't have to reinvent the wheel.
In the past where everything was more low level you had to deep dive and so to grasp the complexity of the algorithms and data structures, so by now the only way you have to deep dive into the fundamentals of programming is either working on niches of software development (like low level/embedded/os) or work on specific features of products, where performance and reliability is a necessity. But that's the very small part of the programming world, otherwise you have to go by yourself with side projects, where always I find myself not having the drive to do something useful, because it seems always to be a "dumb" useless software project
> complexity have been abstracted away
The abstractions have often added more unnecessary complexity.
As a senior comp sci student, I think understanding low level and systems concepts, as well as the mathematical background is extremely important to creating quality software
This is why great ML people come from physics and math. They weren't chasing the money.
I suck at Python, but whenever i see an actual good Python dev its always like using some libraries i never even heard of.
So in order for a dev to be good he needs to just grind and memorise stuff like that? Thats unreal, i feel like the age of that is over, and its about learning how to find things instead of memorising it
Well that's true, really smart people built foundation and others build on top of that foundation
Also it’s interesting how this guys take is that one of the instances of deep knowledge that’s missing is time complexity lol. That’s the one thing we don’t need to worry about for junior engineers fresh off dsa prep
@marcelofernandes6501I never said it wasn’t. I’m saying it’s something that almost all new grads know so it was a poor pick of an example of deep understanding that’s lacking across junior devs
*Counterpoint:* Don't learn more than you need.
If you don't use it every day you'll forget it.
If you do use it every day it will become obsolete in 5 years anyway.
I find it amazing people say deep knowledge isn't important yet their tools that their using wouldn't be possible without it.
The prototypical approach to programming is full of profundity. Web apis are a good example of apis - they unlock data for the developer. WebGL is a another great example of a good system that opens up options safely for the developer. Game Dev related Graphics APIs, however, are notoriously horrendous, to the point where they not only lock the developer out of the fundamentals of the apps they are writing, but even the coding tools are non existent, webgl has actual proper tools for graphics programming, whilst traditional tools for graphics programming sometimes even lack basic syntax highlighting
By profundity, I am naturally referring to the one shot nature of prototypical languages - unlike OOP, they allow single small programs to work without overly specific declarations, and popular web frameworks are always quick to prototype with and relatively lightweight. In other words, the precise reason J Blow sees not the profundity, is because he underestimates the nuance and meaning available in a small piece of JavaScript frontend code
Heres the thing... the part of your brain that solves leet code and comes up with all the crazy algorithms is veery different from the one that designs systems and full stack apps in general.
Ive worked with really smart people who can solve some pretty serious algorithmic problems but somewhat have an issue with putting together a fullstack app.
So verdict? Well... never stop learning. You need leetcode for the interviews (and to design efficient algorithms), but you also need to know the systems and technologies involved to making an software work. THAT is what deep knowledge is about. Always start from the bottom.
And this is coming from someone who started with React without knowing js well😅 (but i had to later learn about it).
Also, if you're in this because of the money alone then you're screwed😂... I'm sorry
Instead of copy and pasting, I re-right the code several times over until I memorize it, even though I copied it so that I understand it thoroughly. Especially your neet code questions.
About the dom in JS there is know and know. I though I knew about pure JS in the dom before as a React Developer but I was wrong. I had to work in a legacy project for 6 months last year. JS & Jquery without any modern SPA framework and let me tell you why developers dont know about pure JS in the DOM: Its so shit compared to react (or angular and vue) that it is highly unlikely that is in any project that is still running. I found myself in this situation not because I was working on a standard web app but on an industrial web front end that is used in manufacturing. JS on its own in the browser is so shit I am glad nobody is using it anymore. You should get hazard pay to work on Jquery or pure js. (Disclaimer: I am talking about somewhat large projects not about small ones)
same here,I work in the manufacturing industry with a legacy codebase. It is such utter shit that I wouldnt dare anyone to even touch pure vanilla js + jquery
I actually like the algorithms and data structures. I’m just not a good software engineer, though
Same. Those who hate it prolly suck at it 😂
You get better with experience. It's very hard to get good at software engineering if you're not already working in a team of engineers + PMs.
@@arjundureja - *good engineers and good PMs.
@@arjundureja fair enough, I was hoping class and personal projects would help.
Software Engineers will never be recognised by law and regulations as “Engineers”. There is no legal recognition in any country at the national/federal level for Software Engineers, in the typical sense that we consider other Engineering disciplines - mechanical, industrial, aero, chemical etc.
There is no truly single 1 practice that Software must follow as these other engineering disciplines have to, because if these other engineering disciplines DONT follow their legal guidelines, the results of their designs WOULD BE CATASTROPHIC.
*You will never meet a civil engineer that designs bridges with the mindset of Software, where the mindset is “If it runs, don’t touch it”*
You cannot possibly design a bridge, a car, an aeroplane, a building or a factory without considering every single possible safety factor involved in the design.
I’m trying to learn to walk before I can run but JavaScript is hard and no jobs are willing to hire if you only know html css and vanilla JavaScript and it takes way too long to fully fundamentally learn JavaScript even tho I do run into a lot of problems I wouldn’t if i fundamentally knew JavaScript fully I wanna put it away until I get a job using react or whatever else places hiring want
I mean honestly, if you don't understand machine language you haven't studied enough. Like for example you wouldn't be able to tell why this:
for(int i = 0; i < n; ++i) {
arr_cpy[i] = arr[i];
}
Is SIGNIFICANTLY slower than this:
for(int i = 0; i < n; i+=5) {
arr_cpy[i] = arr[i];
arr_cpy[i+1] = arr[i+1];
arr_cpy[i+2] = arr[i+2];
arr_cpy[i+3] = arr[i+3];
arr_cpy[i+4] = arr[i+4];
}
And I'm not saying that you should code in machine language just generally understand the machine you're using. And yes for gods sake work on projects and learn algorithms.
Absolutely correct state of affairs in the dev space.
There's a BIG difference between `programming` and `software development` that's akin to `shallow` and `deep`. If you don't know the vast & wide difference, you're in the `programming` domain.
I don't know much in coding ... still got a job in a mnc with decent salary
I dont know what to do now ... Just learning day and night is the option
how do i know if i am too shallow and superficial?
I had a senior dev once tell a beginner to just go learn a CSS framework when that junior dev had no knowledge of what CSS is. I was like that’s just the worst advice you could give a beginner.
Boomers dev is talking in the video. There waw very very limited technology/path to do something in the past. So it is easy to cover fundamentals. Today’s engineers must handle bunch of technologies at the same time like a circus performer. I don’t care how webpack works internally, my story must be closed in two days, and if I don’t how to configure webpack, I can not close it. This is end of the story.