When I try to learn about topics that I'm unfamiliar with, the hardest information to find is "Why is X important?" and "What is the most important thing to know about X?"
With those in hand, I'd be able to determine if a deep dive into the topic is useful for me or not.
I think that's the point: we all know (most of) the gist of it. But the practical experience isn't something you can prep for in advance. You never know what tech you'll need to use in the real world. The "deep dive" comes when you get hired and the employer needs that tech. I'm not sure the employer gets that.
As of 2014, relational databases.
https://mobile.twitter.com/ID_AA_Carmack/status/457916010234...
Made me feel less bad about it :)
Vim or Emacs IIRC.
My background is video games. I specialize in real-time 3D applications. I think web tech is an overcomplicated embarrassment of cruft built on cruft built on cruft.
Programming is a wide and diverse field. Webdev is the overwhelming majority of programming jobs. But you can have a very successful career not knowing _any_ of that stuff.
People do just enough to get by and "get things done," which always looks great at the time it happens. And then things break, and no one knows why because no one has the depth of knowledge to investigate it. But it has to be fixed, so typically one or two people in the team are assigned to it and are miserable for days or weeks while they painstakingly try and learn about the things they should've known in the first place, while at the same time try and fix a system under a lot of pressure from management.
I wish the software industry rewarded knowledge, correctness and excellence rather than speed of execution.
There are way too many things involved in a software system these days for people to know all of it. We shouldn't expected people to be highly knowledgeable about all of a programming language, multiple frameworks, libraries, cloud providers, CI/CD, security, and who knows what else. Instead, those should be specializations and teams should be composed of multiple specialists.
I'm well aware that what I'm saying is a pipe dream. The industry at large is fine with the idea of deploying broken things and patching them later, no matter the cost to the health of engineers, so it's not gonna change anytime soon.
Besides that, a deep dive into operating systems (yes, that means to get rid of MacOS if you use it) will give you a solid foundation to understand networking, containers and even more.
Does it also mean we all need to learn how to design integrated circuits?
https://overreacted.io/the-elements-of-ui-engineering/
Reading it I feel that creative problem solving is more important than simply knowing stuff. I wonder if knowing too much stuff is actually detrimental to exploring new ideas and trying them out.
And nothing of value is lost.
1. That took a lot of futzing around.
2. But way less futzing around than I expected for a fully cross-platform application.
I still think the idea of Electron (using modern web technologies to develop applications) has merit. It just needs a better implementation (i.e use native webviews rather than shipping an entire browser.)
He's a library designer and is working with a team maintaining and updating one of the most popular Javascript libraries in the world. He has a very deep background in that language which is one of the most important skills for his role.
I don't blame him for not knowing some of those things you listed more deeply. There's only so many hours a day to dig deep into a wide range of material. You still have to spend time going into other material that might be more relevant to the day to day including testing, managing people, communication with team members, planning, etc. Yeah sure I'd love to be more knowledgeable about CORS or networking, but I also want to be much stronger in Javascript, the JS library I'm working on, design patterns, deployment, etc.
Lastly, I'd rather be in Abramov's shoes where my work profoundly influenced web development than be all over the place with my 'expertise' and not actually be all that impactful with my time.
I’d say he built actual products for the web just fine.
But similarly, he might well know these things to an above-average level, and just think that he doesn't.
The guy is a specialist. That's like asking Lionel Messi to also be good at goalkeeping.
You should take a good look at who posted the article.
Fundamentally, who he is and what he's done in the community is the context of the blog. Without understanding that, you miss the entire point.
From the comments it appears this person has done some significant work in YetAnotherJavaScriptFramework.
Boasting that: Fuzzy on the details of how TCP/IP works (hello web developer, read a book!), does not understand order complexity specifically or algorithms in general - as one commenter pointed out - no wonder JS front ends are such shit if this is the level of intellectual heft that the authors have. Not knowing modern CSS - how can this person possibly work in any sort of cutting edge web development and not know about that?....
Specialisation is OK, but ignoring the general knowledge of how computing works, and then going on to write software used in people's critical systems is irresponsible.
Buy some books. Read them. Understand. It is not hard. But, yes, reading is harder than writing, listening is harder than talking, learning is harder than making stuff up and reinventing the wheel....
Yes. No wonder the state of web front ends.
I don't think it was meant to impress. On the contrary I think the overarching point of the whole article was that it's okay to not know things outside of your domain that may seem trivial to other CS folks.
> Not knowing modern CSS - how can this person possibly work in any sort of cutting edge web development and not know about that?
Well, I don't know how he does it anymore than you do. But it looks like he's still working on cutting edge web development and it seems to be working out, so my takeaway is that he doesn't need to know about it plain and simple.
If the knowledge is not relevant or applicable to what you are working on, what is the problem?
Knowing that things exist is more important than in-depth knowledge of those things.
The vast majority of web developers I've worked with don't know TCP, and I'd count myself in that group too.
Now I'm not saying he doesn't know how to program. I'm just saying it's very interesting to me how little you actually have to specialize in to make it in this field. What my internship has taught me, it really makes me feel secure job wise knowing I won't have difficulty being employed in the areas I know. I hate sounding so cocky but when I first started schooling again geared toward comp sci, I thought programmers knew just absurd amounts of stuff. Now I've found, they typically are just the average tech savvy individuals that weren't afraid to poke around in an OS.
During my last job hunt three years ago, I had interviews every week. On my current job hunt, I'm having problems booking just one.
There will always be a combination of factors that can make your job search easier or harder.
> Experienced developers have valuable expertise despite knowledge gaps
contributes heavily to
> learning technologies when I need them
which can be very valuable.
If people you know do not know much, then the people you know do not know much, there are also people you do not know.
I agree it’s ok to not program C or understand network/transport layer in depth. but things like unix shell basics, python, micro services, docker - these are all fundamentals I assume everyone (backend, frontend, mobile, or game engine) has working understanding of in order to be a proficient developer today.
nice that the author recognizes the areas they lack, and should commit to learning in 2021. happy to give good recommendations on books or online classes.
more curious to see this list authored from someone with more diverse experience.