I would not be surprised if even Professional Web Developers cant do it. Especially if you include deployment.
This isn't the old days of FTP, Perl or PHP anymore. There are too much information I cant memorise every single bit of it. And I dont think you should either. Especially in the age of Google. My memory capacity has its limit, and there are things I just decide it is not important enough to memorise when I could easily search for it. ( Or if I am relying on Heroku )
I have long thought of Directing a video, where we have famous Developers, or developers from a pieces of software that normal people would have heard of, filming them doing work, looking up silly things in Google. Starring at the screen for hours and absolutely dont have a clue what the code is doing. Not typing any code for hours. Sort of like Reality TV shows for Programmers.
Hollywood Movies and Anime has made the perception that proper Software programmers should be super fast touch typist and typing code with insane speed. It makes people uneasy when they learn programming. It turns out they have to constantly look up some manual, googling, copy and pasting and for most of the time not typing anything. They thought they are just not any good at it and many simply gave up.
The reality is, hopefully the video would show, even top level programmers dont know everything. And it is perfectly normal to look things up.
My last interview: the interviewers said I was the only candidate who didn't Google any syntax or articles after being given a small 60 min development task from scratch. I was applying for a senior dev role and if I couldn't deliver a tiny web app, I wouldn't hire me either. I could have just solved the task procedurally but I asked if they wanted to see a more OO solution to demo a bit more knowledge. I think back to that time and think how poor my env/tooling was back 5 years ago compared to today. I'm way more powerful now. Version control. Docker up an entire server architecture now with separated proxy, web, db server, env configs, & more. I routinely challenge myself to starting scratch projects to test myself because I rarely work on greenfield projects these days. When I encounter resistance in the workflow, I work to solve the roadblocks. I think this is an important dev exercise that brings alot of satisfaction. Constantly improve your tooling!
I think I would die from boredom if I had your job doing the same thing which I know how to do over and over again. Wouldn't you just automate something like that with a Factory in Java? Somehow my brain works the exact opposite if I already know how to do something without googling it then it's not interesting anymore and I move on to the next thing outside of my comfort zone.
I'm reasonably sure I could write a basic site, make it look as good as I can make things look given my sense of design, without searching.
If I was allowed to look at what I already have on my machine I could even set up a build process for my site. If not allowed then no build process.
But it would probably be pretty slow to write this, depending on how basic the site was, and it would not be as good as if I could look things up when I needed to.
But I wouldn't be able to deploy without searching.
> I'm reasonably sure I could write a basic site, make it look as good as I can make things look given my sense of design, without searching.
That’s cool if true but until you try it you could be fooling yourself. The other thing is that it’s not really a skill that’s valuable in such a connected age, except in contrived scenarios like closed book coding interviews, maybe.
Yeah, so the big problem is every software project has some initial parts you only have to do once and then 99% of the project is just extending and improving the project using the same flow over and over.
I don't see the value of memorizing somethings you just do once.
That said you're right, even the 99% of work still involves a lot of fiddling and sometimes research outside of writing code.
I have been a react developer for 3 years and I don't even know how you set up a react project from scratch since it was already done when I started the job. I assume its pretty easy with lots of info available online though.
Some developers already livestream on YouTube as they program up web apps or other software. George Hotz for example used to livestream on YouTube/twitch. You can find many others.
>I would not be surprised if even Professional Web Developers cant do it. Especially if you include deployment.
I'm pretty sure I could do it depending on our definition of basic web app. With something Rails it's not even really that hard. Rails g scaffold [Model] gets you 95% of the way there.
Using documentation is fine. You aren't going to solder stuff only by eyeballing the component packaging either.
On-line information? That's another question entirely. This would be a more interesting test: can you make a basic webapp (or other type of app representative of your experience) without Internet access?
If you're dealing with an older stack and toolkit, you probably have many books' worth of manuals already installed. Unless you're unlucky and didn't notice the documentation isn't installing along with your tools. Or you're on Windows[0]. You can use them to work out most of the problems you're facing.
Newer tools though? There's this annoying trend of under-documenting things, and relying on people on StackOverflow to fill in the gaps. Or even worse, setting up a Slack/Discord for the project, and getting people to help each other there.
Maybe I'm just old, but when I'm working with computer tools, I prefer to solve the issues myself, instead of chasing around the Internet and talking to people. I also like to be able to continue to work when my Internet dies, or I'm out of range, or the site hosting the docs dies (happens more often than one would expect).
And to answer my own question: yes, I can write basic apps of the type I work on (and bunch of others, including games) without Internet access, as long as you let me use my computer - where I have access to heaps of off-line documentation and lots of prior source code to supplement it.
--
[0] - Someone at MS had the bright idea to ship PowerShell without help for its commands by default, so that the first thing Get-Help tells you is to download the man pages...
> Using documentation is fine. You aren't going to solder stuff only by eyeballing the component packaging either.
> On-line information? That's another question entirely. This would be a more interesting test: can you make a basic webapp (or other type of app representative of your experience) without Internet access?
I would suggest that the type of information is important, rather than the medium. It is not that solving the issue yourself is better than talking to other people. It is a matter of ensuring the validity of the information as well as it's suitability to the task. That is more difficult to do without referencing language or library documentation, and I suspect that it is not being done at all by most of the people who rely upon searching the Internet.
While the quality of books is better (on average) than online information, one still has to be selective. The market is flooded with books that offer shallow explanations or are simply a rehash of what dozens of other books have discussed. Not only does the latter limit the breadth of knowledge, but the nuggets of insight offered by any given author are usually so deeply buried that they are easy to miss. Sometimes it is more productive to scour the Internet because of that.
I've stopped relying on Google to give me reference documentation on searching the function/library name.
I generally go directly to the API reference and do the search there because Google results might not even have it on the first few pages.
I actually get annoyed at being pointed at the StackOverflow question that shares a few keywords with my search, but is completely unrelated otherwise.
I second re docs. VS Intellisense has served me very well for known tech (ASP.NET etc); for new tech I rely on official docs or nutshell style books to be with me. I've created ASPSecurityKit.net [0], that sets up a new web app [1] (API/MVC) with user account related workflows; adding the business features then is easy for me.
In my initial days of programming in school/college, I relied almost entirely on local MSDN library installation (during VB6 days, it used to come in three CDs), to learn VB6 and build apps. With that, I built a multi-lingual word processor, a screen reader and some other nice tools that got me hooked with coding.
It was around 2003-2006 and I used to only search on internet whenever I needed to add something not supported out-of-the-box in VB6 like Win32 APIs etc.
I take a completely opposite view. If I get stuck on something, I go straight to StackOverflow etc to ask for a solution or at least get more information. Then, I can keep tinkering myself or switch to a completely different task. I am far more productive when I leverage The Hive Mind.
Plus, these questions give me a great reference for next year when I am doing something similar but have forgotten the details.
This approach probably works well because I know how things work at a high level; I think it would be disastrous to do this without any real understanding.
> This approach probably works well because I know how things work at a high level; I think it would be disastrous to do this without any real understanding.
I actually interview for this skill specifically. I stress to candidates that they can and should search the web in whatever way they would when tasked with code in real life.
The speed at which someone can process search results and stackoverflow responses to filter out crap and find the solution is the best proxy I've found for developer productivity.
Some people don't search for anything, even after prodding them 3 times that it's 100% fine to search and they definitely won't lose points. They still won't do it, because it's just not how they reason about problems.
Other candidates will immediately identify the problem, search with good queries, quickly navigate through a bunch of sites, find the relevant info, copy/paste, and solve the challenge.
If it's not documentation, I go to my team first. We almost never need outside help for how to solve something. And it gives us another chance to talk about design.
Even if I could, I would not call that an achievement. In programming, we are expected to understand concepts, not memorize documentation of a library. Of course, if you are too specialized working with few libraries/frameworks, you will naturally end up knowing its methods by heart. But that doesn't mean searching things up online is a bad practice. In fact, I believe it is more useful to keep updating yourself from the web on better ways to write some piece of code than what you have memorized from a year back old doc.
Also, eventually, what matters is how you connect the bits and pieces you take from online and integrate them into your software. How you design and shape your software so that's its scalable, optimized and reliable is in your hand and that's what matters the most!
I learned to write java code (structure, basic io (terminal, file, datastructures) blind like in word or notepad and it would run without errors for a google interview; It is not that much you need to know actually but when you learn it once, it lingers around for quite a long time and it gives you a different feeling of confidence that you actually know java (i was writing java code for 6? years before that already so i do know java).
Its very similiar to my personal experience with doing push ups: If you never have done them you don't have any muscles at certain areas; Now after going from 0 to 15 push ups over a few month, i gained a general better physiology on upper body strenge and it still lingers around.
Non of both are critical in a day to day scenario but both experiences were fun/interesting and this base is now here where it was not before.
It brings me, mentally speaking, closer to really get something like java.
I'm not sure the workout analogy really helps. Our body is really good at optimizing movements you do often enough. Do enough push ups, at some point you will become very good at pushing things, do not expect to be good at pulling though. Run 1 km everyday and you will become a great short distance runner, try to run a marathon and you will miserably fail to finish it. Sure, you will get cardio benefits and get healthier overall for the first months, but once the newbie gains stop, training specific skills won't generalize to general ones.
Does education work in a similar fashion? does being very good at solving very specific timed algorithm problems at a whiteboard translate to being a good software engineer overall? If that's all you trained for, you will be just very good at that.
My problem is remembering the syntax of the language I'm in rather than other languages I've learned.
To use your analogy; it gets tricky doing push-ups because my body remembers doing crunches and my knees get in the way.
Better analogy: I'm learning German at the moment, but my brain keeps "helpfully" supplying the French word whenever I'm mentally grepping for German vocab.
Remembering that JS switches need a break statement but Go switches don't - or that JS If statements need the brackets but not the braces, and Go If statements don't need the brackets but do need the braces. This shit trips me up even after years of coding in just JS and Go.
For me it's simply a matter of convenience of searching; even pages with great and comprehensive docs can be hard to search. And the average is so poor that I often don't even bother to check if a particular project actually has a good search feature. If my search takes me to the actual doc page, (and it's good) then all the better!
For me it is often a question of what I am looking for.
If I quickly need to know how to get the last item of a list in yet-another-language, Stack Overflow will provide me an answer in about 2 seconds.
The documentation will certainly provide the answer too, but I'll need to look at several places etc., since the format is just not optimized to answer exactly this question fast.
Does it actually matter if I can? Is using reference material a bad thing?
Edit:
I know the article touches on that idea briefly but my argument would be "of course it doesn't matter".
Sure, I could develop slightly faster with a more encyclopedic memory but I really doubt it would make an observable difference in the long-term.
Most of my time isn't spent referencing libraries or syntax but instead I spend most of my time thinking out the logic and higher level relationships of my code. I suspect that is largely the case of any development even remotely non-trivial.
That's the reason I do algorithmic whiteboard instead of full blown "real world" coding exercises.
I don't care that someone memorized whatever command line syntax to create a new project in whatever framework. That's just rote. Even what we write on the whiteboard I don't expect it to compile. Is it ToString or toString? Can't recall either.
What I care about is that someone can ask the relevant questions, come up with a design and explain what and why they are doing something.
Last interview I had, I was encouraged to google and afterwards, we talked about the resources I sought out and how I used that information. It was a good experience - if it's a part of my job, why not make it a part of the interview?
It's not a problem when you look up the spelling or the order of arguments in the reference.
It's a problem when you search for the solution to every problem with a search engine.
So many answers on the internet are written by absolute beginners, who happened to have the same problem, and then blogged about the solution after spending 5 minutes of googling. Sometimes these answers are alright, but often they are shallow and miss context.
The problem is excacerbated by the fact that 1000s of sites try to get into the top results for programming questions. So you end up with crappy shallow answers, and never learn the underlying details.
And then there's the problem that the more experienced you get, the less you look up answers, so the less you are exposed to sites like Stack Overflow, and the less you contribute to Stack Overflow. So the result is that the least experienced contribute most to the answers on the web.
My preferred solution is to buy books. Find the best book on your topic and read a chapter, and you'll learn more than if you had googled 100 questions.
The downside of books is that it only works for "old" tech. If you want to learn about the hot new Swift UI Declarative Reactive Whatever, your out of luck and you need to scrape together any info you can find from random blog posts...
My preferred solution is to buy books. Find the best book on your topic and read a chapter, and you'll learn more than if you had googled 100 questions.
Books are also written by amateurs a lot of the time, especially if the topic is a bit niche. I've had people from publishers reach out to me to write a book about things based on a single blog post in the past.
> It's a problem when you search for the solution to every problem with a search engine
Why? I'd fire an engineer who took on problems and refused to spend 10 minutes googling around and looking for solutions first.
I have no interest in humoring someone who dismisses the entire internet because it is written by "dumb people." Buying and reading books is how you draw out a project you don't want to work on.
It matters because SWE interviews rely on coding without googling. Maybe we need to change how interviews are done to test people on their Googling skills. For a given coding task, what do they search for? Do they Google for the right terms? Do they converge quickly on the right website to copy from?
SWE interviews (at FAANGs at least) don’t care about library specifics though. As long as you know the syntax and how to write algos/data structures, you can make it through.
There is a strong argument that being good at that isn’t required for most SWEs (including at FAANG), but it is something that having library/framework references doesn’t really help with.
>It matters because SWE interviews rely on coding without googling.
Some (probably most) SWE interviews rely on coding without Googling. However I have been through plenty of interviews in which that wasn't the case. Coincidentally I also find this type of honesty in the interview process is a good indicator of how much I would enjoy working at the company.
A measure of a good developer is how they choose and utilize tools. I really don’t see the benefit of prohibiting developers from using tools that they’d otherwise have complete assess to on the job
Or just give them free reign to use whatever tools they would use in an actual work environment and see what the end results are. Sure makes more sense than seeing how many leetcode problems you memorized.
I mostly agree, but I think there are situations where it does make a difference.
I had a position working on a pretty complicated 3d application in Angular. At times, it felt like I was fighting a war on two fronts, one dealing with Angular complexities and the other dealing with domain complexities. A better understanding of Angular in general would have greatly increased my productivity.
Now, whether or not an increase in team productivity would have really mattered is hard to gauge.
> Does an over-reliance on documentation indicate a lack of critical expertise that will ultimately result in considerably lower job performance?
Technical research is a skill. I love working with teammates who understand how to find, evaluate, and apply proven solutions. Most projects can spare the time to do a reuse trade study before writing something from scratch.
Use (and authoring) of documentation is also a skill. Professionals use documentation to communicate with teammates so projects can scale efficiently.
Let's say Elon starts that colony on Mars and you think "Ima move there and write code for a living." You might have the internet, but its 15 minutes each direction. Nothing interactive works, and while they brought copies of Wikipedia, stack overflow didnt package so easily.
Or more simply, can you write a web app without internet access?
And what if you wanted to go camping on the ocean floor? Can you start a camp fire underwater?
That you can imagine some convoluted scenario where a skill could be employed does not mean it is an efficient use of your time to develop that skill, particularly when that scenario is easily avoidable.
You just need some copy of something like: the way back machine, google cache or archive.is and then do asynchronous mirroring and you are not so far behind.
> Or more simply, can you write a web app without internet access?
I understand what you are trying to say - but what would be the point of that ?
If we were to prepare an essential list of documents that are required to write web applications without access to the net, we would probably be able to cobble it together and make it available offline.
I mean MDN, CanIuse and CssTricks.com would already get you like 90% there.
Vast majority of documentation and even the websites promoting most web related libraries are autogenerated from git. Run a bash script with a bunch of `git clone` on an Earth based server and and ship the disk image, latency be damned.
Dash [1] does package up StackOverflow and a bunch of library docs too.
I was thinking about a situation similar to that in web development. But if there’s no internet, a web application doesn’t make that much sense does it...
I'm thinking back to a real dumb django 'web' frontend I built for a raspberry pi camera project once...
The whole idea was to have a page I could load from a laptop attached to the pi via a ethernet cable for quick debugging and interaction. No external internet needed, and did the job decently.
Something that has dramatically reduced my reliance on outside resources is an editor that can lookup symbol definitions.
I’m using Django and I used to use Sublime Text without any plugins which meant (at the time) it couldn’t automatically show me the definition of a function or object from a library, forcing me to search around for its documentation.
Switching to PyCharm/IntelliJ meant I could now just Command-Click (Ctrl-Click for Linux & Windows I believe) and see the actual definition and logic of the underlying function without having to rely on the online documentation. This of course works recursively, so I can repeat this process again and again up until I eventually reach the core standard library which is in C and isn’t introspective (at this point I can rely on my knowledge or some trial and error to figure out its behavior).
I'd argue that's just having Google-lite built into your IDE.
Personally I think that focusing on how you solve the problem loses sight of the fact that the only important thing is that you can accomplish the mission. If you can't build a basic web app on your own, but you can while salsa dancing w/ a mountain gorilla, I'll pay for your subscription to Spotify so you can stream Havana Kings while tearing up the dance floor w/ a Silverback (must provide own gorilla).
Well, it's not really like having "Google-lite" built in because all of that information is available on your filesystem. It's more like knowing exactly where your site-packages are and being very skilled with grep or some other search tool.
I thought this was a joke until I realized you were serious; I was expecting that as I read further into the list it would get to "-develop without using my hands" and "-develop with my eyes closed" (which are legitimate situations for disabled developers, btw) but which would be absurd for anyone to practice under conventional conditions.
I accidentally find close my eyes while doing things helps.
When I'm running I periodically close my eyes and it helps me breathe a lot.
When I'm programming I often close my eyes if I know what's the current state and what operations I'm going to do for several following steps, until I lose track of them. It helps me to concentrate and recover my sanity.
Terrifyingly, losing your hands or eyes is way more likely than experiencing an Internetless apocalypse, so those would be way more germane software survival skills.
I used to program with 6 thick reference books around me. Has memorizing SDKs, APIs, libraries ever been a thing? Or is this just the daily "everything is bad nowadays" post?
Back in the days i would open an editor and start with <?php...?><html><head>, and it would immediately show at least something in the browser. The rest was open to creativity. Adding libraries was only needed when adding features.
Today on day one i would go: wtf is this Babel thing and how do i configure it so that Angular work together with SASS and is npm compatible with this version of Typescript? Which reactor pattern is flavor of the month and what stupid parameter was needed to make the router work? I hardly even know which files are shipped to the browser anymore after all Webpack preprocessing.
But once you actually have the setup in place, i have to admit the modern experience is a lot more productive and powerful. It's just that every time you have to start a new project or touch anything related to the build-process your soul dies inside. There are too much gunk just built on top and on top of each other, instead of replacing the whole stack, and thanks to leaky abstractions you have to understand at least something throughout every layer of the rotten cake.
There are a lot of scaffolding-scripts available, like Vue-cli, helping you to do all of this but imo they just add even more to the problem, now you got yet another layer of crap to crawl through and it prevents you from actually learning the real layer underneath.
Back in the days of PHP, I could develop web apps without references for the most part, using a simple text editor. It's a pretty similar story with Python too, unless I'm using Pandas, I generally don't use reference material much.
Today with node/angular, I'm generally leaning on Google (well DDG) pretty heavily throughout the day. Web platforms seem substantially more complicated today than they used to be. Then again, maybe the mid-aughts was the golden age of programming.
PHP in fact had one of the first large online dev & documentation communities. A huge chunk of the web was built with multiple tabs of php.net open looking up which string length function to use.
Getting a simple application up and running shouldn't be that difficult without scouring reference guides if it is a thing you do.
The number of times I google how to do the thing I'm supposed to do is relatively low, but the number of times I have to google how to fix something that has come up AFTER I did the thing I was doing is probably 90+% of my googling.
I had an online interview last year, and it was basically me coding up as they supplied the criteria (in PHP).
For the life of me, I couldn't remember how to use array_column, but I knew that was what I needed to use.
They basically said "errr, you could just look it up?" - like, it was obvious that the interview was more about what you knew, and how to do things, rather than can you remember every little thing from ever about your job that you don't use day in day out.
This isn't the old days of FTP, Perl or PHP anymore. There are too much information I cant memorise every single bit of it. And I dont think you should either. Especially in the age of Google. My memory capacity has its limit, and there are things I just decide it is not important enough to memorise when I could easily search for it. ( Or if I am relying on Heroku )
I have long thought of Directing a video, where we have famous Developers, or developers from a pieces of software that normal people would have heard of, filming them doing work, looking up silly things in Google. Starring at the screen for hours and absolutely dont have a clue what the code is doing. Not typing any code for hours. Sort of like Reality TV shows for Programmers.
Hollywood Movies and Anime has made the perception that proper Software programmers should be super fast touch typist and typing code with insane speed. It makes people uneasy when they learn programming. It turns out they have to constantly look up some manual, googling, copy and pasting and for most of the time not typing anything. They thought they are just not any good at it and many simply gave up.
The reality is, hopefully the video would show, even top level programmers dont know everything. And it is perfectly normal to look things up.
If I was allowed to look at what I already have on my machine I could even set up a build process for my site. If not allowed then no build process.
But it would probably be pretty slow to write this, depending on how basic the site was, and it would not be as good as if I could look things up when I needed to.
But I wouldn't be able to deploy without searching.
That’s cool if true but until you try it you could be fooling yourself. The other thing is that it’s not really a skill that’s valuable in such a connected age, except in contrived scenarios like closed book coding interviews, maybe.
I don't see the value of memorizing somethings you just do once.
That said you're right, even the 99% of work still involves a lot of fiddling and sometimes research outside of writing code.
Maybe a “Big brother season 1” style. I’d watch that.
Things are more complex, but a lot of documentation is also now online instead of printed or distributed on floppies.
Granted, this assumes that the deployment target is ready to receive the deployment payload...
I'm pretty sure I could do it depending on our definition of basic web app. With something Rails it's not even really that hard. Rails g scaffold [Model] gets you 95% of the way there.
I can make a basic web app without googling.
On-line information? That's another question entirely. This would be a more interesting test: can you make a basic webapp (or other type of app representative of your experience) without Internet access?
If you're dealing with an older stack and toolkit, you probably have many books' worth of manuals already installed. Unless you're unlucky and didn't notice the documentation isn't installing along with your tools. Or you're on Windows[0]. You can use them to work out most of the problems you're facing.
Newer tools though? There's this annoying trend of under-documenting things, and relying on people on StackOverflow to fill in the gaps. Or even worse, setting up a Slack/Discord for the project, and getting people to help each other there.
Maybe I'm just old, but when I'm working with computer tools, I prefer to solve the issues myself, instead of chasing around the Internet and talking to people. I also like to be able to continue to work when my Internet dies, or I'm out of range, or the site hosting the docs dies (happens more often than one would expect).
And to answer my own question: yes, I can write basic apps of the type I work on (and bunch of others, including games) without Internet access, as long as you let me use my computer - where I have access to heaps of off-line documentation and lots of prior source code to supplement it.
--
[0] - Someone at MS had the bright idea to ship PowerShell without help for its commands by default, so that the first thing Get-Help tells you is to download the man pages...
> On-line information? That's another question entirely. This would be a more interesting test: can you make a basic webapp (or other type of app representative of your experience) without Internet access?
I would suggest that the type of information is important, rather than the medium. It is not that solving the issue yourself is better than talking to other people. It is a matter of ensuring the validity of the information as well as it's suitability to the task. That is more difficult to do without referencing language or library documentation, and I suspect that it is not being done at all by most of the people who rely upon searching the Internet.
While the quality of books is better (on average) than online information, one still has to be selective. The market is flooded with books that offer shallow explanations or are simply a rehash of what dozens of other books have discussed. Not only does the latter limit the breadth of knowledge, but the nuggets of insight offered by any given author are usually so deeply buried that they are easy to miss. Sometimes it is more productive to scour the Internet because of that.
I generally go directly to the API reference and do the search there because Google results might not even have it on the first few pages.
I actually get annoyed at being pointed at the StackOverflow question that shares a few keywords with my search, but is completely unrelated otherwise.
In my initial days of programming in school/college, I relied almost entirely on local MSDN library installation (during VB6 days, it used to come in three CDs), to learn VB6 and build apps. With that, I built a multi-lingual word processor, a screen reader and some other nice tools that got me hooked with coding. It was around 2003-2006 and I used to only search on internet whenever I needed to add something not supported out-of-the-box in VB6 like Win32 APIs etc.
0: https://ASPSecurityKit.net 1: https://www.youtube.com/watch?v=TmUO90JNlvs
Plus, these questions give me a great reference for next year when I am doing something similar but have forgotten the details.
This approach probably works well because I know how things work at a high level; I think it would be disastrous to do this without any real understanding.
I actually interview for this skill specifically. I stress to candidates that they can and should search the web in whatever way they would when tasked with code in real life.
The speed at which someone can process search results and stackoverflow responses to filter out crap and find the solution is the best proxy I've found for developer productivity.
Some people don't search for anything, even after prodding them 3 times that it's 100% fine to search and they definitely won't lose points. They still won't do it, because it's just not how they reason about problems.
Other candidates will immediately identify the problem, search with good queries, quickly navigate through a bunch of sites, find the relevant info, copy/paste, and solve the challenge.
Deleted Comment
Also, eventually, what matters is how you connect the bits and pieces you take from online and integrate them into your software. How you design and shape your software so that's its scalable, optimized and reliable is in your hand and that's what matters the most!
I learned to write java code (structure, basic io (terminal, file, datastructures) blind like in word or notepad and it would run without errors for a google interview; It is not that much you need to know actually but when you learn it once, it lingers around for quite a long time and it gives you a different feeling of confidence that you actually know java (i was writing java code for 6? years before that already so i do know java).
Its very similiar to my personal experience with doing push ups: If you never have done them you don't have any muscles at certain areas; Now after going from 0 to 15 push ups over a few month, i gained a general better physiology on upper body strenge and it still lingers around.
Non of both are critical in a day to day scenario but both experiences were fun/interesting and this base is now here where it was not before.
It brings me, mentally speaking, closer to really get something like java.
Does education work in a similar fashion? does being very good at solving very specific timed algorithm problems at a whiteboard translate to being a good software engineer overall? If that's all you trained for, you will be just very good at that.
To use your analogy; it gets tricky doing push-ups because my body remembers doing crunches and my knees get in the way.
Better analogy: I'm learning German at the moment, but my brain keeps "helpfully" supplying the French word whenever I'm mentally grepping for German vocab.
Remembering that JS switches need a break statement but Go switches don't - or that JS If statements need the brackets but not the braces, and Go If statements don't need the brackets but do need the braces. This shit trips me up even after years of coding in just JS and Go.
If I quickly need to know how to get the last item of a list in yet-another-language, Stack Overflow will provide me an answer in about 2 seconds.
The documentation will certainly provide the answer too, but I'll need to look at several places etc., since the format is just not optimized to answer exactly this question fast.
Edit: I know the article touches on that idea briefly but my argument would be "of course it doesn't matter".
Sure, I could develop slightly faster with a more encyclopedic memory but I really doubt it would make an observable difference in the long-term.
Most of my time isn't spent referencing libraries or syntax but instead I spend most of my time thinking out the logic and higher level relationships of my code. I suspect that is largely the case of any development even remotely non-trivial.
I don't care that someone memorized whatever command line syntax to create a new project in whatever framework. That's just rote. Even what we write on the whiteboard I don't expect it to compile. Is it ToString or toString? Can't recall either.
What I care about is that someone can ask the relevant questions, come up with a design and explain what and why they are doing something.
It's a problem when you search for the solution to every problem with a search engine.
So many answers on the internet are written by absolute beginners, who happened to have the same problem, and then blogged about the solution after spending 5 minutes of googling. Sometimes these answers are alright, but often they are shallow and miss context.
The problem is excacerbated by the fact that 1000s of sites try to get into the top results for programming questions. So you end up with crappy shallow answers, and never learn the underlying details.
And then there's the problem that the more experienced you get, the less you look up answers, so the less you are exposed to sites like Stack Overflow, and the less you contribute to Stack Overflow. So the result is that the least experienced contribute most to the answers on the web.
My preferred solution is to buy books. Find the best book on your topic and read a chapter, and you'll learn more than if you had googled 100 questions.
The downside of books is that it only works for "old" tech. If you want to learn about the hot new Swift UI Declarative Reactive Whatever, your out of luck and you need to scrape together any info you can find from random blog posts...
Books are also written by amateurs a lot of the time, especially if the topic is a bit niche. I've had people from publishers reach out to me to write a book about things based on a single blog post in the past.
Why? I'd fire an engineer who took on problems and refused to spend 10 minutes googling around and looking for solutions first.
I have no interest in humoring someone who dismisses the entire internet because it is written by "dumb people." Buying and reading books is how you draw out a project you don't want to work on.
There is a strong argument that being good at that isn’t required for most SWEs (including at FAANG), but it is something that having library/framework references doesn’t really help with.
Some (probably most) SWE interviews rely on coding without Googling. However I have been through plenty of interviews in which that wasn't the case. Coincidentally I also find this type of honesty in the interview process is a good indicator of how much I would enjoy working at the company.
I had a position working on a pretty complicated 3d application in Angular. At times, it felt like I was fighting a war on two fronts, one dealing with Angular complexities and the other dealing with domain complexities. A better understanding of Angular in general would have greatly increased my productivity.
Now, whether or not an increase in team productivity would have really mattered is hard to gauge.
> Does an over-reliance on documentation indicate a lack of critical expertise that will ultimately result in considerably lower job performance?
Technical research is a skill. I love working with teammates who understand how to find, evaluate, and apply proven solutions. Most projects can spare the time to do a reuse trade study before writing something from scratch.
Use (and authoring) of documentation is also a skill. Professionals use documentation to communicate with teammates so projects can scale efficiently.
Deleted Comment
Or more simply, can you write a web app without internet access?
That you can imagine some convoluted scenario where a skill could be employed does not mean it is an efficient use of your time to develop that skill, particularly when that scenario is easily avoidable.
You just need some copy of something like: the way back machine, google cache or archive.is and then do asynchronous mirroring and you are not so far behind.
Zoom meetings might be a problem though.
I understand what you are trying to say - but what would be the point of that ?
If we were to prepare an essential list of documents that are required to write web applications without access to the net, we would probably be able to cobble it together and make it available offline.
I mean MDN, CanIuse and CssTricks.com would already get you like 90% there.
Dash [1] does package up StackOverflow and a bunch of library docs too.
[1] https://kapeli.com/dash
Also, as if no internet access = no refernce.
Sounds wonderful :P
I took 50GB of wiki resources mirrored in my pocket.
https://kapeli.com/dash
https://zealdocs.org/
Disclaimer: I never used it, just came across this a while ago and thought it was cool.
0: https://archivebox.io/
[1] http://wiki.ros.org/Mirrors [2] https://docs.python.org/3/download.html
The whole idea was to have a page I could load from a laptop attached to the pi via a ethernet cable for quick debugging and interaction. No external internet needed, and did the job decently.
I’m using Django and I used to use Sublime Text without any plugins which meant (at the time) it couldn’t automatically show me the definition of a function or object from a library, forcing me to search around for its documentation.
Switching to PyCharm/IntelliJ meant I could now just Command-Click (Ctrl-Click for Linux & Windows I believe) and see the actual definition and logic of the underlying function without having to rely on the online documentation. This of course works recursively, so I can repeat this process again and again up until I eventually reach the core standard library which is in C and isn’t introspective (at this point I can rely on my knowledge or some trial and error to figure out its behavior).
Personally I think that focusing on how you solve the problem loses sight of the fact that the only important thing is that you can accomplish the mission. If you can't build a basic web app on your own, but you can while salsa dancing w/ a mountain gorilla, I'll pay for your subscription to Spotify so you can stream Havana Kings while tearing up the dance floor w/ a Silverback (must provide own gorilla).
I enjoy to develop without Googling; really enjoy!
I tried some other amazing things:
- developing without using touchpad or mouse.
- debugging without running code until the end.
- developing with turn offed WiFi.
In general, I'm always trying to reduce my needs.
I think this practices would help me to be more accurate, more independent, and become able to live in a post-apocalypse situation as a geek.
I said post-apocalypse, I remembered lcamtuf article "Disaster planning for less crazy folk": https://lcamtuf.coredump.cx/prep/
When I'm running I periodically close my eyes and it helps me breathe a lot.
When I'm programming I often close my eyes if I know what's the current state and what operations I'm going to do for several following steps, until I lose track of them. It helps me to concentrate and recover my sanity.
p.s. Even occasionally I'm walking closed eyes.
So not googling is a time saver here.
Today on day one i would go: wtf is this Babel thing and how do i configure it so that Angular work together with SASS and is npm compatible with this version of Typescript? Which reactor pattern is flavor of the month and what stupid parameter was needed to make the router work? I hardly even know which files are shipped to the browser anymore after all Webpack preprocessing.
But once you actually have the setup in place, i have to admit the modern experience is a lot more productive and powerful. It's just that every time you have to start a new project or touch anything related to the build-process your soul dies inside. There are too much gunk just built on top and on top of each other, instead of replacing the whole stack, and thanks to leaky abstractions you have to understand at least something throughout every layer of the rotten cake.
There are a lot of scaffolding-scripts available, like Vue-cli, helping you to do all of this but imo they just add even more to the problem, now you got yet another layer of crap to crawl through and it prevents you from actually learning the real layer underneath.
Today with node/angular, I'm generally leaning on Google (well DDG) pretty heavily throughout the day. Web platforms seem substantially more complicated today than they used to be. Then again, maybe the mid-aughts was the golden age of programming.
The number of times I google how to do the thing I'm supposed to do is relatively low, but the number of times I have to google how to fix something that has come up AFTER I did the thing I was doing is probably 90+% of my googling.
They basically said "errr, you could just look it up?" - like, it was obvious that the interview was more about what you knew, and how to do things, rather than can you remember every little thing from ever about your job that you don't use day in day out.