@@edwardmitchell6581 cannot be the first step, its somewhere in the middle, how do you even find patterns if all you have worked with is python or html
Basically all the variation of SQL commands in different SQL platforms, they may be worded differently but the principle behind each concept is still the same
I think he has a course on his website. Now I'm more tempted in actually buying lifetime access, since I want to get stronger in this and DSA. If anyones does have any videos out there drop the links, much appreciated.
@@natescode "seeing patterns" as he explains it is one thing. OOP design patterns are whole another valley. Just saying. Don't confuse the two things. OOP design patterns are just "some patterns" and definitely NOT the most important ones.
I agree 101%. I for the past two years have been trying to learn multiple languages C, C++, C#, JAVA, Javascript, HTML,CSS,Javascript, React, Angular, Vue, React Native, Flutter etc.... But what i found out is that i have just wasted my time trying to memorize the syntax. Syntax doesn't matter that much (of course it does but ....). Jumping from this lang to that lang did nothing but waste my time. I don't even the basic fundamentals building blocks of programming in general and I went to sticking syntax in my mind. You are a genius bro...!
This was a moment of epiphany for me as well, and I can't point to exactly when I started thinking this way. However, in much the same way, there was a time when everything "clicked" yet again, and I began thinking about technologies which were better suited to the patterns I wanted to implement. This helped not only in tech selection, but in allowing me to more deeply understand the tech stack I was often stuck with for a given project, and work around those limitations. It's a continuous cycle of learning :)
love these types of videos! im a noob and have tried to make it a point to always prioritize patterns and fundamentals, the things I can take anywhere. Sometimes I'm a bit confused because I get lazy and wish there was some master list lol.
Fantastic video. A key milestone of developmemt in any discipline is gaining enough fundamental knowledge that you can zoom out and consider the entirety of the problem, rather than being stuck at ground level in the implementation details.
Finally someone can make what I observe into coherent words. I got this particular eyes open when I was forced to learn backend due to business circumstances and switch language and platform from Kotlin to Go. It opens my eyes because recognizing pattern is my only handholding when doing the switch. But now? Yeha I'm flying. I even have personal codebase that compiles into 1 portable binary but have 4 different language in it and use incredibly esoteric stack. But it still boils down to just MVC.
Yep, with backend frameworks, they're all pretty similar: The app listens for requests, dispatches them to the appropriate request handler, runs some tasks for that request, then sends back a response. You might have additional services that need to be handled before or after the request is dispatched, so depending on your language and programming paradigm, this is handled either with middleware functions or dependency injection in OOP. That, and knowing the HTTP spec is pretty much all you need to know at a high level. Maybe you might need to learn concurrency using coroutines, threading, spawning processes for high performance tasks but there's not a lot to know at that level.
This is why I push back on the "What's your stack?" question. It's fine if you're asking where your primary dev experience is, but it loses meaning as you gain experience.
What your calling patterns which is so generic, you could call it similar concepts, Iike Features, Capabilities, etc. 👏 Similar concepts exist in many Technologies. Organize them into Tables, Trees, Mind Maps, etc. 💡 Data is beautiful. I like to gather and organize information as I learn 👍 Graph Knowledge Bases seem like the best way to make sense of it all, it gets so complicated. Nodes represents Named Entities (Languages, Databases, Paradigms, Features, etc) Edges (lines between the Notes) represent relationships. Ex: [Python]------>> has paradigm >>-----[OOP-Object oriented programming, Functional Programming, etc ] ❤
2:15 Even when you take away patterns from a language (programming or otherwise), you have a feeling that eventually can be expressed in a combination of other features used in a specific order. That's 1984 (and learning about software engineering) in a nutshell.
Yeah it's cringe when people say they know 5 programming languages as if that's like learning a real language. Programming languages are just tools we use. Engineering is more about general problem solving. Writing code is the easy part. It's also why I say AI isn't a threat; it's just going to improve/speed up the writing code part.
@@h0ph1p13Yes, I have 2 year experience in Python /Javascript. Now I am Learning Golang... I found it's pretty easy to switch once you know the patterns.
This was a banger! ngl, I was worried it's gonna be another "1" + 2 video, but it really was great! You should do more design patterns, software architecture, system design videos, this video was gold and you explained things really well.
Same goes for any programming language, when you undesrstand the problem pattern and you already know how to solve it, the rest is translating your thoughts to the progtamming language
I think this explains what I've been experiencing recently. I'll learn something new and be like "wait but isn't that just like x, but a little different" and its because of this exact scenario where patterns are repeating in different, but similar ways. Thanks for this video!
One similar pattern that has helped me level up is declarative vs imperative programming. Declarative programming paradigms like SQL, CSS, HTML makes writing and reading code so much easier OR the reason why React has superior DX compared to other frameworks. Similarly, IOC or Inversion of Control principle. It took my so much time to realize why it is so fundamental and important. It has helped me design better APIs when I'm authoring a library.
Great video brother! Concise, informatuve & clear guidelines to becoming a software engineer. I look for ward someday to a fantastic conversation with you. Have a good one, cheers!
2:45 personally, i too can look at C code and immediately see what they are trying to achieve. I feel like it kind of enabled me to program a whole lot faster, since i can just write C code like im speaking my ideas, instead of trying to figure out why i doesnt compile or whatever.
need more videos like this, I mean you could have kept going, but honestly my fundamental understanding of this stuff..... supper shaky!!!!, This helped a lot, Thanks bro
This is so true brother. Understanding these concepts has made me almost “language agnostic” in my career. Yes I have preferences. But if u locked me in a room, and said I could not leave until I finish an app in a programming language I’ve never written in, I would eventually make it out.
It introduces new concepts that's why Someone who know haskell finds rust easier or vice versa, coz there's some similarities and functional patterns in these languages
@@ajml_hnter I’ve been working almost solely with Rust for about 2 years now and most hurdles didn’t come from functional patterns but from the ownership model. You can’t really not understand it in depth to work with the language. Maybe that’s just my experience and what I’ve work with before.
@@cryptonative Yeah it's a pretty different model than other languages, most languages are garbage collected and rust brings a new way to think about things, there's a lot of other things that really different in rust. I think future programming languages will adopt the good concepts in rust and it will turn in to more of a pattern
Loved this video as a cs undergrad 😊! Thanks @NeetCode. Can you possible list the themes you're mentioning in this video as I'd like to dig deeper and learn these patterns myself in my personal time please?
Yes, this is usually the first thing a programming lecturer informs you about - that as you learn different languages you will eventually reach the conclusion that patterns do exist and thereby upon this realization you will find that learning other languages do get easier and faster. It is also noteworthy to mention that there are many books regarding design patterns whereby the concepts of the general patterns you mentioned actually borrow from system design patterns (e.g. Observer pattern in OOP, pub-sub 'publisher-subscriber' pattern in distributed systems). It is for this reason that different programming languages fundamentally share these 'common' patterns simply because these patterns are in fact well documented (and in great detail). Happy learning everyone!
Great premise and video!!! Although one thing needs to be corrected - you can set up schema on each collection in MongoDB (using jsonschema format) and it will automatically perform types validation. It will be much faster than validation on application side but there a possible downside - possible unnecessary roundtrips to db.
I see 2 patterns: 0 and 1 the thing that generally annoys me about people obsessing over strong vs dynamic types, is that at the end of the day, all that's being stored is 0s and 1s. The physical hard drive doesn't care about data types. While you can use prefixes to represent a data type in the hard drive, and it is helpful when programing to know what kind of data you are dealing with, it's still just being stored as 0s and 1s. It's also being sent over the internet as 0s and 1s. at the end of the day, the client using the website doesn't care whether I used javascript, python, or c++, as long as the content loads fast enough from their perspective and looks good. This is also why I'm starting to spend more time with learning front-end development, because that's what the user will actually see and care about. That and AI will probably have the advantage on taking back-end jobs, compared to front-end jobs where creative design has an advantage.
In the MBTI this is intuitive vs sensing. Intuitive personalities zero in on patterns. Sensing personalities absorb and analyze details. The clash between the two can be frustrating. When I see the pattern, I don't want to go over every last detail. That's how I learned over 30 programming languages. I stopped worrying about the details and now I can make usable software in so many different technologies. Sure, a code review may have 1000 nitpicks (if it's something I'm less experienced with), but the end user is never going to care about those.
It's no coincidence. Strong, static typing means things have to be well defined when the program compiles - it is quite literally a barrier to many silly mistakes that human brains are prone to make. I write most of my code in C# or SQL for work, but occasionally I have to use Python. And much as I love its simplicity for a quick script, building anything large or complex in it is poison to me. So many silly bugs that you have no chance of spotting without a lot of tedious testing. Strongly Typed for life. :D
I dare you to make a video on one of the consensus algorithms 😅 For example, Paxos or Raft :) Then consistent hashing. Distributed transactions, 2-way, 3-way commits, saga pattern. Jitterred retry to avoid thundering herd problems. Rate limiting using token buckets. Short circuiting. ...
This is exacly what I wanted, I been doing projects with angular node and mongo, but I wanted to learn more because when I tried to learn React I felt like I was missing something , felt like the need to ask why are they doing it certain way and not the other way well I guess it has to do with patters, is there a book that teaches you this stuff? Someone knows?😄
@@NeetCodeIO o my god you replied. I am just binge watching all your videos. Bought the neetcode pro today as well. This is like one stop shop for all you need and you don’t have to look anywhere else. Currently streaming tcp/udp system design course in my bed time. Haha! I really appreciate the good work you are doing. Thank you!
I’d say it’s still good to know the oddities of each language you use and also learn how to write the code according to the conventions. Don’t write Go as if it was Typescript and vice versa.
Your video is not long enough. Talk more about these patterns please. This literally opened my mind on what programming language should I use for a specific project and WHY I should use it. Also this video can be a "great divider" - to divide people into two categories: A Junior Software Developer/Networker/Engineer and a Senior Software Developer/Networker/Engineer.
i'm a fresher data analyst and just know SQL and Python. I solve coding problems by imagination and don't know if this method is seen as "pattern" that he said. I really want to understand what's exactly "pattern" but cannot get what he said since i have no idea of other programming languages.
This was a great video. Thank you so much for that. I'm a junior developer and struggling to just keep learning new languages, but after watching this, I think I should focus on learning about patterns instead of new languages. Where can I find material about this? Can you help me?
This is the best advise someone could give you relating web dev and also the most difficult one to achieve. Just let experience work for you: be patient and have this main idea always in mind and keep going. You won't get a third eye though :p
this is what I've been telling people for years. the more time you put into familiarizing yourself with software development, the more you identify first principles, the more you start to think in those primitives and variations thereof rather than higher level contexts like specific language details. at some point, you stop seeing code, and you start thinking in abstract units of computation, the patterns you speak of. it's like with language you start with coarse words and then learn to break them down to letters, and then you start to learn to process them as lexemes, morphemes, phonemes, and other grammatical units (even if only subconsciously). but that's the point of gaining understanding of a thing. you don't have to muck about in the inefficient and artificial high level idioms and "human friendly representations" and instead offload those to the subconscious so you can focus on the things you're actually trying to work on. programs are just machines after all. oh and proofs, a la the good ol' Curry-Howard Isomorphism. but the point of these structures is that they are continuously divisible down to their primitives, and at the end of the day all they are is just a whole bunch of those primitives stacked on each other in specific configurations (or shapes if you will) which interlink into even more specialized configurations until all interlinking is exhausted and what you have left is your beautiful piece of algorithmic machination yeah patterns are pretty lit. groups of primitives. the only thing I'd add is that it's really important that you have an exhaustive comprehension of those primitives, or at least as thorough as you can possibly manage. Just never let yourself believe that you've finally figured out everything there is to know about anything, and you'll never stop running out of things to know 😊
JavaScript, it is not a bug, it is a feature you have to know, then you can work with it. Knowing quirks of the language is the most important to prevent unexpected results