The layers in software are insane. As a devops engineer, the software developer writes code that lives in a docker container -> in a docker network -> in a k8s pod -> in a k8s cluster -> on a k8s node -> on an aws ec2 machine -> on a hypervisor -> on an actual machine. This doesn't even touch the software that manages all of this infrastructure (AWS, github actions, argocd), nor the building/compilation step (even high level python apps are dependency nightmares), nor the underlying operating systems, nor the internet layers that connect everything, nor the browser that will run the html their front end spits out. I occasionally wonder what this is all for; why doesn't the software just run on a standardized chip? (Insert 30 million line problem by Molly Rocket) God help anyone trying to learn in 2023.
If you're just starting out you don't need to worry about all this complexity happening on production servers though. You just need to get something working locally that you can iterate on. On this front the tools and concepts are easier to learn than they were 10/15 years ago (improved designs, better docs, more stackoverflow posts). Honestly, I think learning the basics is easier than ever, even if the path to becoming an expert is a bit more difficult. To the question of "what is all this for?": Would you rather try to manage multiple services, databases, and queues manually across multiple hosts, or just use a good abstraction like k8s that does this stuff for you? The value of the added complexity seems pretty obvious.
@@SR-ti6jj I see how ever individual part solves a lower level problem, but each layer comes with its own problems that require ever more abstractions. But how far is this expected to go? Is devops going to split again into dev-devops and devops-ops? A system where you specify a SOC design and replication number and ingress rules would replace most of these layers (mainly by abandoning the von neumann machine architecture) for cloud services. We would have the simplicity of lambda and the cost of reserved ec2 machines. Furthermore this would be easier to teach and learn to new devs; you write, compile, and push and test. Although now that I type this out, I guess there would be an ever increasing amount of tooling on that as well.
@@roaringfork "how far is this expected to go?" As far as the abstractions continue provide value to developers. I'm not following what SOC has to do with distributed systems and how we manage them
As a C++ software engineer I feel blessed to be able to still work on a "low-level" abstraction and understand everything that is going on under the hood because debugging is "easy" (yeah sometimes it's a pain like for everything but in general you'll always find quickly what's going on). Black boxes create more problems than they solve, because you'll be able to develop quickly but you'd better cross your fingers nothing really bad will happen because then you're off for a nasty ride. Lower level takes time but at least, when you do it right, it's solid.
All my most enjoyable coding projects have been in c. Going too high level makes it feel like I'm just entering commands into someone elses software - it doesn't feel like I'm actually programming anything. Update: Was speaking with a developer who works on microcontrollers the other night. When I told him this, that I prefer coding in c, he said "That sounds quite disingenuous"... It turns out some programmers find it hard to believe that people like us even exist, people who prefer to think in the low level...
I'm a software engineering student and I'm trying to find the right company to do my graduation project, and I'd really like to use C/C++. Unfortunately, so far ever single company I've approached only has some kind of Web-based, .NET, python, java, whatever you can imagine bs that I do not want to deal with. It's frustrating. I'm starting to lean more towards Embedded now, not because I'm really into hardware but because that seems like the one subsector that still does programming with actual compiled languages.
@@saniancreations Kind of the oppossite for me, I got a job where I was supposed to write C# .NET mostly because that was what I learned at school (and in my free time) and then after a few months I got asked if I wanted to try working on some C++ code. I did it and now I prefer C++ over .NET. lol tbf tho legacy C++ is often kinda ugly and annoying. But once you know a fair amount about the low-level stuff it's a blessing to have some of the abstraction of modern C++ and still have the ability to go with the (powerful) basics if you really need/want to. Such an underrated language.
Turns out you can't make apps for tens of millions of concurrent users without the kind of flexibility that also brings black boxes. Your low level programs aren't better to work with, they're just different altogether. What we're seeing happen is forced specialization. And people just don't wanna accept that.
I'm at a place at my job currently where i have to explain allot of the basics to many of our new hires. What i see is that most of the people wanting to get into development don't want to put in the time to learn and understand the basics because they find it boring. As much as i like teaching people. I find it frustrating when a person doesn't put in their own time to research a subject on their own time.
Exactly! I had a guy join who finished his master's and didn't understand what a gateway and router actually are and I had to show him the basics of DevTools in browsers.
I teach programming. I know the struggle. A lot of my students zone out on the basics, and when we get to the more complex stuff their knowledge gaps are already too wide to understand the new material properly.
@@Pavel-wj7gy the opposite, you're more likely to be hired. A good 80% of the candidates I interviewed last year had horrible foundations. Some didn't even know strings are actually just an array/list of characters. The foundation is important, it gives you a good intuition of what's wrong when problems occur and it also speeds up your learning of new tech/paradigms.
The biggest reason why this is happening is because (from a new learner) is that Agile has become so pervasive that we don’t have time to actually learn the basics. Everything in corporate is “how fast can you make it” or MVP minimal viable product. Which then seeps into the juniors and beginners who are taught horrible practices and then documentation on library’s frameworks and software is at best mediocre. Now I will say, where we are today is better than where we were a long time ago but with the every break through technology(like docker and AI assistance) the the time honing a skill is shaved and shifted to getting products shipped. The amount of things I see on job postings for just Junior Developers is crazy and it has now gotten to a point where junior positions are non-existent or going extinct, entry level is now 5 years experience and mid level is 5-8 years because no one wants to really address the elephant in the room.
Agile is good in the sense that it is anti dogmatic and thus has the POTENTIAL to move most optimally in an ever changing landscape. Potential is the important word lol.
Yea the projects are being fundamentally mismanaged and they think they can fix it by throwing more years required and coding languages onto the job postings lol
The one junior dev interview I got, during the interview process, implicitly stated that whoever gets hired must be able to do the whole job on day 1. Made me wonder what they thought 'junior' means. Like heck, you can't even allow a day or two for adjustment?
Prime always makes me feel better for taking the college route. We don't learn current tech stacks except in a few 400 level electives. It's all fundamentals and foundation building everyday
The problem is that everyone is effectively "forced" to learn all the latest tools and abstractions, and those tools and abstractions are ceaseless -- they just keep coming. There's a new service or library or way of doing things every few months. And with so many choices, especially for a new developer, you become paralyzed with indecision. We're no longer learning things at a fundamental level. We're learning tools -- lots and lots of tools, each with their own unique idiosyncrasies and ways of doing things. And now with AI coming onto the scene, things will change dramatically yet again. Soon we'll need to learn the most effective "prompts" with the best "copilot" AI programming tool, because that will be the fastest and most productive way to code, which will be essential to staying competitive. 😩
I resonate with this deeply,you found a solution for this? I'm getting sick of always learning new tools that don't add anything to my fundamental knowledge just to keep up with the rest of the crowd...ughhh
Yea this is pretty true. Employers be complaining that new hires dont know the basics, and thats largely because the basics are being handled by a ceaseless torrent of micro services. Knowing the idiosyncrasies of these micro services is both taught and desired more than the basics nowadays, because people arent coding things from scratch anymore, they are simply enabling an amalgam platform which otherwise is designed to be more and more automated by the day.
Which is why in our team, we stick with the basics, and our software gains more longevity, because we reduce as many platform dependencies as possible.
@@vickmackey24 Native with basic OOP frameworks. Keep things simple, so you can gain access to all the elements of the device. On web, Just use .Net Core, and relational dbs. Picking tech and frameworks that have been around for decades, and are still in use, will usually increase longevity. So long as they have been maintained, and have modern tool sets that can assist in debugging and testing faster.
I'm a frontdev who pretty much learnt javascript through using react. I can tell you, it's hell. I go to work every day building systems, then come home and spend my free time to learn everything there is to computers with 4 kids and a wife, so time isn't my biggest resource. I feel so often like "i know syntax, but why is this happening?". Without foundation I can also tell you that searching bugs is a sad story in itself. Like, everything is done for me and I don't know why and that turns into a lot of pit falls. I see my friends, both private and at work, who actually went to school to learn this. They just see everything with such different eyes. I will get there as I I'm really interested in the subject, but to think that there are people on the same road as me without that passion that just want to lift the paycheck in the end of the month. I can't even fathom what hell they're in.
@Kuromika Yeah but that's the road the "teachers" pretty much lay out when you're learning by yourself. You get some syntax basics in HTML, CSS and JS, then it's moving forward to learn libraries instead of going through the basics of what's going on in V8 everything else around it. It's all about deviating from the course plan if you actually want to learn about that stuff, and that's not what everyone is doing by the looks of it. That's why I'm taking all the time I can to learn about computers, compilers, engines, different languages, servers and databases. I'm just a frontdev, but there is so much more to know that I can't stop myself to keep my knowledge to grow.
Best course on JavaScript, that I was lucky enough to go through went I started was “JavaScript the weird parts” it was amazingly in-depth on JavaScript and how it’s working under the hood. Would be perfect to go through now you already have some experience.
@@TheCiderFish I totally agree and know exactly how you feel, that's why I too have a habit of continuously rederiving stuff and going up and down the abstractions from the turing level to the no code GUI tools. Its hard to grasp the truth about tradeoffs and abstractions. Sometimes most layers seem like a bottleneck but sometimes they could be near perfect optimized, some abstractions are designed poorly and then require more layers to solve them. What helped me to get a better understanding is some excellent resources like SICP, Andy pavlo's DB, tech blogs on modern SWE, great youtube channels etc etc. What I've seen is real world SWE is riddled with tech debt, low context hacks as features and project timelines dictated by non tech business folks.
I would suggest making a toy REST API with python and fast api. The *fundamentals* are just loops, if, procedures/objects and classes, the python syntax is really like textbooks pseudocode. I bet that if you already know js you will find it really pleasant and insightful.
@@juansalvadordomandl5287 I'm on my way. Not with Python, but trying to build a database and query data with a server with a rest API. But computers are so much more than just the web. My goal right now is to buy a raspberrypi and try and set up my own server and deploy a site. But after that I want to go into Rust, C or C++ to learn about memory management and everything else that is computers. End goal might be to build my own OS, but that's most definitely many years away.
Coming as a senior in undergrad about to graduate with a bs in csc, my curriculum has been almost entirely “the basics” and basically zero “real world” practical applications. It is very interesting hearing this, because I (and my fellow peers here) feel overwhelmed and left behind almost by the lack of practical knowledge we have. Every (entry-level) developer job out there seems to only ask questions about all of these crazy real world applications that I don’t even understand what they do (Docker? I don’t even know her). Cool hearing the opposite side about the basics, but I do fear it will be hard for me to make it in the real world with such little practical knowledge I have attained here with the basics.
Same feeling. and the problem (i guess) is that the jump from the basics to the practical tools feels abrupt and hard especially when we do it on our own as we r trying to uderstnad how these complex tools are built ( which is fairly impossible given the level of abstraction and the complexity of teams that worked on them). What I am trying to do is combining both and being easy on myself. I try to work my way down sometimes ; I learn the tools and dive deep into the logic and building blocks of it as I work with them because realistically thats what I m gonna need and use.
Abstraction of everything doesn't help us too. It doesn't matter as much that we know data structures and algorithms when we can't practically read all of this 1000000 lines of abstraction code.
Same. About to graduate. Learning the theory is great but it's hard to feel like it when jr level jobs want years of experience to even get an interview.
@@IamFrancoisDillinger As someone whose been searching for a job for a while now, it really seems to me like '3 years of experience' is covered by 3 years of studying. I don't think they often actually expect anyone with 3 years of professional experience to apply for a junior role.
I recently finished studying college all that fundamentals, DSA, low level stuff, and feel completely clueless coming into a world full of k8s, docker, highly distributed big data blah blah blah. It's very hard.
I'll be finishing college this spring. Currently neck deep in functional programming with Racket and going through lambda calculus. I feel like I'm average and should be able to find a job but then look at junior positions wanting 5+ years of React experience and I'm lost. College is all theory and every job wants years of experience I don't have.
@@IamFrancoisDillinger Idk if you are in a country that it is reasonable to pay for another year of uni, but, if you are, pay for it, just to go for the internship offers given to the students. Usually, their easier to do than going applying directly as a graduate. I Am doing this right now, and, Ive got some offers to decide till summer. The good news is if they saw a good addition to the team, they would offer a job on the spot or thats what happened to a lot of my colleagues.
Love that you made this video, I am 6 months in my programming journey. Did a bootcamp and got a job. In my job I have to know Angular, typescript, ruby and rails, Docker , Git, command line, rspec etc I am just 6months in on this stuff but I feel everybody expects me to know everything. It is like I am juggling a million things and I can’t do any of them right. It s not like I don’t put the hours, it is just to damn much.
I’ve been watching the lines get blurred more and more as to what software engineers are responsible for; I think partly from the “you build it, you own/run it” model, which kinda translates into “just have them learn everything” in leaderships eyes. I’ve had friends reach out to me about breaking into the software engineering space… asking for direction.. and it just keeps getting harder to not overwhelm them. :/
I’m just coming back to programming after years of not using much of it. It’s wild how detached yet powerful the software world of today is. I learned some 15 years ago in school and learned basically electrons up. What is a transistor, flip-flop, building blocks of a cpu, assembly, writing Battleship for two humans or human vs computer ai in assembly, then c. JavaScript was there but this was now 2006/7 JS. I hated it at the time because it felt like ages to get anywhere real. Now it’s like whoa whoa whoa im getting real too quickly and making bad engineering decisions because I don’t understand all the underlying choices of the systems I implement.
Its funny cus nowadays, I consider that real, and soydev shit fake. I got so tired of the soydev bullshit, that I just made my own breadboard computer out of TTL chips, and made my own ISA and compiler to go with it. Its actually kinda sad, just how user friendly assembly really is. But for whatever brainrot reason, were using all this shit over regular old C/C++
I also mentored new hires before, and it's so sad to see that the expectation for them is to be able to jump into web frameworks directly. The hiring process might also be at fault, but I'm also so sad to see one of my students laid off because he can't cope with the expectation. It still leaves a bad taste in my mouth even after a year. I hope he is doing well now.
@@OfoeNelson the company expect them to be able to use frameworks in two weeks lol, so only the outstanding one can catch up. It was startup tho, and it was messed up
I so relate with what you said in this video, and it’s affecting my job search on a very negative way. The worst in my opinion is the infinite learning chain “ you need to know X, and for X to work properly then you need Y” and so on, to the point where I end up forgetting what I learned before.
Imho, even if you are self-taught you should follow a university flow, basic programing in c, DSA and OOP in java or cpp, listen to the some course that is usually called programing languages, listen to an OS course and a DB course. This is usually first two years of university and then go into web dev stuff with the basics html/css/js and then in the end you should look at react. I know this takes a long white to complete, especially if you are doing it by your self but if you manage to do it, it will most certainly make you a better engineer.
@@ninocraft1 Can confirm. CS student. The amount of group projects I've had where my peers don't know how to do something as simple as write guard clauses or break up functions to reduce nesting is insane. I see way too many abstract varnames _(a, b, c),_ code repetition, and unnecessarily complicated boolean expressions. And don't get me started on the"what's git?" students - usually the same ones who refuse to touch a debugger! It seems these days there's way too much emphasis on the theory and high-level structure, and not enough focus on how to actually write good and maintainable self-documenting code. That's probably why I've had teammates think they could claim equal credit on projects where they only did pen-and-paper mockups and documented our scrum workflow - they never even touched an editor during the project! (Yes, they teach scrum at uni now. It's awful.)
@the1necromancer Senior CS student - couldn't agree more. I laughed at the 'what's git?' comment. Just wrapped up a project with a team where one didn't know about it, and the other didn't know how to use it...
I don't know, I think web development feels like it's in a worse spot because theirs fundamentally more that someone feels they need to learn to be competent in the role. The foundational pieces are important but I feel that we place too much emphasis on that building block at times to the point that traditionalist have made the barrier of entry significantly harder to be able to get into then it has been in the past. When I talk with juniors/interns at my place of work, I often find that they feel they need to know everything when they first start out, which I immediately will tell them that they need to focus on getting good with one set of tools to build out their foundation before trying to explore out other stacks, as it's easier to learn things when you have a bridge that you can relate it too from your foundation. I generally think it's a good thing that the game has changed where the traditional route isn't the only route that people need to take to learn software development to land themselves in a position, however as related to this video, the decisions to deliver features as fast as possible that allow us to be able to ship software more than we've ever had in the past has allowed for developers to be able to skip out on solving harder issues in exchange for fixing the issues after they're in production.
I am currently an engineering student and I feel like it was the best decision to learn everything first in C , I learnt data structures & algo in C and Python concurrently and once done in C , everything is crystal clear and super easy to do anywhere.
Could you please share as to what's special about C? I'm coming from a background of dealing with js, ts, react, nodejs and a bit of other backend stuff. What's different about c that would be fundamentally valuable to learn?
@@gedas7058 C is the language that all operating systems are built on, as it's one of the closest languages to machine hardware. Systems developers swear by it because it allows for manual memory management to optimize performance. The drawback is that it takes significantly longer to develop programs in C because it doesn't abstract away the headaches that higher-level languages like Python and Java do.
I started doing WebDev 8 month ago with React but you inspired me to learn and understand basic data structures stacks heaps neovim and now i am trying to compile rust in web assembly But I am still writing react to get first job tho
I did nothing backwards. Learned js building full stack react + express app with vscode. Then started to use Vim for vscode extension. Also i already had little coding experience so i didn't struggle on for loops etc.
The feeling is GAAAAAHHHHHHHHHHHHHHHH for us college students right now, we're learning data structures, algorithms, operating systems, computer networks, databases and everything else but it seems so outdated when you know that we can build complete applications on the web and for the desktop by using the abstractions provided to us by all these libraries. They don't teach you how to build applications in college, they don't teach you the tools required for building applications, we've to learn all that after class hours. And there's a lot of us are stuck in leetcode or competitive programming just aiming for a job that'd set us up for the future.
All the classes you've mentioned are required to build an app, they're not outdated. College isn't there to teach you how to build an app, it's to teach you how things work. Once you know how you can create a server and how to design a database, you are then able to build an app. The languages may be "outdated" but the things you learn are language agnostic
@@HelloThere-xs8ss I see. These are all fundamentals that we need to be aware of, yes. But when companies expect us to know quite a lot, it's kind of difficult for us to keep up to date with the fundamentals, changing tools and technologies, not to mention the pressure stemming from leetcode and competitive coding. Is there an effective way of going about all this, aiming for your first job fresh out of college? (From India btw)
I'm really glad I started serious programming in a scientific computing context. I had to work on really low level code, sometimes assembly, sometimes multithreading without abstraction and message passing between compute nodes. I learned a shit ton about how computers work and how to optimizer the hell out of a piece of code, which has proven to be incredibly influential on how I write code.
Im in College rn and thats what im going for. I wanna do something scientific/engineering/math related so badly man. Last thing in life I want to do is deal with autistic and borderline retarded webdev shit working with 50 different autistic frameworks and soydev bloat. Web development has zero actual innovation. The only "innovation" people come up with are just new ways to give you aneursym. Only reason I wanted to become a programmer was just so I can SOLVE PROBLEMS. Im getting an applied maths combined degree and going for anything as far away from webdev shit as possible. Its just art design but bloated and autistic.
This is exactly how I feel. Got a couple of Jr Devs that have under a year of experience join the team. Recently walking them through the CD/CI pipeline using Bamboo to build and deploy onto a ECS and EKS AWS instance. I realized they have no clue what is going on under the hood once buttons are click or automated jobs are triggered. That fundamental knowledge gained in the beginning years, when using SSH to login and install a LAMP stack (or whatever flavor) and SCP files to a server, is lost on the some of the newer Devs. Also, let me start with the fact that I love declarative programming. However, imperative programming gave me the insight of what and how things work. My opinion is that this level of abstraction has led to terms like "It just automagically works". Same with these JS frameworks. We are using Angular as the view, and no one on the floor understands how/when change detection works. Or what TS optional chaining is doing under the hood unknowingly creating code bloat.
Completely agree. Abstractions are great, but we have responsibility to fundamentally understand what's happening beneath the hood. I see devs unable to debug why their DB queries aren't working because they rely on ORMs and never learnt SQL; the answer to your problem is literally shown in the log...
Lol I agree as a jr dev myself. The thing is, I got into programming since I used to play with Arduinos back in elementary. So the only thing I know, is keeping shit simple. Honestly Il be real with you, if I could I wouldv just written half that shit myself. Half the time when you say your "learning" this stuff, your just learning how Amazon decided to do it. Your not learning the objective good way to do something.
This resonates so well, first year of my Computer Science degree I picked up a mobile dev course and the professor started with react native, it was so fucking confusing, layers upon layers, with no explanation just jump in and figure out if doing x makes a thing pops up on your screen. Started learning native android dev with Java on my own and things made way more sense, I actually got to see fundamental programming and oop concepts at work , it wasn't just "you don't need to do all that, its easier now with just a press of a button".
I'm really happy that I started learning fundamentals layer by layer. I'm still learning, and I haven't done react yet, but I'm practicing classes and storing objects in arrays in classes, and using class objects to construct elements in the dom and stuff. I can feel it teaching me how to think like a programmer.
I started in helpdesk, and I have worked in a Soc for about a year for a software company, and although I’m not a developer, I couldn’t agree more. All of the abstraction that cloud and devops brings to the table plus the never ending list of new technologies and frameworks can be overwhelming for someone to start out. I want to make the change to the software engineering side, but have decided to take it slow and start trying to build some of the things myself that are being abstracted away from me as a potential developer. I think doing things that way would make learning the other things much easier.
As someone who learned HTML/CSS in 2005 and PHP/MySQL in 2006, I deeply feel the point you're making here. I hadn't thought of this issue till now, but it makes me very grateful to have gotten into programming and webdev at the time I did because I obtained a much more thorough understanding of the fundamentals, and now working with "modern" tech stacks I understand the inspiration behind a lot of the newer technologies and they're easier to digest and learn. Also that reference back to XAMPP development brought back some nostalgia haha.
I learned PHP, MySQLi, Codeigniter 4, jQuery and AJAX HTTP requests through jQuery inside XAMPP in december. It was my first interaction with back end, it was for a job I ended up declining because of the toxic boss. Configuring apache stuff and codeigniter .htaccess files was.. not fun. Then the project he put me on used Codeigniter 3 and I was expected to adapt literally instantly as if it was the exact same thing. And the code was horrid, with multiple functions for the same thing, for everything. What made me create a Reddit post about it all was when I realized my boss expected me to be able to work within that codebase within the first day. In the Reddit post I talked about everything else that happened and they convinced me to find a different job, which I did.
This is exactly what I've been trying to convey to everyone. I've spent 1 incredibly difficult year learning Android as a new dev. Never touched code before. It is the worst feeling in the world. I cannot convey the pain I've been through. This has been the hardest experience by lightyears and I have my masters in Chemistry from Penn. I thought about jumping out of my window everyday. Thankfully I made it through to the other side, have a few apps, one I'm proud of and will likely be employed soon. A lot of senior devs just say go work on a project and just apply. Yeah fucking right. Pisses me off so much. Its so so so so so so much fucking harder than that. I cant tell you how many 10 hours days were spent staring at a single error trying to fix it that had nothing to even do with coding. It was android studio bullshit. I could talk about this for days but ill leave you with my opinion. Abstraction is cancer. It will look great in the short term and destroy us in the long term.
It is as simple as working on a project. Those senior devs are correct. The difference from your experience is that you went deep from the get-go, you need to start with the basics, at least two months of writing dumb code that has nothing to do with a GUI. Only after understanding the basics should you dive deeper. If I went to swim in the middle of the ocean I'd probably die. But if you ask anyone how to swim, they will just tell you to try it. Swimming in a swimming pool VS swimming in the middle of the Pacific ocean is hella different. You sir tried to swim in waters that you weren't ready for yet. Alas, you probably have learnt all the basics by now, but at what cost?
PS: staring at errors is a pain I have also experienced, when that happens my advice is to leave everything you are doing and take a walk Rid your mind from all the frustration. Try to find a different approach, maybe what you are trying to do is actually dumb and not a great way of doing it. Try breaking down what you want to accomplish into small steps. Complex logic is only necessary for complex problems, 80% of the time you just need simple solutions
Abstraction is great, I started learning to code as a kid with scratch and it taught me the basics of logical reasoning in a fun way before I graduated to a real language.
As someone that hasn't been developing for too long (only 1 year) i agree that the levels of abstraction can be overwhelming at first but it depends on what you want to learn, i started learning C to learn basic data structures, control structures, memory, etc, and after that i started with PHP (by my university choices) so i actually was understanding what i was doing but when i started learning JavaScript and JS Frameworks i definitely felt what you are talking about, i just didn't get what i was doing when i wrote over an abstraction of an abstraction i just knew that it worked, but the problems start when you get a bug and you literally cannot debugged because you don't know what you wrote, you just know that the function that you are using is not working and that is probably the worst part at least for me, and i think this is specially frustrating in JavaScript and interpreted languages because you don't have a compiler to aid you.
Can confirm, I started casually learning in mid-2020 and the amount of complexity that's been introduced into the web dev space since then has been completely insane, and it doesn't help that every course is HTML, CSS, and the bare minimum amount of JS required to jump into React. If I was starting over from scratch I'd do CS50 first to get a better understanding of programming in general.
I started way, way earlier than that, and all the web craze insanity that has taken over the field has driven me out of development, totally. The fact that the industry now consits of a majority of people who don't know the fundamentals of how computers actually work doesn't help it either.
It really does feel like a lot of time is just spent learning configurations right now. Docker CI/CD Kubernetes Aws/Azure/whatever Webpack Eslint Tsconfig Gradle Whatever classes + yaml files that are responsible for the black magic that is SpringBoot configurations. Usually configs that you touch rarely enough to forget how they work.
Hey thanks for the video. I personally struggle a lot with being waaay slower than most people from my university and people online regarding coding, wich can be very bad in jobs where speed is more important. The reason (I think) I am slower is my obsession with wanting to understand the built in tools as much as sensible and code most stuff that could be done with libraries on my own. I don’t think that my way is the superior way, since it obviously has severe downsides, but I really enjoy programming and learning about computer software exactly this way. So thank you for encouraging me to see the upsides of my way of doing things a bit more. 🥰
In the second semester of Uni, we reimplemented a basic String class in C++. I was so excited, and it looked like magic. Then at the end of the semester they told us about the std library. So that was a surprise. Long story short, I've gained a lot by learning the fundamentals and not starting by using out of the box libs. I'm quite surprised when experienced engineers don't know how a String works under the hood.
I remember making my first site back in the good old days of dreamweaver and actionscript. We used to compile those build files locally and sftp them onto the server by hand
Its genuinely autistic how people try to predict how their shit scales up and end up bloating their shitty site with random bullshit that dont even matter. Honestly man I found it way easier to just add on shit and not give af abt making anything more complex than it has to be.
@@honkhonk8009 serverless was originally meant for single functions with high traffic. Building your whole application like that before you know what the scale needs are seems like premature optimization to me
I'm a first year university student and I absolutely agree with this. In high school we also went over XAMPP and MySQL, and even though now I believe I have a good grasp on low level concepts, all the tooling and frameworks being used for production projects - especially web apps really scares me. I'd just like to stay here and focus on simple things rather than serverless blockchain nosql microservices edge computing [other buzzwords].
I'm at 2.5 years now. I learned vanilla everything...including CRA, vanilla webpack deployment. I'm grateful that i have that foundation and can use it at any point but I do feel like I learned sooo much slower than others who instantly hopped onto react. I didn't move on to react until after year of HTML CSS and JS. I was learning Firebase right when it switched to V9 and the lack of resources to understand the changes really hampered my ability to get DB apps working.
I second this. As a developer without IT background, i always feel like an impostor. Thanks to abstractions, i can survive. But this year, i took a career break and start learning Rust from scratch. It’s hard but i think i’ll manage it somehow.
I'm so glad that I've started out with C++ and learned DSA with it. Dealing with pointers and other stuff was educational. Building my own vector(dynamic list), linked lists, hash maps and etc., it was super interesting!
I'm glad I'm learning these basics in college. I am making a website in my spare time with: Django, HTML, vanila js, postgrest and Docker, hosted on a VPS. I choose this stack because as you discripeted, I understand how everything really works. What the database is doing, what the browser does, how everything communicates over the internet, how the internet protocol works. This is the reason why I really wanted to get a formal education. I kinda get the best of both worlds. New devs are not doomed. here in Europe anyway.
I made my first website ever a few months ago for my DJ business using React. Put like 60 hours or more into it going to school full time and working a non-CS job. I’m now so excited to make websites using plain ole HTML and CSS and start back at the basics 😂
Totally agree. I started programming, where all the new fancy stuff was like science fiction. I had the opportunity to "grew up" with technology. The new generation has no idea how stuff works. When an application crashes, they are often helpless, when the reason is not in the code, but in the environment where the application is run.
The bootcamp I went through taught programming from the ground up - not memory management or anything, but "this is how JavaScript works, these are your data structures, this is the event loop, this is garbage collection" and only later moved on to the UI, then to jQuery, then to Angular and finally React (which was brand new at the time). I think that's a good compromise, because new devs don't necessarily need to know what a memory address even is, at least not at first. Of course in some ecosystems (looking at .NET) they can coast by without ever learning anything besides their main language and their IDE, but in the web world it really IS essential to have the foundations first, because you're probably going to have to use React, Vue, Angular, Vite, Webpack, Lodash, Ramda, RX, all these things (same goes for the DevOps world, where it's arguably even worse).
Learning how to write in assembly language on the TRS-80 Color computer (because BASIC was too slow for high-res graphics) laid down a solid foundation that later made learning C, pointers, and data structures pretty easy. IMO, once you know C, you can learn ANY other procedural language.
Back when I started programming, it was labeled as a nerd's activity. Then the average joe found out it was lucrative and everyone wanted to program. Then some brilliant folks started promising to non-nerds that they could become a software developer in just a year and everyone wanted to make the promised 6-figure salaries. And here we are now. Same story for machine learning btw.
Granted I am a nerd, but I did become an effective front end dev in a year. Could've gotten a job already too if I was willing to deal with a toxic boss, but I just said fuck it. Have an interview coming up so no problem.
I went from not knowing what a variable is to having a job in a year at the age of 35. Now I can build any website you wish with a high code quality, no div pollution, small bundle size, high lighthouse score etc (and that is rare, most websites suffer from low quality code). But I got lucky I learned JavaScript extensively first, manipulating DOM Elements with QuerySelector, setting innerHTML, appendChild etc before I moved on to React. Lucky because I just happened to have learned it, I just learned everything I came across.
WHY DO I HAVE TO BE BORN SO LATE. Iv been coding in Arduino and got called a nerd for it ever since elementary. Now its popular?? Same shit with ML. Didnt know the math so I didn't go into it, but now all of a sudden its fucking popular, and people are forcing it down my throat.
I also started with webdev around 2005-2006 but didn't really go professional until last year. It used to be a completely different arena back in the day, where you could go far with just HTML and CSS, without having to learn so much to have a functional website that was up to standards. It's no wonder why the web developer role have evolved into so many sub roles over the last 15 years, because it's simply too much for one developer these days. I think it's sad, because as you mentioned in the video; The new developers never get the chance to build that foundational understanding like we did back in the day, because they are expected to know so many things as a basic requirement that there's not really any time (or need) to actually understand it if it just works.
@@kasdimfer5156 Well to be fair, it's not like I've been trying to get a dev job back then, especially since I was still a teenager. It was more of a hobby thing until last year when I finally thought it would be nice to do it for a living.
That's why I start teaching the old vanilla Javascript concepts first. You gotta understand the basics before going to reactjs, angular or nextjs and others. You got to know what variables, functions, classes, DOM Manipulation, http methods, prototype functions, runtime execution etc.😊
This is honestly all eye-opening to me I learned from Lua with Roblox, and I learned all of the reasons why good practices were good and a ton about why understanding the environment that your code runs in is so important as well
I'm happy I sticked to learning C/C++/GPU Programming. And the best: out of pure interest and passion. Because this "learn this to get a job is a curse". People will follow the buzz and do Python/JS, without knowing Maths, what Computer Programming really is, etc. Nah, thanks.
well considering the junior positions nowdays require knowledge of all types of frameworks and languages, everyone just learns a little bit about everything but never truly delve deeper into them. I know cause i am one of them.
I'm about a year in to learning. Started out by learning python and realized it wasn't very easy to start a career with just that, so I started learning web dev. I've been drawn towards working with static site generators (Hugo in particular) because it's simple enough that I can actually wrap my head around what my site is doing. Getting into the more complex stuff is quite daunting because I get uncomfy when I don't understand the under-the-hood.
I’ve been trying to learn to program for a year now and honestly I’m just so confused. I need to learn the code behind the code behind the code, and only then will I see I can be a competent developer. Learning react doesn’t make sense anymore. Ah, it’s tough.
I had this problem untill I went to college and started watching Luke Smith. Then I realized its all bullshit at the end of the day, and that the simpler basic languages/tools, are the faster ones.
I see this too often. When I started learning software dev in my free time and got into web dev it was all simple since I was learning the foundations and slowly grasping the concepts of how programming works, but when I tried to learn React the first time about 3 years ago, I was confused, I knew what it did and kinda understood how to use it, but my confusion stemmed from how it worked, I couldn’t conceptualize solutions since I was stuck with a lack of understanding of the inner workings which made me give learning react and instead I just stuck to using vanilla JS for all my projects. Now that I understand software more and beginning to learn react again it makes way more sense as I am slowly understand the inner workings of the library which helps me conceptualize ways on how to use it.
I'm definitely in the camp that understanding the basics (e.g. Java) first is better than starting with something higher level. The thing is, new programmers want to feel like they're accomplishing something, which is hard to do when you teach them basic first. Oh you made a linked list to store numbers? That's cool, I wrote 10 lines of JS (that depend on 13,000 files I can't see) to build an entire website! Abstracting away the lower-level elements makes it difficult to understand what's going on behind the scenes and I think leads to more inefficient code than if you go the other way around, even if it does feel better to make "finished products" as your first projects. I also personally find high-level less interesting, but that's a separate matter.
This is why I actively seek out the "harder" ways of learning things. I feel like my generation of developers is getting ruined by simplicity. There are GUIs for EVERYTHING. If pressing the button on the GUI doesn't do the expected behaviour, then the dev doesn't know how to fix it. I know because I've been there and that's why I'm so adamant on working with terminals and looking away from the black boxes. It feels like we're being given shortcuts before knowing how or why we should use them and it's ultimately killing our learning experience. That being said, I do think people who want to exist outside of the world of black boxes will look for it. The tough part there is making them aware that it exists. Finding what to look for is the hardest thing about learning right now. The information is all out there, but knowing where to look is a skill in and of itself.
This abstraction and increased complexity hit home for me as someone working as a pentester in a consulting role. I'm expected to become an expert in every framework, infrastructure model, new hacking technique, every mitigation strategy, develop cutting-edge exploits, write code, build servers, and get domain admin or dump the DB all before lunch.
Yeah, but the issue is you can spend time on gaining solid fundamentals (DS, Algos, disk, memory, OS, networking, etc), then you get interview questions about some specific solution on AWS, or optimizing Postgres and Hadoop, Kafka, HA K8s. Binary search trees and hash map days were the easy days because they're self-contained concepts without many prerequisites. You really need to be a good operator of the most used solutions nowadays if you want to be considered. Linked lists are as distant a concept as assembly language. Interviews today are like npm_modules, they come with a boatload of dependencies, you either install them or you can't run.
I've always been so curious about learning why and how things works since I got into web development. The major issue I've faced is figuring out the right approach to doing this. The internet full of information, roadmaps and all that but none of that really help, I wish i could sit with a really experienced senior developer and get an insight into how he/she got to that point and work my way up using their advice and if possible guidance.
Thats why ChatGPT is so goated honestly. Removes all the retarded bloat from the internet. Googles search algo has been infested for years by sponsorships and shit. I really like the fact that if I want to learn something, I can ask a simple fucking question and GET A SIMPLE FUCKING ANSWER.
I'm a new dev and don't have a CS degree. It isn't that I'm not interested in the foundations, I would love to learn the nitty-gritty topics that are closer to the metal, but it doesn't feel like that will help with getting my first dev job. From my very limited exposure, it's more about learning how to use the tools than it is about learning how/why they work (at least initially). When I get hired, gain the source of income, and don't have to worry as much about paying the bills, then you better believe I'd love to go back and dig into the 'why' of everything. But until then, I admit I feel like I will need to be the person that uses React but doesn't know much about the things behind the scenes. Disclaimer: I admit that I am aware I'm probably going about things in the wrong order. Tbh most of my life's journey has been the bass-ackwards route so that isn't out of character lol
It depends, if you want a basic website, do you need to learn data structures and understand how memory is allocated? Not really, but something more complex like connecting to a database and creating an API, knowing what a port is and knowing how IP works (generally, like addresses, localhost, etc) helps a ton I say this because in my college, many people just wanted to pass, which makes them not learn, and there's a tangible difference between those people and people who were interested
@@PeidosFTW Makes sense. That type of stuff interests me and I watch Prime's streams/YT uploads because I want to learn the more in-depth topics, but most of my effort is going towards learning and using the tools that job listings are asking for. I know money should never be the main reason, and overall it isn't for me, but I'd be lying if I said it wasn't up there in my priorities because being able to make rent is awfully important lol.
@@headlights-go-up it's totally reasonable to think about the money, you have to live! As long as your approach to learning works and you understand what you're doing, it's totally reasonable
One of my favorites feelings with code is when i read again something that i didnt understood the first time, but that i do understand now. It does takes a good while to make fancy and interesting things
The way you're talking about this is how I imagine skilled craftsmen watching unskilled workers piling into the factories built by the skilled workers talked.
I'm an embedded systems engineer, and learning react/web development in my free time, and it's so strange. I'm so used to being able to understand what's happening in my system down to an electrical signal level, but with react, I'm looking for documentation on how the DOM works, and everything I seem to run across is "Yes, the Dom works. Use the Dom". Or other things like that, where I'd love to have a better understanding of low-level implementation of these things, but I don't think most frameworks have any interest in exposing that stuff from their abstractions.
Just finished my second year of training to become a SWE and the main challenge has been and still is that I got started working on webservers and going fulltime into TypeScript and microservices. I had school next to it where we got taught Java and Algorithm fundamentals, but it was pretty rough to teach myself about nodejs and javascript quirks, message queues and all that while still having only a very basic understanding of how processors, memory management and websockets work. I like my employer, they are doing their best but when I feel like I suck I have to remind myself of the insane complexity of the stuff I'm trying to do. It took a lot of long nights doing extra work on many of the fundamentals but I think I'm starting to get a better grip on the bigger picture. Thanks for seeing us dumbdumbs ;D
I'm on month 3 of my first real web dev job with a major ecommerce company. I feel semi-comfortable with frontend stuff, I can follow along and (maybe) handle some of the api calls to the backend.... But lord help me when it comes to the backend!! An ancient (2015?) ecommerce platform written in Java, which I know not!! I'm not unfamiliar with servers and the general ideas, but the level of abstraction I work at vs the reality of what goes on in that beast are, as you said, insane. Thankfully I built a website with Wordpress 13 years ago, so I learned some php and server-related things that are useful now.
In my opinion, any developer before delivering any software professionally should first get an idea of what's exactly going on by learning: - Low level/systems/high performance (memory, processors, sys calls, threads...) - Compilers and Interpretation - Data Structures and Algorithms - Networking and common protocols (e.g. HTTP) - Tooling (os, git, docket, editors ...) more magic means more confusion and therefore more bugs and lower quality
My first code was in early 80s, Z80 assembler on ZX Spectrum 48K. Had to be careful a d save it to a tape frequently, so bugs dont just make all my work disaapear. :). So, yes, it's "differentl" nowdays :) But it's been and still is nothing but fun. I think that's the biggest difference. Today it's just work for so many, and back then it was pure enthusiasm and love
Completely agree on the webdev part. Started webdev just bcoz wanted to make something. Then got introduced to the real under the hood working. Didn't even knew how js engine works. Major issue is that introduction to DSA is given in form of leetcode which is so terrible. Do this and you'll get the job. How can someone learn in such environment
The abstraction is good for experienced devs...new devs should try top bottom approach these days while learning new tech just try to do avoid libraries and try to implement natively...that will take time and feels very slow..but builds good foundation
Jeez I didnt realise it was so hard today to get a start. I did some basic webdev 15 years ago with js and php, which got me into an SEO web dev job. Doing really well now, but yes, finding people that can cope with frameworks is not easy.
Omg dude thank you for validating my thoughts about how crazy web dev is. Sometimes I think I’m wrong and that there is something wrong with my thinking… I just never got on board with all these layers and abstractions and made up concepts that are now accepted as fact. It’s a hype scene and “devs” buy whatever is thrown at them . These days I’m much more happy and comfortable coding low level embedded stuff with rust! I never felt comfortable learning abstract higher level development like react. My mind just doesn’t work that way, I just need to KNOW how it works from bare metal up. But it seems most people aren’t the same and run with how to do things rather than having a true desire to understand how it works
Dont let the retards fool you into thinking your "wrong" for the way you think. Societal leeches thrive on fooling people into beleiving their a necessary expense.
Just about finished with Codecademy full stack dev course, had a decent background in front end, project management and dev ops, I’d say I knew about 40% of the course pretty well. Still took me about 5 months full time. It’s a lot.
Took a Bootcamp over the pandemic. Fundamentals and leaned mostly on React near the end since it made everything easier, personally. Got my first tech job as the only developer in the company. Last developer quit and left an old application with little to no documentation running everything off of SSIS packages. No training. No support. Just spaghetti code and error messages. I’m miserable and haven’t made progress in weeks.
I'm 18, started coding at 14-15 by making some platformers in Godot, and I remember really, really struggling to make anything with it since I just jumped straight into it, trying to learn the specifications of the engine instead of learning the principles of programming. I then went on to take C# around 15-16 and there I really learned how to program, start from the basic concepts like variables and functions, to data types and data structures, to OOP, and so on. Only when I was 17, 2 years after starting, did I go to Web dev and learn JS and React for a school project, and then I already had, what I believe to be, a strong foundation of programming logic and concepts.
it's not just web dev. It seems as though all throughout software development things have been getting increasingly complex and intricate as people metaphorically evolve from assembly to C and to higher complexities and abstractions built ontop of the fundamentals. I'm much more interested in low level / high performance software, but I too started with java. I was and am still a Minecraft fanatic and writing Java mods and peering the source code was my big introduction into the world of code. Isn't it crazy that my starting point was already ontop of the JVM??? I had no idea how pointers worked whatsoever, had no sense of the flow of data, didn't know what was actually happening when my variables were static or not, but I was writing Futures and BiConsumers or whatever it is. Over the past year or two I have been basically back-tracking my way down, trying to get a sense for what's going on in the hardware when the code executes, but no matter how hard I try I still find myself completely unaware of how basics work. I'm grateful it all exists, but I wish I had been born into C.
I started 2 years ago and let me tell you that I cannot use abstraction and sleep alright at night not knowing what's going on behind the scenes so thats been a rough 2 year
Trying to find my first direct hire junior job right now. Took time off after bootcamp in 2020 cause I was burnt out and it kinda sucks because I feel like I might've missed a better window to apply to things. Now I do contracted work for startups here and there and the support I get while trying to learn is awful. Teaching myself complex new tools, trying to get better at react, but having to context switch to angular for the first time. Meanwhile applying to jobs that I feel like don't value these experiences I've gone out to try to get. It's really fucked up right now and I hate it. Doing coding bootcamp and then going off to try to get experience where I can so I can have a chance of getting phone screens at least is harder than getting my two degrees in undergrad.
Web development today looks like a hundred different scripting tools used to make the same generic looking and feeling websites that could've been made with LAMP and then a rotation of interns could maintain. If you want to do more meta programming, web-dev is definitely not the way in the current climate
Ok, so, my experience with this in webdev is that I started learning fundamentals (not even deep, just how memory works, a little bit of C and then straight to the web trio trying to understand as much deeply as possible the why does it do what it does) and on my first production job my peers that run circles around me in angular and react were absolutely mistified at things I could do just by understanding html, css, and js. Granted, i'm just a simple FE dev but at this day I get to train jrs that absolutely destroy me on React, but literally cannot work on anything else because they don't know if that's even possible
This is EXACTLY what I'm going through right now. It's extremely hard to get your head around some of those concepts like metaclasses, factories etc when you're supposed to be already developing apps in the web. Sometimes I even envy the programmers of the 90s, they had to deal with math rather than abstractions. My only hope here is AI
I taught myself how to code as a kid, and did it on the side as a hobby for a very long time before trying to make a career switch. Holy shit I had no idea what I was in for. Unironically, I think I had a harder time picking up the ecosystem and modern web development pipeline than I would have had if I was coming from a blank slate with no prior C++ / C# / Pascal experience. I had my foundation, and I could see my destination, but I kept hitting this weird roadblock where it was like "YES BUT WHERE DOES WHAT I KNOW LEAD INTO THAT STUFF?" And it was just... crickets. Because coming from a lower-level background and trying to get into web dev is a strange limbo where you just don't have the patience to sit through countless hours of tutorials about stuff you already know inside out just to skim off the new material, but the 'expert material' assumes a certain level of familiarity with the thing you're trying to learn. Even then, the 'magical leap' between what I understood and what I was doing is so poorly communicated that I felt like I didn't understand anything despite being able to crack on with the work. It reminded me of being in school again; no matter how much my teacher talked at me about the calculations we needed to do on the electron shells in Chemistry or some shit, despite being able to go through the motions, the information I needed to grasp what was actually happening was locked away behind next year's Physics DLC, so it kept falling right outta my brain.
Currently learning the foundations of programming in my school and only about a year in are they introducing frameworks and other abstractions. It feels like magic because even though it's syntactically harder I feel like I'm writing cheat codes because prior we manually built everything hard coded. I couldn't imagine doing it the other way. I would be so lost. It's like teaching those horrible common core math "techniques" instead of just teaching how the arithmetic actually works.
It's the same in SRE/Operations. We've got people who are trying to get into cloud/server-less design, without knowledge of DNS, domains, operating systems, firewalls or any of the things learned as a sysadmin.
From the standpoint of someone who actually worked during the pure "Wintel" days, I can imagine your frustration. All of the above but e.g. for an obscure IDE that actually uses a specialised language that actually sits on top of the WINAPI that in turn through Win shenanigans almost manages to connect to a database and then you have to fetch data and show them and allow the user to do their CRUD and data manipulation, where a loose window handle can take down the whole OS (because of course it can) and where memory leaks are more common than rust compiler borrow checker errors, where you had to have X,Y,Z runtime on the machine, for your language's runtime to run, for your application to run and then hope that nothing blows up. People would "know" how to display data on a ready-made visual control, and if you asked them to implement the most trivial of customization (e.g. allow for clicking on a header to sort data, they short circuited). How we managed to actually make things work, I sometimes wonder.
I learned programming in both way. I started my learning path from the foundation and at the end I spent a lot of my time dealing with React stuff... To be honest I'm really fascinated by the beauty of code you fully understand. But at the end we all need stuff quickly then I started to appreciate frameworks that solve my problems quicker than I'd be. They are just two different way of dealing with the problem: the one who crafts all the pieces and knows what they do, the one who puts the pieces together.
Agreed. I think we can look at how other subjects are taught. We teach math by teaching the most basic math operations and fundamental knowledge, then building on that knowledge to cover each new idea one at a time. First, you learn to count, then you learn addition. Then you learn that multiplication is just repeated addition. Then you learn that exponents are just repeated multiplication. Then, eventually, you learn how to take those basic functions and start combining them in interesting ways to accomplish powerful high level challenges. But it all starts with the fundamentals. Basically every other subject is taught the same way. Start by learning the fundamentals, then build on that knowledge to slowly learn more advanced topics. Most college courses on software development do the same thing. Start with programming 101, then operating systems, and data structures, and networking, etc. But anyone who didn't take a formal software development course often ended up learning subjects in an inverted way. Most people think about programming like learning to play music. They just pick up an instrument and start playing around, before understanding how sound works, or before learning about harmonies, or before learning about tempo. But if you're going to play in an orchestra, or play music professionally, you really do need to learn your fundamentals. Not because fundamentals make it easier to pluck the strings on a guitar, but because fundamentals help you assemble those single notes into a compelling song. It's the same with programming. You need a solid foundation of the basics. Not because you can't get things done, but because a good understanding of fundamentals will help you quickly come up with good solutions to challenging problems, and those same fundamentals will help you debug complex systems and get things done much quicker than someone who doesn't have that same basic knowledge. I think it's fine for people to slowly pick up programming as a hobby, and not end up ever learning the advanced topics. If someone is a hobbyist, it's fine to not dedicate your career to learning everything. But if you're going to make a career in programming, I definitely think you should start with C and operating systems. That's the most basic stuff, and knowledge of how to manipulate memory and manage operating systems is critical to understanding all of programming. Once you understand how things are done manually in C, you can understand how nearly all of the high level software systems are built. I've been able to quickly assimilate new concepts because I can understand them in raw hardware terms. That's the fundamentals. If you're going to have a career building software systems, you really do need those fundamentals.
I am so burnt out on programming that I literally never want to look at a computer screen more than I absolutely have to ever again. I deeply regret my choice of major because, while I initially did enjoy programming and problem solving, the never-ending cascade of reinventing the wheel and being forced to learn all these useless layers of abstraction have made me despise the entire industry and, honestly, tech in general. I want to juat get away from tech and live on a small farm where I can actually live a real life, not be a stooge stuck to my desk, pasting together googled solutions for 12 hours for some product that I dont give a flying f*ck about and is probably actively making the world a worse place. F*ck software development, modern tech, and the entire corporate culture. I look forward to the day I never have to interact with any of it ever again.
Quick story: I'm not primarily a game developer, I'm an artist but to realise my ideas I've learned how to use unreal engine really well. My challenge now is working backwards from their blueprint and shader systems to understand the fundamentals. Essentially using blocks of code hidden behind a node graphic, but now reading them in c++ to see how the nodes are actually constructed. I'm backing this up with studying gpu gems and a beginners book on c++ to really try and understand. You're right about the levels of abstraction, it's very complicated to me but I think the more I test myself the more I'll get it.
I’m almost 2 years into my career having switched careers with the help of a coding bootcamp. I find myself looking for examples and materials about learning fundamentals, because often I don’t know the why to what I am doing. I know how and what, but that “why” chips away at me. I am very happy with my route and I don’t feel like I don’t have the information to properly do my job, but I’m curious what that might look like at other companies and how it might affect me had I gone a traditional CS degree / concepts. For reference, we use the MERN stack with TypeScript. I work primarily back end and we have a tool called Inversify which uses IOC and DI (much more robust than what I learned at bootcamp)
And yet, tech interviews usually have little to do with these subjects. So there's another "dimension" that software engineers are expected to uphold just to even get a job. It gets exhausting.
True. At my school we have a class called webdev where we learn Vue and Laravel. We don't have classes about html, css, javascript and php anymore. They just ditched them and now we are straight into full stack.
The layers in software are insane.
As a devops engineer, the software developer writes code that lives in a docker container
-> in a docker network
-> in a k8s pod
-> in a k8s cluster
-> on a k8s node
-> on an aws ec2 machine
-> on a hypervisor
-> on an actual machine.
This doesn't even touch
the software that manages all of this infrastructure (AWS, github actions, argocd),
nor the building/compilation step (even high level python apps are dependency nightmares),
nor the underlying operating systems,
nor the internet layers that connect everything,
nor the browser that will run the html their front end spits out.
I occasionally wonder what this is all for; why doesn't the software just run on a standardized chip? (Insert 30 million line problem by Molly Rocket)
God help anyone trying to learn in 2023.
I'm learning and i have no fear
If you're just starting out you don't need to worry about all this complexity happening on production servers though. You just need to get something working locally that you can iterate on. On this front the tools and concepts are easier to learn than they were 10/15 years ago (improved designs, better docs, more stackoverflow posts). Honestly, I think learning the basics is easier than ever, even if the path to becoming an expert is a bit more difficult.
To the question of "what is all this for?": Would you rather try to manage multiple services, databases, and queues manually across multiple hosts, or just use a good abstraction like k8s that does this stuff for you? The value of the added complexity seems pretty obvious.
What's incredible is how docker and k8s represent massive simplifications compared to the previous solutions.
@@SR-ti6jj I see how ever individual part solves a lower level problem, but each layer comes with its own problems that require ever more abstractions. But how far is this expected to go? Is devops going to split again into dev-devops and devops-ops?
A system where you specify a SOC design and replication number and ingress rules would replace most of these layers (mainly by abandoning the von neumann machine architecture) for cloud services. We would have the simplicity of lambda and the cost of reserved ec2 machines. Furthermore this would be easier to teach and learn to new devs; you write, compile, and push and test. Although now that I type this out, I guess there would be an ever increasing amount of tooling on that as well.
@@roaringfork "how far is this expected to go?" As far as the abstractions continue provide value to developers.
I'm not following what SOC has to do with distributed systems and how we manage them
As a C++ software engineer I feel blessed to be able to still work on a "low-level" abstraction and understand everything that is going on under the hood because debugging is "easy" (yeah sometimes it's a pain like for everything but in general you'll always find quickly what's going on). Black boxes create more problems than they solve, because you'll be able to develop quickly but you'd better cross your fingers nothing really bad will happen because then you're off for a nasty ride. Lower level takes time but at least, when you do it right, it's solid.
All my most enjoyable coding projects have been in c. Going too high level makes it feel like I'm just entering commands into someone elses software - it doesn't feel like I'm actually programming anything.
Update: Was speaking with a developer who works on microcontrollers the other night. When I told him this, that I prefer coding in c, he said "That sounds quite disingenuous"... It turns out some programmers find it hard to believe that people like us even exist, people who prefer to think in the low level...
Exactly the same feeling here.
I'm a software engineering student and I'm trying to find the right company to do my graduation project, and I'd really like to use C/C++. Unfortunately, so far ever single company I've approached only has some kind of Web-based, .NET, python, java, whatever you can imagine bs that I do not want to deal with. It's frustrating. I'm starting to lean more towards Embedded now, not because I'm really into hardware but because that seems like the one subsector that still does programming with actual compiled languages.
@@saniancreations Kind of the oppossite for me, I got a job where I was supposed to write C# .NET mostly because that was what I learned at school (and in my free time) and then after a few months I got asked if I wanted to try working on some C++ code. I did it and now I prefer C++ over .NET. lol
tbf tho legacy C++ is often kinda ugly and annoying. But once you know a fair amount about the low-level stuff it's a blessing to have some of the abstraction of modern C++ and still have the ability to go with the (powerful) basics if you really need/want to. Such an underrated language.
Turns out you can't make apps for tens of millions of concurrent users without the kind of flexibility that also brings black boxes. Your low level programs aren't better to work with, they're just different altogether. What we're seeing happen is forced specialization. And people just don't wanna accept that.
I'm at a place at my job currently where i have to explain allot of the basics to many of our new hires. What i see is that most of the people wanting to get into development don't want to put in the time to learn and understand the basics because they find it boring. As much as i like teaching people. I find it frustrating when a person doesn't put in their own time to research a subject on their own time.
You won't be hired if you put time in the basics.
Exactly! I had a guy join who finished his master's and didn't understand what a gateway and router actually are and I had to show him the basics of DevTools in browsers.
not sure looks like your hiring process needs a improvement
I teach programming. I know the struggle. A lot of my students zone out on the basics, and when we get to the more complex stuff their knowledge gaps are already too wide to understand the new material properly.
@@Pavel-wj7gy the opposite, you're more likely to be hired. A good 80% of the candidates I interviewed last year had horrible foundations.
Some didn't even know strings are actually just an array/list of characters.
The foundation is important, it gives you a good intuition of what's wrong when problems occur and it also speeds up your learning of new tech/paradigms.
The biggest reason why this is happening is because (from a new learner) is that Agile has become so pervasive that we don’t have time to actually learn the basics. Everything in corporate is “how fast can you make it” or MVP minimal viable product. Which then seeps into the juniors and beginners who are taught horrible practices and then documentation on library’s frameworks and software is at best mediocre. Now I will say, where we are today is better than where we were a long time ago but with the every break through technology(like docker and AI assistance) the the time honing a skill is shaved and shifted to getting products shipped. The amount of things I see on job postings for just Junior Developers is crazy and it has now gotten to a point where junior positions are non-existent or going extinct, entry level is now 5 years experience and mid level is 5-8 years because no one wants to really address the elephant in the room.
Agile is good in the sense that it is anti dogmatic and thus has the POTENTIAL to move most optimally in an ever changing landscape. Potential is the important word lol.
Yea the projects are being fundamentally mismanaged and they think they can fix it by throwing more years required and coding languages onto the job postings lol
@@ultravioletiris6241 this hit me in my no no spot. Too true.
Finance and accounting world is very similar.
The one junior dev interview I got, during the interview process, implicitly stated that whoever gets hired must be able to do the whole job on day 1. Made me wonder what they thought 'junior' means. Like heck, you can't even allow a day or two for adjustment?
Prime always makes me feel better for taking the college route. We don't learn current tech stacks except in a few 400 level electives. It's all fundamentals and foundation building everyday
I wouldn't trade mine. I'm very happy that I went
So am I
The problem is that everyone is effectively "forced" to learn all the latest tools and abstractions, and those tools and abstractions are ceaseless -- they just keep coming. There's a new service or library or way of doing things every few months. And with so many choices, especially for a new developer, you become paralyzed with indecision. We're no longer learning things at a fundamental level. We're learning tools -- lots and lots of tools, each with their own unique idiosyncrasies and ways of doing things. And now with AI coming onto the scene, things will change dramatically yet again. Soon we'll need to learn the most effective "prompts" with the best "copilot" AI programming tool, because that will be the fastest and most productive way to code, which will be essential to staying competitive. 😩
I resonate with this deeply,you found a solution for this? I'm getting sick of always learning new tools that don't add anything to my fundamental knowledge just to keep up with the rest of the crowd...ughhh
Yea this is pretty true. Employers be complaining that new hires dont know the basics, and thats largely because the basics are being handled by a ceaseless torrent of micro services. Knowing the idiosyncrasies of these micro services is both taught and desired more than the basics nowadays, because people arent coding things from scratch anymore, they are simply enabling an amalgam platform which otherwise is designed to be more and more automated by the day.
Which is why in our team, we stick with the basics, and our software gains more longevity, because we reduce as many platform dependencies as possible.
@@scottydog9997 What does your team consider "the basics" these days?
@@vickmackey24 Native with basic OOP frameworks.
Keep things simple, so you can gain access to all the elements of the device.
On web, Just use .Net Core, and relational dbs.
Picking tech and frameworks that have been around for decades, and are still in use, will usually increase longevity.
So long as they have been maintained, and have modern tool sets that can assist in debugging and testing faster.
I'm a frontdev who pretty much learnt javascript through using react. I can tell you, it's hell. I go to work every day building systems, then come home and spend my free time to learn everything there is to computers with 4 kids and a wife, so time isn't my biggest resource. I feel so often like "i know syntax, but why is this happening?". Without foundation I can also tell you that searching bugs is a sad story in itself. Like, everything is done for me and I don't know why and that turns into a lot of pit falls.
I see my friends, both private and at work, who actually went to school to learn this. They just see everything with such different eyes. I will get there as I I'm really interested in the subject, but to think that there are people on the same road as me without that passion that just want to lift the paycheck in the end of the month. I can't even fathom what hell they're in.
@Kuromika Yeah but that's the road the "teachers" pretty much lay out when you're learning by yourself. You get some syntax basics in HTML, CSS and JS, then it's moving forward to learn libraries instead of going through the basics of what's going on in V8 everything else around it. It's all about deviating from the course plan if you actually want to learn about that stuff, and that's not what everyone is doing by the looks of it. That's why I'm taking all the time I can to learn about computers, compilers, engines, different languages, servers and databases. I'm just a frontdev, but there is so much more to know that I can't stop myself to keep my knowledge to grow.
Best course on JavaScript, that I was lucky enough to go through went I started was “JavaScript the weird parts” it was amazingly in-depth on JavaScript and how it’s working under the hood. Would be perfect to go through now you already have some experience.
@@TheCiderFish I totally agree and know exactly how you feel, that's why I too have a habit of continuously rederiving stuff and going up and down the abstractions from the turing level to the no code GUI tools. Its hard to grasp the truth about tradeoffs and abstractions. Sometimes most layers seem like a bottleneck but sometimes they could be near perfect optimized, some abstractions are designed poorly and then require more layers to solve them. What helped me to get a better understanding is some excellent resources like SICP, Andy pavlo's DB, tech blogs on modern SWE, great youtube channels etc etc. What I've seen is real world SWE is riddled with tech debt, low context hacks as features and project timelines dictated by non tech business folks.
I would suggest making a toy REST API with python and fast api. The *fundamentals* are just loops, if, procedures/objects and classes, the python syntax is really like textbooks pseudocode. I bet that if you already know js you will find it really pleasant and insightful.
@@juansalvadordomandl5287 I'm on my way. Not with Python, but trying to build a database and query data with a server with a rest API. But computers are so much more than just the web. My goal right now is to buy a raspberrypi and try and set up my own server and deploy a site. But after that I want to go into Rust, C or C++ to learn about memory management and everything else that is computers. End goal might be to build my own OS, but that's most definitely many years away.
Coming as a senior in undergrad about to graduate with a bs in csc, my curriculum has been almost entirely “the basics” and basically zero “real world” practical applications. It is very interesting hearing this, because I (and my fellow peers here) feel overwhelmed and left behind almost by the lack of practical knowledge we have. Every (entry-level) developer job out there seems to only ask questions about all of these crazy real world applications that I don’t even understand what they do (Docker? I don’t even know her). Cool hearing the opposite side about the basics, but I do fear it will be hard for me to make it in the real world with such little practical knowledge I have attained here with the basics.
Same feeling. and the problem (i guess) is that the jump from the basics to the practical tools feels abrupt and hard especially when we do it on our own as we r trying to uderstnad how these complex tools are built ( which is fairly impossible given the level of abstraction and the complexity of teams that worked on them). What I am trying to do is combining both and being easy on myself. I try to work my way down sometimes ; I learn the tools and dive deep into the logic and building blocks of it as I work with them because realistically thats what I m gonna need and use.
ye but once you get an understanding of real world technologies, you feel a lot more confident than the people who skipped the basics
Abstraction of everything doesn't help us too. It doesn't matter as much that we know data structures and algorithms when we can't practically read all of this 1000000 lines of abstraction code.
Same. About to graduate. Learning the theory is great but it's hard to feel like it when jr level jobs want years of experience to even get an interview.
@@IamFrancoisDillinger As someone whose been searching for a job for a while now, it really seems to me like '3 years of experience' is covered by 3 years of studying. I don't think they often actually expect anyone with 3 years of professional experience to apply for a junior role.
I recently finished studying college all that fundamentals, DSA, low level stuff, and feel completely clueless coming into a world full of k8s, docker, highly distributed big data blah blah blah. It's very hard.
You finished purgatory, time for hell
Creo que depende del individuo, por un lado tenemos a theprimeagen y del otro ati jajaja
I'll be finishing college this spring. Currently neck deep in functional programming with Racket and going through lambda calculus. I feel like I'm average and should be able to find a job but then look at junior positions wanting 5+ years of React experience and I'm lost. College is all theory and every job wants years of experience I don't have.
@@IamFrancoisDillinger Idk if you are in a country that it is reasonable to pay for another year of uni, but, if you are, pay for it, just to go for the internship offers given to the students. Usually, their easier to do than going applying directly as a graduate. I Am doing this right now, and, Ive got some offers to decide till summer. The good news is if they saw a good addition to the team, they would offer a job on the spot or thats what happened to a lot of my colleagues.
Love that you made this video, I am 6 months in my programming journey. Did a bootcamp and got a job. In my job I have to know Angular, typescript, ruby and rails, Docker , Git, command line, rspec etc I am just 6months in on this stuff but I feel everybody expects me to know everything. It is like I am juggling a million things and I can’t do any of them right. It s not like I don’t put the hours, it is just to damn much.
I’ve been watching the lines get blurred more and more as to what software engineers are responsible for; I think partly from the “you build it, you own/run it” model, which kinda translates into “just have them learn everything” in leaderships eyes. I’ve had friends reach out to me about breaking into the software engineering space… asking for direction.. and it just keeps getting harder to not overwhelm them. :/
I’m just coming back to programming after years of not using much of it.
It’s wild how detached yet powerful the software world of today is.
I learned some 15 years ago in school and learned basically electrons up.
What is a transistor, flip-flop, building blocks of a cpu, assembly, writing Battleship for two humans or human vs computer ai in assembly, then c.
JavaScript was there but this was now 2006/7 JS.
I hated it at the time because it felt like ages to get anywhere real.
Now it’s like whoa whoa whoa im getting real too quickly and making bad engineering decisions because I don’t understand all the underlying choices of the systems I implement.
Its funny cus nowadays, I consider that real, and soydev shit fake.
I got so tired of the soydev bullshit, that I just made my own breadboard computer out of TTL chips, and made my own ISA and compiler to go with it.
Its actually kinda sad, just how user friendly assembly really is.
But for whatever brainrot reason, were using all this shit over regular old C/C++
I also mentored new hires before, and it's so sad to see that the expectation for them is to be able to jump into web frameworks directly. The hiring process might also be at fault, but I'm also so sad to see one of my students laid off because he can't cope with the expectation. It still leaves a bad taste in my mouth even after a year. I hope he is doing well now.
What couldn't he keep up with? Couldn't he just google?
@@OfoeNelson the company expect them to be able to use frameworks in two weeks lol, so only the outstanding one can catch up. It was startup tho, and it was messed up
@@wota_pov Is framework being used by the company proprietary?
I so relate with what you said in this video, and it’s affecting my job search on a very negative way. The worst in my opinion is the infinite learning chain “ you need to know X, and for X to work properly then you need Y” and so on, to the point where I end up forgetting what I learned before.
Imho, even if you are self-taught you should follow a university flow, basic programing in c, DSA and OOP in java or cpp, listen to the some course that is usually called programing languages, listen to an OS course and a DB course. This is usually first two years of university and then go into web dev stuff with the basics html/css/js and then in the end you should look at react.
I know this takes a long white to complete, especially if you are doing it by your self but if you manage to do it, it will most certainly make you a better engineer.
yeah, but you should do it better than uni, people from uni have no idea how to structure code so its readable/maintainable,
How do you learn to structure your code? It’s just through experience?
@@ninocraft1
Can confirm. CS student. The amount of group projects I've had where my peers don't know how to do something as simple as write guard clauses or break up functions to reduce nesting is insane. I see way too many abstract varnames _(a, b, c),_ code repetition, and unnecessarily complicated boolean expressions. And don't get me started on the"what's git?" students - usually the same ones who refuse to touch a debugger!
It seems these days there's way too much emphasis on the theory and high-level structure, and not enough focus on how to actually write good and maintainable self-documenting code. That's probably why I've had teammates think they could claim equal credit on projects where they only did pen-and-paper mockups and documented our scrum workflow - they never even touched an editor during the project! (Yes, they teach scrum at uni now. It's awful.)
@@ninocraft1 that comes with experience & practice
@the1necromancer Senior CS student - couldn't agree more. I laughed at the 'what's git?' comment. Just wrapped up a project with a team where one didn't know about it, and the other didn't know how to use it...
I don't know, I think web development feels like it's in a worse spot because theirs fundamentally more that someone feels they need to learn to be competent in the role. The foundational pieces are important but I feel that we place too much emphasis on that building block at times to the point that traditionalist have made the barrier of entry significantly harder to be able to get into then it has been in the past. When I talk with juniors/interns at my place of work, I often find that they feel they need to know everything when they first start out, which I immediately will tell them that they need to focus on getting good with one set of tools to build out their foundation before trying to explore out other stacks, as it's easier to learn things when you have a bridge that you can relate it too from your foundation.
I generally think it's a good thing that the game has changed where the traditional route isn't the only route that people need to take to learn software development to land themselves in a position, however as related to this video, the decisions to deliver features as fast as possible that allow us to be able to ship software more than we've ever had in the past has allowed for developers to be able to skip out on solving harder issues in exchange for fixing the issues after they're in production.
I am currently an engineering student and I feel like it was the best decision to learn everything first in C , I learnt data structures & algo in C and Python concurrently and once done in C , everything is crystal clear and super easy to do anywhere.
this is the way
C and Python are really all you need to get through academia tbh. I'm in grad school for CS and that's what most classes use.
Could you please share as to what's special about C?
I'm coming from a background of dealing with js, ts, react, nodejs and a bit of other backend stuff. What's different about c that would be fundamentally valuable to learn?
@@gedas7058 C is the language that all operating systems are built on, as it's one of the closest languages to machine hardware. Systems developers swear by it because it allows for manual memory management to optimize performance. The drawback is that it takes significantly longer to develop programs in C because it doesn't abstract away the headaches that higher-level languages like Python and Java do.
I learnt C too but it is not helping in JavaScript. Have you tried Web dev and especially higher level stuff in JS?
I started doing WebDev 8 month ago with React but you inspired me to learn and understand basic data structures stacks heaps neovim and now i am trying to compile rust in web assembly
But I am still writing react to get first job tho
Same, starting in apr 2022 and can’t get a job and stay motivated because I feel like I screwed myself over
I did nothing backwards. Learned js building full stack react + express app with vscode. Then started to use Vim for vscode extension. Also i already had little coding experience so i didn't struggle on for loops etc.
@Kuromika let him cook
The feeling is GAAAAAHHHHHHHHHHHHHHHH for us college students right now, we're learning data structures, algorithms, operating systems, computer networks, databases and everything else but it seems so outdated when you know that we can build complete applications on the web and for the desktop by using the abstractions provided to us by all these libraries. They don't teach you how to build applications in college, they don't teach you the tools required for building applications, we've to learn all that after class hours. And there's a lot of us are stuck in leetcode or competitive programming just aiming for a job that'd set us up for the future.
you want to know those fundamental things bc they will not go away as tech stacks change.
No es dificil eso, lo aprendes en 3 meses estudiando 10 hrs al dia suerte crack
All the classes you've mentioned are required to build an app, they're not outdated. College isn't there to teach you how to build an app, it's to teach you how things work. Once you know how you can create a server and how to design a database, you are then able to build an app. The languages may be "outdated" but the things you learn are language agnostic
@Kuromika Perdon no entiendo idioma "Me ofendo por todo por que soy gringo"
@@HelloThere-xs8ss I see. These are all fundamentals that we need to be aware of, yes. But when companies expect us to know quite a lot, it's kind of difficult for us to keep up to date with the fundamentals, changing tools and technologies, not to mention the pressure stemming from leetcode and competitive coding. Is there an effective way of going about all this, aiming for your first job fresh out of college? (From India btw)
I'm really glad I started serious programming in a scientific computing context. I had to work on really low level code, sometimes assembly, sometimes multithreading without abstraction and message passing between compute nodes. I learned a shit ton about how computers work and how to optimizer the hell out of a piece of code, which has proven to be incredibly influential on how I write code.
Im in College rn and thats what im going for.
I wanna do something scientific/engineering/math related so badly man.
Last thing in life I want to do is deal with autistic and borderline retarded webdev shit working with 50 different autistic frameworks and soydev bloat.
Web development has zero actual innovation.
The only "innovation" people come up with are just new ways to give you aneursym.
Only reason I wanted to become a programmer was just so I can SOLVE PROBLEMS.
Im getting an applied maths combined degree and going for anything as far away from webdev shit as possible. Its just art design but bloated and autistic.
This is exactly how I feel. Got a couple of Jr Devs that have under a year of experience join the team. Recently walking them through the CD/CI pipeline using Bamboo to build and deploy onto a ECS and EKS AWS instance. I realized they have no clue what is going on under the hood once buttons are click or automated jobs are triggered. That fundamental knowledge gained in the beginning years, when using SSH to login and install a LAMP stack (or whatever flavor) and SCP files to a server, is lost on the some of the newer Devs.
Also, let me start with the fact that I love declarative programming. However, imperative programming gave me the insight of what and how things work. My opinion is that this level of abstraction has led to terms like "It just automagically works". Same with these JS frameworks. We are using Angular as the view, and no one on the floor understands how/when change detection works. Or what TS optional chaining is doing under the hood unknowingly creating code bloat.
Completely agree. Abstractions are great, but we have responsibility to fundamentally understand what's happening beneath the hood. I see devs unable to debug why their DB queries aren't working because they rely on ORMs and never learnt SQL; the answer to your problem is literally shown in the log...
Lol I agree as a jr dev myself.
The thing is, I got into programming since I used to play with Arduinos back in elementary.
So the only thing I know, is keeping shit simple.
Honestly Il be real with you, if I could I wouldv just written half that shit myself.
Half the time when you say your "learning" this stuff, your just learning how Amazon decided to do it. Your not learning the objective good way to do something.
This resonates so well, first year of my Computer Science degree I picked up a mobile dev course and the professor started with react native, it was so fucking confusing, layers upon layers, with no explanation just jump in and figure out if doing x makes a thing pops up on your screen. Started learning native android dev with Java on my own and things made way more sense, I actually got to see fundamental programming and oop concepts at work , it wasn't just "you don't need to do all that, its easier now with just a press of a button".
I'm really happy that I started learning fundamentals layer by layer. I'm still learning, and I haven't done react yet, but I'm practicing classes and storing objects in arrays in classes, and using class objects to construct elements in the dom and stuff. I can feel it teaching me how to think like a programmer.
I started in helpdesk, and I have worked in a Soc for about a year for a software company, and although I’m not a developer, I couldn’t agree more. All of the abstraction that cloud and devops brings to the table plus the never ending list of new technologies and frameworks can be overwhelming for someone to start out. I want to make the change to the software engineering side, but have decided to take it slow and start trying to build some of the things myself that are being abstracted away from me as a potential developer. I think doing things that way would make learning the other things much easier.
As someone who learned HTML/CSS in 2005 and PHP/MySQL in 2006, I deeply feel the point you're making here. I hadn't thought of this issue till now, but it makes me very grateful to have gotten into programming and webdev at the time I did because I obtained a much more thorough understanding of the fundamentals, and now working with "modern" tech stacks I understand the inspiration behind a lot of the newer technologies and they're easier to digest and learn. Also that reference back to XAMPP development brought back some nostalgia haha.
I learned PHP, MySQLi, Codeigniter 4, jQuery and AJAX HTTP requests through jQuery inside XAMPP in december. It was my first interaction with back end, it was for a job I ended up declining because of the toxic boss. Configuring apache stuff and codeigniter .htaccess files was.. not fun. Then the project he put me on used Codeigniter 3 and I was expected to adapt literally instantly as if it was the exact same thing. And the code was horrid, with multiple functions for the same thing, for everything. What made me create a Reddit post about it all was when I realized my boss expected me to be able to work within that codebase within the first day. In the Reddit post I talked about everything else that happened and they convinced me to find a different job, which I did.
That's what I like about doing small projects in C, you are basically on your own, and by reinventing the wheel you learn a lot
Would u suggest c or c++ for learning these fundamentals? I have java experience and a new grad
@@avidreader6534 C is better, it has simpler syntax than c++. Keep it mind that a simpler syntax doesn't make it an easy language.
@@avidreader6534 look for Jacob sorber channel, it has some interesting things, also look for project base tutorials on c.
@@MathCoreMan okay thank you!
This is exactly what I've been trying to convey to everyone. I've spent 1 incredibly difficult year learning Android as a new dev. Never touched code before.
It is the worst feeling in the world. I cannot convey the pain I've been through. This has been the hardest experience by lightyears and I have my masters in Chemistry from Penn. I thought about jumping out of my window everyday. Thankfully I made it through to the other side, have a few apps, one I'm proud of and will likely be employed soon.
A lot of senior devs just say go work on a project and just apply. Yeah fucking right. Pisses me off so much. Its so so so so so so much fucking harder than that. I cant tell you how many 10 hours days were spent staring at a single error trying to fix it that had nothing to even do with coding. It was android studio bullshit. I could talk about this for days but ill leave you with my opinion.
Abstraction is cancer. It will look great in the short term and destroy us in the long term.
It is as simple as working on a project.
Those senior devs are correct.
The difference from your experience is that you went deep from the get-go, you need to start with the basics, at least two months of writing dumb code that has nothing to do with a GUI.
Only after understanding the basics should you dive deeper.
If I went to swim in the middle of the ocean I'd probably die.
But if you ask anyone how to swim, they will just tell you to try it.
Swimming in a swimming pool VS swimming in the middle of the Pacific ocean is hella different.
You sir tried to swim in waters that you weren't ready for yet.
Alas, you probably have learnt all the basics by now, but at what cost?
PS: staring at errors is a pain I have also experienced, when that happens my advice is to leave everything you are doing and take a walk
Rid your mind from all the frustration.
Try to find a different approach, maybe what you are trying to do is actually dumb and not a great way of doing it.
Try breaking down what you want to accomplish into small steps.
Complex logic is only necessary for complex problems, 80% of the time you just need simple solutions
I'm a web dev but a few years ago I tried to dabble with android studio, what a nightmare, I feel your pain!
Abstraction is great, I started learning to code as a kid with scratch and it taught me the basics of logical reasoning in a fun way before I graduated to a real language.
Those senior devs be like: “gitgud” 🗿
As someone that hasn't been developing for too long (only 1 year) i agree that the levels of abstraction can be overwhelming at first but it depends on what you want to learn, i started learning C to learn basic data structures, control structures, memory, etc, and after that i started with PHP (by my university choices) so i actually was understanding what i was doing but when i started learning JavaScript and JS Frameworks i definitely felt what you are talking about, i just didn't get what i was doing when i wrote over an abstraction of an abstraction i just knew that it worked, but the problems start when you get a bug and you literally cannot debugged because you don't know what you wrote, you just know that the function that you are using is not working and that is probably the worst part at least for me, and i think this is specially frustrating in JavaScript and interpreted languages because you don't have a compiler to aid you.
There's a really resource called Just JavaScript that helps you understand JavaScript in an abstract perspective
Can confirm, I started casually learning in mid-2020 and the amount of complexity that's been introduced into the web dev space since then has been completely insane, and it doesn't help that every course is HTML, CSS, and the bare minimum amount of JS required to jump into React. If I was starting over from scratch I'd do CS50 first to get a better understanding of programming in general.
I started way, way earlier than that, and all the web craze insanity that has taken over the field has driven me out of development, totally.
The fact that the industry now consits of a majority of people who don't know the fundamentals of how computers actually work doesn't help it either.
It really does feel like a lot of time is just spent learning configurations right now.
Docker
CI/CD
Kubernetes
Aws/Azure/whatever
Webpack
Eslint
Tsconfig
Gradle
Whatever classes + yaml files that are responsible for the black magic that is SpringBoot configurations.
Usually configs that you touch rarely enough to forget how they work.
Yeah ikr. Its all retarded autistic bloat soydev bullshit that retards push onto you for zero reason.
Hey thanks for the video.
I personally struggle a lot with being waaay slower than most people from my university and people online regarding coding, wich can be very bad in jobs where speed is more important.
The reason (I think) I am slower is my obsession with wanting to understand the built in tools as much as sensible and code most stuff that could be done with libraries on my own.
I don’t think that my way is the superior way, since it obviously has severe downsides, but I really enjoy programming and learning about computer software exactly this way.
So thank you for encouraging me to see the upsides of my way of doing things a bit more. 🥰
You're a C guy then. Just learn C and stick with it.
In the second semester of Uni, we reimplemented a basic String class in C++. I was so excited, and it looked like magic. Then at the end of the semester they told us about the std library. So that was a surprise.
Long story short, I've gained a lot by learning the fundamentals and not starting by using out of the box libs. I'm quite surprised when experienced engineers don't know how a String works under the hood.
It’s just a dynamic char array, right?
@@snippletrap yep at least in java lol I think
This makes me glad I spent so much time learning as a hobbyist just playing around and learning before doing it professionally.
Same
I remember making my first site back in the good old days of dreamweaver and actionscript. We used to compile those build files locally and sftp them onto the server by hand
That's how I started learning and it wasn't even that long ago.
Its genuinely autistic how people try to predict how their shit scales up and end up bloating their shitty site with random bullshit that dont even matter.
Honestly man I found it way easier to just add on shit and not give af abt making anything more complex than it has to be.
@@honkhonk8009 serverless was originally meant for single functions with high traffic. Building your whole application like that before you know what the scale needs are seems like premature optimization to me
@@honkhonk8009 totally agree. Build the minimal shit to make it work. Dont build a skyscraper when all you need is a wooden hut
I'm a first year university student and I absolutely agree with this. In high school we also went over XAMPP and MySQL, and even though now I believe I have a good grasp on low level concepts, all the tooling and frameworks being used for production projects - especially web apps really scares me. I'd just like to stay here and focus on simple things rather than serverless blockchain nosql microservices edge computing [other buzzwords].
Love that you don't know if it's good or bad. That's that open-minded programmer mind.
I try not to speak in absolutes. I've discovered myself being wrong one too many times
Yeah this is really great :)
@@ThePrimeTimeagen thats why we love you my g
@@ThePrimeTimeagen top g right there
The answer is yes. There is nuance and whether anything is "good" or "bad" depends on the context.
I'm at 2.5 years now. I learned vanilla everything...including CRA, vanilla webpack deployment. I'm grateful that i have that foundation and can use it at any point but I do feel like I learned sooo much slower than others who instantly hopped onto react. I didn't move on to react until after year of HTML CSS and JS. I was learning Firebase right when it switched to V9 and the lack of resources to understand the changes really hampered my ability to get DB apps working.
I second this. As a developer without IT background, i always feel like an impostor. Thanks to abstractions, i can survive. But this year, i took a career break and start learning Rust from scratch. It’s hard but i think i’ll manage it somehow.
I'm so glad that I've started out with C++ and learned DSA with it. Dealing with pointers and other stuff was educational. Building my own vector(dynamic list), linked lists, hash maps and etc., it was super interesting!
I'm glad I'm learning these basics in college. I am making a website in my spare time with: Django, HTML, vanila js, postgrest and Docker, hosted on a VPS. I choose this stack because as you discripeted, I understand how everything really works. What the database is doing, what the browser does, how everything communicates over the internet, how the internet protocol works. This is the reason why I really wanted to get a formal education. I kinda get the best of both worlds. New devs are not doomed. here in Europe anyway.
I made my first website ever a few months ago for my DJ business using React. Put like 60 hours or more into it going to school full time and working a non-CS job. I’m now so excited to make websites using plain ole HTML and CSS and start back at the basics 😂
Totally agree. I started programming, where all the new fancy stuff was like science fiction. I had the opportunity to "grew up" with technology. The new generation has no idea how stuff works. When an application crashes, they are often helpless, when the reason is not in the code, but in the environment where the application is run.
The bootcamp I went through taught programming from the ground up - not memory management or anything, but "this is how JavaScript works, these are your data structures, this is the event loop, this is garbage collection" and only later moved on to the UI, then to jQuery, then to Angular and finally React (which was brand new at the time). I think that's a good compromise, because new devs don't necessarily need to know what a memory address even is, at least not at first. Of course in some ecosystems (looking at .NET) they can coast by without ever learning anything besides their main language and their IDE, but in the web world it really IS essential to have the foundations first, because you're probably going to have to use React, Vue, Angular, Vite, Webpack, Lodash, Ramda, RX, all these things (same goes for the DevOps world, where it's arguably even worse).
Learning how to write in assembly language on the TRS-80 Color computer (because BASIC was too slow for high-res graphics) laid down a solid foundation that later made learning C, pointers, and data structures pretty easy. IMO, once you know C, you can learn ANY other procedural language.
"High-res" LOL. (I learned in that era too. No offence intended.)
this is spot on. I'm five years into professional programming and feel so behind in the fundamentals of how computers work
it all works the same way. Its just different skins for zero reason.
been loving the uploads on this channel so far, keep it up!
Back when I started programming, it was labeled as a nerd's activity. Then the average joe found out it was lucrative and everyone wanted to program. Then some brilliant folks started promising to non-nerds that they could become a software developer in just a year and everyone wanted to make the promised 6-figure salaries. And here we are now. Same story for machine learning btw.
true
Granted I am a nerd, but I did become an effective front end dev in a year. Could've gotten a job already too if I was willing to deal with a toxic boss, but I just said fuck it. Have an interview coming up so no problem.
Gatekeeping is a good thing (to an extent), back in the day it used to be called "having higher standards"
I went from not knowing what a variable is to having a job in a year at the age of 35. Now I can build any website you wish with a high code quality, no div pollution, small bundle size, high lighthouse score etc (and that is rare, most websites suffer from low quality code).
But I got lucky I learned JavaScript extensively first, manipulating DOM Elements with QuerySelector, setting innerHTML, appendChild etc before I moved on to React. Lucky because I just happened to have learned it, I just learned everything I came across.
WHY DO I HAVE TO BE BORN SO LATE.
Iv been coding in Arduino and got called a nerd for it ever since elementary. Now its popular??
Same shit with ML. Didnt know the math so I didn't go into it, but now all of a sudden its fucking popular, and people are forcing it down my throat.
this first video where I agree 100% with you. Everyone learns "React" but they do not how to build "React"
hio! gotem
I also started with webdev around 2005-2006 but didn't really go professional until last year.
It used to be a completely different arena back in the day, where you could go far with just HTML and CSS, without having to learn so much to have a functional website that was up to standards.
It's no wonder why the web developer role have evolved into so many sub roles over the last 15 years, because it's simply too much for one developer these days.
I think it's sad, because as you mentioned in the video; The new developers never get the chance to build that foundational understanding like we did back in the day, because they are expected to know so many things as a basic requirement that there's not really any time (or need) to actually understand it if it just works.
wtf why took you so loong? my friend just get a dev job in 4 months
@@kasdimfer5156 Well to be fair, it's not like I've been trying to get a dev job back then, especially since I was still a teenager.
It was more of a hobby thing until last year when I finally thought it would be nice to do it for a living.
@@Lundito What have you been doing all this time then?
That's why I start teaching the old vanilla Javascript concepts first.
You gotta understand the basics before going to reactjs, angular or nextjs and others.
You got to know what variables, functions, classes, DOM Manipulation, http methods, prototype functions, runtime execution etc.😊
This is honestly all eye-opening to me I learned from Lua with Roblox, and I learned all of the reasons why good practices were good and a ton about why understanding the environment that your code runs in is so important as well
I'm happy I sticked to learning C/C++/GPU Programming. And the best: out of pure interest and passion.
Because this "learn this to get a job is a curse". People will follow the buzz and do Python/JS, without knowing Maths, what Computer Programming really is, etc.
Nah, thanks.
well considering the junior positions nowdays require knowledge of all types of frameworks and languages, everyone just learns a little bit about everything but never truly delve deeper into them. I know cause i am one of them.
I'm about a year in to learning. Started out by learning python and realized it wasn't very easy to start a career with just that, so I started learning web dev. I've been drawn towards working with static site generators (Hugo in particular) because it's simple enough that I can actually wrap my head around what my site is doing. Getting into the more complex stuff is quite daunting because I get uncomfy when I don't understand the under-the-hood.
I’ve been trying to learn to program for a year now and honestly I’m just so confused. I need to learn the code behind the code behind the code, and only then will I see I can be a competent developer. Learning react doesn’t make sense anymore. Ah, it’s tough.
I had this problem untill I went to college and started watching Luke Smith.
Then I realized its all bullshit at the end of the day, and that the simpler basic languages/tools, are the faster ones.
Old software engineers: CPU instruction set manual and “the C programming language”
New software engineers: every week a new framework
Now its gone full circle. Everybodys writing in C and Rust cus its fashionable, and everybody calling it bullshit.
I see this too often. When I started learning software dev in my free time and got into web dev it was all simple since I was learning the foundations and slowly grasping the concepts of how programming works, but when I tried to learn React the first time about 3 years ago, I was confused, I knew what it did and kinda understood how to use it, but my confusion stemmed from how it worked, I couldn’t conceptualize solutions since I was stuck with a lack of understanding of the inner workings which made me give learning react and instead I just stuck to using vanilla JS for all my projects. Now that I understand software more and beginning to learn react again it makes way more sense as I am slowly understand the inner workings of the library which helps me conceptualize ways on how to use it.
I'm definitely in the camp that understanding the basics (e.g. Java) first is better than starting with something higher level.
The thing is, new programmers want to feel like they're accomplishing something, which is hard to do when you teach them basic first. Oh you made a linked list to store numbers? That's cool, I wrote 10 lines of JS (that depend on 13,000 files I can't see) to build an entire website!
Abstracting away the lower-level elements makes it difficult to understand what's going on behind the scenes and I think leads to more inefficient code than if you go the other way around, even if it does feel better to make "finished products" as your first projects.
I also personally find high-level less interesting, but that's a separate matter.
Colleges got stuck into teaching the base then outdated tech. Online learning is stuck teaching you only up-to-date tech.
This is why I actively seek out the "harder" ways of learning things. I feel like my generation of developers is getting ruined by simplicity. There are GUIs for EVERYTHING. If pressing the button on the GUI doesn't do the expected behaviour, then the dev doesn't know how to fix it. I know because I've been there and that's why I'm so adamant on working with terminals and looking away from the black boxes. It feels like we're being given shortcuts before knowing how or why we should use them and it's ultimately killing our learning experience.
That being said, I do think people who want to exist outside of the world of black boxes will look for it. The tough part there is making them aware that it exists. Finding what to look for is the hardest thing about learning right now. The information is all out there, but knowing where to look is a skill in and of itself.
This abstraction and increased complexity hit home for me as someone working as a pentester in a consulting role. I'm expected to become an expert in every framework, infrastructure model, new hacking technique, every mitigation strategy, develop cutting-edge exploits, write code, build servers, and get domain admin or dump the DB all before lunch.
Yeah, but the issue is you can spend time on gaining solid fundamentals (DS, Algos, disk, memory, OS, networking, etc), then you get interview questions about some specific solution on AWS, or optimizing Postgres and Hadoop, Kafka, HA K8s. Binary search trees and hash map days were the easy days because they're self-contained concepts without many prerequisites. You really need to be a good operator of the most used solutions nowadays if you want to be considered. Linked lists are as distant a concept as assembly language. Interviews today are like npm_modules, they come with a boatload of dependencies, you either install them or you can't run.
I've always been so curious about learning why and how things works since I got into web development.
The major issue I've faced is figuring out the right approach to doing this.
The internet full of information, roadmaps and all that but none of that really help, I wish i could sit with a really experienced senior developer and get an insight into how he/she got to that point and work my way up using their advice and if possible guidance.
Thats why ChatGPT is so goated honestly.
Removes all the retarded bloat from the internet.
Googles search algo has been infested for years by sponsorships and shit.
I really like the fact that if I want to learn something, I can ask a simple fucking question and GET A SIMPLE FUCKING ANSWER.
I'm a new dev and don't have a CS degree. It isn't that I'm not interested in the foundations, I would love to learn the nitty-gritty topics that are closer to the metal, but it doesn't feel like that will help with getting my first dev job. From my very limited exposure, it's more about learning how to use the tools than it is about learning how/why they work (at least initially).
When I get hired, gain the source of income, and don't have to worry as much about paying the bills, then you better believe I'd love to go back and dig into the 'why' of everything. But until then, I admit I feel like I will need to be the person that uses React but doesn't know much about the things behind the scenes.
Disclaimer: I admit that I am aware I'm probably going about things in the wrong order. Tbh most of my life's journey has been the bass-ackwards route so that isn't out of character lol
It depends, if you want a basic website, do you need to learn data structures and understand how memory is allocated? Not really, but something more complex like connecting to a database and creating an API, knowing what a port is and knowing how IP works (generally, like addresses, localhost, etc) helps a ton
I say this because in my college, many people just wanted to pass, which makes them not learn, and there's a tangible difference between those people and people who were interested
YES. This. That's why. At first - feeling stable with your feet, then going little back
Por esto es que la industria se estancara y lo que veiamos como un camino de inovaciones se va a ala ***
@@PeidosFTW Makes sense. That type of stuff interests me and I watch Prime's streams/YT uploads because I want to learn the more in-depth topics, but most of my effort is going towards learning and using the tools that job listings are asking for. I know money should never be the main reason, and overall it isn't for me, but I'd be lying if I said it wasn't up there in my priorities because being able to make rent is awfully important lol.
@@headlights-go-up it's totally reasonable to think about the money, you have to live! As long as your approach to learning works and you understand what you're doing, it's totally reasonable
One of my favorites feelings with code is when i read again something that i didnt understood the first time, but that i do understand now. It does takes a good while to make fancy and interesting things
The way you're talking about this is how I imagine skilled craftsmen watching unskilled workers piling into the factories built by the skilled workers talked.
I'm an embedded systems engineer, and learning react/web development in my free time, and it's so strange. I'm so used to being able to understand what's happening in my system down to an electrical signal level, but with react, I'm looking for documentation on how the DOM works, and everything I seem to run across is "Yes, the Dom works. Use the Dom". Or other things like that, where I'd love to have a better understanding of low-level implementation of these things, but I don't think most frameworks have any interest in exposing that stuff from their abstractions.
That’s the problem with Abstractions.
Makes it easier to build something but harder to understand how it works.
Just finished my second year of training to become a SWE and the main challenge has been and still is that I got started working on webservers and going fulltime into TypeScript and microservices. I had school next to it where we got taught Java and Algorithm fundamentals, but it was pretty rough to teach myself about nodejs and javascript quirks, message queues and all that while still having only a very basic understanding of how processors, memory management and websockets work. I like my employer, they are doing their best but when I feel like I suck I have to remind myself of the insane complexity of the stuff I'm trying to do. It took a lot of long nights doing extra work on many of the fundamentals but I think I'm starting to get a better grip on the bigger picture. Thanks for seeing us dumbdumbs ;D
I'm glad my university covers the fundamentals he mentioned.....I thought we were behind....now I understand importancy of those stuff
I'm on month 3 of my first real web dev job with a major ecommerce company. I feel semi-comfortable with frontend stuff, I can follow along and (maybe) handle some of the api calls to the backend.... But lord help me when it comes to the backend!! An ancient (2015?) ecommerce platform written in Java, which I know not!! I'm not unfamiliar with servers and the general ideas, but the level of abstraction I work at vs the reality of what goes on in that beast are, as you said, insane. Thankfully I built a website with Wordpress 13 years ago, so I learned some php and server-related things that are useful now.
and I thought everyone uses the latest tech and updates their code daily to match with the latest stack update
In my opinion, any developer before delivering any software professionally should first get an idea of what's exactly going on by learning:
- Low level/systems/high performance (memory, processors, sys calls, threads...)
- Compilers and Interpretation
- Data Structures and Algorithms
- Networking and common protocols (e.g. HTTP)
- Tooling (os, git, docket, editors ...)
more magic means more confusion and therefore more bugs and lower quality
My first code was in early 80s, Z80 assembler on ZX Spectrum 48K. Had to be careful a d save it to a tape frequently, so bugs dont just make all my work disaapear. :). So, yes, it's "differentl" nowdays :) But it's been and still is nothing but fun. I think that's the biggest difference. Today it's just work for so many, and back then it was pure enthusiasm and love
Completely agree on the webdev part. Started webdev just bcoz wanted to make something. Then got introduced to the real under the hood working. Didn't even knew how js engine works.
Major issue is that introduction to DSA is given in form of leetcode which is so terrible. Do this and you'll get the job. How can someone learn in such environment
The abstraction is good for experienced devs...new devs should try top bottom approach these days while learning new tech just try to do avoid libraries and try to implement natively...that will take time and feels very slow..but builds good foundation
Jeez I didnt realise it was so hard today to get a start.
I did some basic webdev 15 years ago with js and php, which got me into an SEO web dev job.
Doing really well now, but yes, finding people that can cope with frameworks is not easy.
I don't even know what's worth learning anymore
Omg dude thank you for validating my thoughts about how crazy web dev is. Sometimes I think I’m wrong and that there is something wrong with my thinking… I just never got on board with all these layers and abstractions and made up concepts that are now accepted as fact. It’s a hype scene and “devs” buy whatever is thrown at them . These days I’m much more happy and comfortable coding low level embedded stuff with rust! I never felt comfortable learning abstract higher level development like react. My mind just doesn’t work that way, I just need to KNOW how it works from bare metal up. But it seems most people aren’t the same and run with how to do things rather than having a true desire to understand how it works
Dont let the retards fool you into thinking your "wrong" for the way you think.
Societal leeches thrive on fooling people into beleiving their a necessary expense.
Just about finished with Codecademy full stack dev course, had a decent background in front end, project management and dev ops, I’d say I knew about 40% of the course pretty well. Still took me about 5 months full time. It’s a lot.
Took a Bootcamp over the pandemic. Fundamentals and leaned mostly on React near the end since it made everything easier, personally.
Got my first tech job as the only developer in the company. Last developer quit and left an old application with little to no documentation running everything off of SSIS packages. No training. No support. Just spaghetti code and error messages. I’m miserable and haven’t made progress in weeks.
yeah, reality vs ideal is SOOO different.
Self taught web developer here. Can confirm it’s been tough. Started getting grey hairs at my first job. But here we are today still trucking
I'm 18, started coding at 14-15 by making some platformers in Godot, and I remember really, really struggling to make anything with it since I just jumped straight into it, trying to learn the specifications of the engine instead of learning the principles of programming. I then went on to take C# around 15-16 and there I really learned how to program, start from the basic concepts like variables and functions, to data types and data structures, to OOP, and so on. Only when I was 17, 2 years after starting, did I go to Web dev and learn JS and React for a school project, and then I already had, what I believe to be, a strong foundation of programming logic and concepts.
it's not just web dev. It seems as though all throughout software development things have been getting increasingly complex and intricate as people metaphorically evolve from assembly to C and to higher complexities and abstractions built ontop of the fundamentals. I'm much more interested in low level / high performance software, but I too started with java. I was and am still a Minecraft fanatic and writing Java mods and peering the source code was my big introduction into the world of code. Isn't it crazy that my starting point was already ontop of the JVM??? I had no idea how pointers worked whatsoever, had no sense of the flow of data, didn't know what was actually happening when my variables were static or not, but I was writing Futures and BiConsumers or whatever it is. Over the past year or two I have been basically back-tracking my way down, trying to get a sense for what's going on in the hardware when the code executes, but no matter how hard I try I still find myself completely unaware of how basics work. I'm grateful it all exists, but I wish I had been born into C.
I feel that sometimes, I have been a dev for two years now and often find myself realising that I know something works and not understanding why
I started 2 years ago and let me tell you that I cannot use abstraction and sleep alright at night not knowing what's going on behind the scenes so thats been a rough 2 year
I can imagine. Lots of investigate
Trying to find my first direct hire junior job right now. Took time off after bootcamp in 2020 cause I was burnt out and it kinda sucks because I feel like I might've missed a better window to apply to things. Now I do contracted work for startups here and there and the support I get while trying to learn is awful. Teaching myself complex new tools, trying to get better at react, but having to context switch to angular for the first time. Meanwhile applying to jobs that I feel like don't value these experiences I've gone out to try to get. It's really fucked up right now and I hate it. Doing coding bootcamp and then going off to try to get experience where I can so I can have a chance of getting phone screens at least is harder than getting my two degrees in undergrad.
Back when I was learning programming people talked about not knowing assembly language as not knowing the fundamentals.
Web development today looks like a hundred different scripting tools used to make the same generic looking and feeling websites that could've been made with LAMP and then a rotation of interns could maintain. If you want to do more meta programming, web-dev is definitely not the way in the current climate
Ok, so, my experience with this in webdev is that I started learning fundamentals (not even deep, just how memory works, a little bit of C and then straight to the web trio trying to understand as much deeply as possible the why does it do what it does) and on my first production job my peers that run circles around me in angular and react were absolutely mistified at things I could do just by understanding html, css, and js. Granted, i'm just a simple FE dev but at this day I get to train jrs that absolutely destroy me on React, but literally cannot work on anything else because they don't know if that's even possible
This is EXACTLY what I'm going through right now. It's extremely hard to get your head around some of those concepts like metaclasses, factories etc when you're supposed to be already developing apps in the web. Sometimes I even envy the programmers of the 90s, they had to deal with math rather than abstractions. My only hope here is AI
I taught myself how to code as a kid, and did it on the side as a hobby for a very long time before trying to make a career switch. Holy shit I had no idea what I was in for.
Unironically, I think I had a harder time picking up the ecosystem and modern web development pipeline than I would have had if I was coming from a blank slate with no prior C++ / C# / Pascal experience. I had my foundation, and I could see my destination, but I kept hitting this weird roadblock where it was like "YES BUT WHERE DOES WHAT I KNOW LEAD INTO THAT STUFF?"
And it was just... crickets. Because coming from a lower-level background and trying to get into web dev is a strange limbo where you just don't have the patience to sit through countless hours of tutorials about stuff you already know inside out just to skim off the new material, but the 'expert material' assumes a certain level of familiarity with the thing you're trying to learn.
Even then, the 'magical leap' between what I understood and what I was doing is so poorly communicated that I felt like I didn't understand anything despite being able to crack on with the work. It reminded me of being in school again; no matter how much my teacher talked at me about the calculations we needed to do on the electron shells in Chemistry or some shit, despite being able to go through the motions, the information I needed to grasp what was actually happening was locked away behind next year's Physics DLC, so it kept falling right outta my brain.
Currently learning the foundations of programming in my school and only about a year in are they introducing frameworks and other abstractions. It feels like magic because even though it's syntactically harder I feel like I'm writing cheat codes because prior we manually built everything hard coded.
I couldn't imagine doing it the other way. I would be so lost. It's like teaching those horrible common core math "techniques" instead of just teaching how the arithmetic actually works.
So true
It's the same in SRE/Operations. We've got people who are trying to get into cloud/server-less design, without knowledge of DNS, domains, operating systems, firewalls or any of the things learned as a sysadmin.
Government's hiring. All those game designers are programing missiles now.
From the standpoint of someone who actually worked during the pure "Wintel" days, I can imagine your frustration. All of the above but e.g. for an obscure IDE that actually uses a specialised language that actually sits on top of the WINAPI that in turn through Win shenanigans almost manages to connect to a database and then you have to fetch data and show them and allow the user to do their CRUD and data manipulation, where a loose window handle can take down the whole OS (because of course it can) and where memory leaks are more common than rust compiler borrow checker errors, where you had to have X,Y,Z runtime on the machine, for your language's runtime to run, for your application to run and then hope that nothing blows up.
People would "know" how to display data on a ready-made visual control, and if you asked them to implement the most trivial of customization (e.g. allow for clicking on a header to sort data, they short circuited).
How we managed to actually make things work, I sometimes wonder.
I learned programming in both way. I started my learning path from the foundation and at the end I spent a lot of my time dealing with React stuff... To be honest I'm really fascinated by the beauty of code you fully understand. But at the end we all need stuff quickly then I started to appreciate frameworks that solve my problems quicker than I'd be. They are just two different way of dealing with the problem: the one who crafts all the pieces and knows what they do, the one who puts the pieces together.
Agreed. I think we can look at how other subjects are taught. We teach math by teaching the most basic math operations and fundamental knowledge, then building on that knowledge to cover each new idea one at a time. First, you learn to count, then you learn addition. Then you learn that multiplication is just repeated addition. Then you learn that exponents are just repeated multiplication. Then, eventually, you learn how to take those basic functions and start combining them in interesting ways to accomplish powerful high level challenges. But it all starts with the fundamentals. Basically every other subject is taught the same way. Start by learning the fundamentals, then build on that knowledge to slowly learn more advanced topics. Most college courses on software development do the same thing. Start with programming 101, then operating systems, and data structures, and networking, etc.
But anyone who didn't take a formal software development course often ended up learning subjects in an inverted way. Most people think about programming like learning to play music. They just pick up an instrument and start playing around, before understanding how sound works, or before learning about harmonies, or before learning about tempo. But if you're going to play in an orchestra, or play music professionally, you really do need to learn your fundamentals. Not because fundamentals make it easier to pluck the strings on a guitar, but because fundamentals help you assemble those single notes into a compelling song. It's the same with programming. You need a solid foundation of the basics. Not because you can't get things done, but because a good understanding of fundamentals will help you quickly come up with good solutions to challenging problems, and those same fundamentals will help you debug complex systems and get things done much quicker than someone who doesn't have that same basic knowledge.
I think it's fine for people to slowly pick up programming as a hobby, and not end up ever learning the advanced topics. If someone is a hobbyist, it's fine to not dedicate your career to learning everything. But if you're going to make a career in programming, I definitely think you should start with C and operating systems. That's the most basic stuff, and knowledge of how to manipulate memory and manage operating systems is critical to understanding all of programming. Once you understand how things are done manually in C, you can understand how nearly all of the high level software systems are built. I've been able to quickly assimilate new concepts because I can understand them in raw hardware terms. That's the fundamentals. If you're going to have a career building software systems, you really do need those fundamentals.
I am so burnt out on programming that I literally never want to look at a computer screen more than I absolutely have to ever again.
I deeply regret my choice of major because, while I initially did enjoy programming and problem solving, the never-ending cascade of reinventing the wheel and being forced to learn all these useless layers of abstraction have made me despise the entire industry and, honestly, tech in general.
I want to juat get away from tech and live on a small farm where I can actually live a real life, not be a stooge stuck to my desk, pasting together googled solutions for 12 hours for some product that I dont give a flying f*ck about and is probably actively making the world a worse place.
F*ck software development, modern tech, and the entire corporate culture.
I look forward to the day I never have to interact with any of it ever again.
Quick story: I'm not primarily a game developer, I'm an artist but to realise my ideas I've learned how to use unreal engine really well. My challenge now is working backwards from their blueprint and shader systems to understand the fundamentals. Essentially using blocks of code hidden behind a node graphic, but now reading them in c++ to see how the nodes are actually constructed. I'm backing this up with studying gpu gems and a beginners book on c++ to really try and understand. You're right about the levels of abstraction, it's very complicated to me but I think the more I test myself the more I'll get it.
I’m almost 2 years into my career having switched careers with the help of a coding bootcamp. I find myself looking for examples and materials about learning fundamentals, because often I don’t know the why to what I am doing. I know how and what, but that “why” chips away at me. I am very happy with my route and I don’t feel like I don’t have the information to properly do my job, but I’m curious what that might look like at other companies and how it might affect me had I gone a traditional CS degree / concepts.
For reference, we use the MERN stack with TypeScript. I work primarily back end and we have a tool called Inversify which uses IOC and DI (much more robust than what I learned at bootcamp)
And yet, tech interviews usually have little to do with these subjects. So there's another "dimension" that software engineers are expected to uphold just to even get a job. It gets exhausting.
True. At my school we have a class called webdev where we learn Vue and Laravel. We don't have classes about html, css, javascript and php anymore. They just ditched them and now we are straight into full stack.