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!
Personally I make no attempt to write code without googling. In my position as a robotics engineer my work covers such a breadth that I guess I just outsource my memory to Google. I don’t remember the syntax for many common Linux commands. I don’t remember how bash scripts work. I constantly look recommended ways of solving certain problems. Google is just integrated in to my process.
This applies to me as well. There are lots and lots of small things I do so rarely that I just can't keep the details in my memory. And I really would love to be able to type "man scp" and on the first lines of the man page to just get a couple of basic examples that I could basically copy-paste and change the server addresses to suit. But instead I get a ciphertext of all possible flags I can use, so in the end it is just faster to go directly to qwant.com and type "scp example"
I went one stint where I didn't start a new project for 5 years. Practicing new projects in that time period would have been a whole lot of wasted time.
To make you less fragile to disorder. The things you do regularly are trained into you by repetition. You practice under developped skills to stay flexible and able to adapt.
Very similar to physical fitness. Sitting all day trains you to sit. And that’s making you more fragile
It’s impressive what you say, but I would hire someone that would need to google to develop something if they were to code it quickly enough and to code it well.
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 guess I know now why every other website pegs my CPU to 100% to slowly display static text and break the browser's back button - professional software engineers are "bored to death" when doing their job so they have to make things "interesting" in order to entertain themselves.
in the php world you usually have decent man pages for webservers handling php requests and generally speaking php frameworks and packages have good inline documentation. also there is a package for anything you may need and and ide will usually give hints based on that documentation.
most frameworks come either with examples or commands to get your started. symfony even had their docs available for local reading as well.
with python i always have to delve into reading obscure documentation that either makes no sense or is not up to date. and there are too few packages for what you normally need in a scalable app. so yeah you can write php code without googling, as long as you are not a complete noob in web development.
if its 2021 and you still write code using vim and niche languages then you are doing it wrong, and indeed google is your only hope.
Please don't dismiss comments for grammar or spelling mistakes. These are not substantial criticisms of the argument being made, and are IMO a form of ad-hominem.
I would be grateful, if you could explain which of the guidelines I may have transgressed. I read them all and searched "grammar". Nothing comes to mind.
My own comment was precipitated by the sneering tone I read in (sic!)
Which itself points out a grammatical mistake unnecessarily. Then compounds this, by making a more egregious mistake.
Really my comment was making the same point. Don't point out grammatical mistakes, which is the precise purpose of (sic).
There's nothing unique here. Virtually all libraries and languages have local version of docs. I think you're too biased to continue in good faith argument.
they all do, its just that some are better than others. i dont actually like php, but it has plenty of advantages when it comes to quick web app development even without googling.
had a client once where its workers were day dreaming of a job in the valley and ofc they were using python. they bashed php on a daily basis, and as they were doing it, the php api was sole codebase running in production (essentially the company’s product) and running reliably for a few years.
the python workers were still struggling with basics such as queues and isc, and digging through non existent or vaguely written documentation. was a fun experience watching them struggle as i basically cloned repos, read the code or entry points for that code and get things shipped.
since then i started loving python. development is slower and my invoices keep coming. love it. occasionally i write some lib thats already been implemented in plenty of php and nodejs packages.
oh same client had a ruby codebase that kept failing and couldnt find devs to work on it. fun times.
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.
I didn't say it's a valuable skill, in fact as I said it would be slower for me to do so (which maybe I should have said significantly slower) that's a pretty strong indicator of its lack of value. I should also say it would be worse quality - because if I needed to add some JavaScript functionality I would need to be able to use the syntax I remembered and not what I could look up.
However my confidence that I could do this slowly and of poor quality is that - I started making websites 20 years ago so making and index.html file and linking to each file by hand and I still do this every now and then when making little static sites (like if a site is 4-8 pages I might just do it by hand). And the stuff I look up for sites like that are generally - how do I do this cool thing in CSS.
Admittedly if I did it this way the site I am envisioning doesn't look much better than Berkshire Hathaway's https://www.berkshirehathaway.com/
on edit: also there is some question if one is just allowed to do what one can remember in one's head or if, without using an internet search engine, one can use the stuff one has on local computers and devices? In which case I have some complicated stuff here to reference going back a lot of years, a lot of ebooks, local hardcopy books. So in that case I think I can do just about anything that can be done with search (except for using newest CSS, es2019 features), but still significantly slower.
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.
That is similar to my approach, though I will download the documentation if it is available that way. It is always available, you know which version of the documentation you're using, and I never understood why an intermediary should be involved when something is referenced frequently. (Yes, I realize the latter is a personal quirk.)
As for StackOverflow results, at least there is a chance that they will be more useful than most third-party information. I have found too many sites that attempt to rehash the documentation, perhaps in clearer terms but virtually always covering common knowledge and completely omitting everything else.
I used to keep all the reference documentation downloaded and available offline, but at some point I got lazy because Google did give me the API reference as a first hit.
I guess it's time to start bookmarking those /usr/share/docs/... paths again :)
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.
How long are you interviews? How long are you watching the developer before you prod them to Google search?
I like to think about a problem at least a little bit before giving up and asking for help. I have to at least be able to understand the problem before I can effectively find a solution.
And hell, these days it's only a 50/50 shot whether searching will actually help with my problems or I'll just end up in a rabbit hole of SEO spam.
> 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.
That's interesting. What is your experience with harder problems - ones that can't be just googled? Do you find that those same "googlers" still outperform the more "independent" developers?
If by "these people" you mean the "googlers", yes, I'm one of them too and I think the same applies to most developers so I know how to approach harder problems. However, I was curious about the employer's perspective, whether maybe "independent" developers have some advantage with problems that can't be readily googled.
I wouldn’t be surprised if people feel uncomfortable googling in an interview even when told it’s fine.
You’re being judged for your knowledge (in part at least), googling something fairly basic doesn’t feel great even if it’s completely normal to do that in normal development.
In a given day I code in 3 or 4 different languages, and sometimes I'll brain fart and totally forget something like how to get the character at a specific index in a string for THIS language.
Sometimes my google queries are so entry-level that even I chuckle, but I do worry what my employer would think if they saw "how to create a date in java"
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.
That’s not really true as long as you keep pushing yourself and aren’t aiming for extreme performance. Wind sprints for example are still useful if you want to compete a marathon in say 6-8 hours.
As to pushups and pulling things, back strength from supporting your body weight on your shoulders would help you pull things. Clearly practicing the motion you want to improve is optimal, but controlled motion generally involves a lot more skeletal muscles than just what’s being targeted.
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?
That really depends on how much management there is for hand holding. I expect a good developer to get a ticket to fix the size of a button and be able to follow up with stakeholders about the size of the button next to it.
It'd be really weird if we sunk so much effort into ticket writing that everything really was just reduced to a task - at that point the ticket author should just go ahead and fix the thing.
It's a symptom of a well organised org. The ticket doesn't need to have a lot of detail (unless your ticketing system is dysfunctional and forces you to input a lot of information, which is sadly more common than it needs to be), only enough to capture what needs to be done and where so it's not forgotten.
It's no different to filing a ticket with the building management to replace a broken lightbulb - it's in your interest to know whether they replaced it already without having to stand up from your desk to check, and it's in their interest to know which individual problems are located where so that they can plan their weekly maintenance run through the building accordingly.
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.
In the pre-web days I had a shelf full of O’Reilly books. Everyone did. But O’Reilly has gone down hill, and the popular tools have good on-line doc that is much fresher than a book can ever be.
Technical books have become a dumpster fire. Some publishers (I’m looking at you Packt) are so bad their books are not worth the space they take in a dumpster. Total waste of trees.
> 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.
Code I've seen at an (at the time) very well known startup horrified me. It must have been written by people with exactly this mindset:
"Why spend time learning all this useless background information when I can just find the answer on google in 10 minutes".
It was obvious that people just cobbled together dirty workarounds that they must have found somewhere on the internet. They used runtime hacks to circumvent limitations in a library API, even though the library was developed by someone else at the same startup, and the runtime hacks were not necessary if the developer had any clue about what they were doing.
Sometimes you get stuck, and searching the web can help you get unstuck.
But the problem is when people just search for the solution to EVERY problem they encounter and never learn the basics because they don't want to "draw out the project".
(Addendum: I'm not dismissing the internet. You can find good information on the internet. But it takes time. The problem is that people take shortcuts, and instead of learning everything they need to know, they just google for the answer to their specific problem because it seems more productive in the short term. Buying and reading books will take longer than copying an answer from Stack Overflow, but it will not take longer than learning sufficiently in depth about a topic by reading blog posts, documentation, etc)
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.
> There is a strong argument that being good at that isn't required for most SWEs (including at FAANG)
Algos/data structures are used as a proxy for problem solving and how fast someone can learn. Plus every decent CS program will have a few courses on it.
Also, internal codebases are, well, internal. You won't get a nicely formatted Stack Overflow response on how X works if X is deep in the Google Source tree.
> Algos/data structures are used as a proxy for problem solving and how fast someone can learn.
Problem solving, yes. How fast someone can learn, absolutely not. If you've never heard of dynamic programming there's absolutely no way you're going to come up with that in an hour. If you've never heard of binary trees you aren't going to think that one up in an interview. (Of course, you should already know basic data structures, but my point is a lot of these things aren't something you'll come up with if you haven't heard of them before.)
I had a FAANG interview question applying statistics to a unbounded input. It took me a while to understand what the question was really asking, followed by some shock because it was something I'd never even imagined before (since I haven't needed to do much statistics in my line of work) and I didn't have the faintest idea where to start. With some hand-holding I figured out some basics, but I'm pretty sure that interview was part of the reason that "the hire signal was not strong enough". Now, let me take a walk for 15 or 30 minutes to consider solutions to something I've never imagined, and I'll probably come up with a reasonable solution on my own, and also be able to extend it for the rest of the interview. That might measure my ability to learn. But expect me to solve it in five minutes so we can go on to the deeper questions? Yeah, not really. So this interview didn't measure my ability to learn, it measured what happens when you give me something I've never imagined before and expect a solution in five minutes.
(What's a little frustrating is that I'm not really sure how to expose myself to the problems I've never imagined but which FAANG interviewers are likely to ask. I'm not sure that leetcode would do it, although obviously it'd be a place to start.)
> If you've never heard of dynamic programming there's absolutely no way you're going to come up with that in an hour.
Dynamic programming problems are really terrible for interview signal though.
Firstly, it's mostly an aha moment or two trying to realize the relationship between the elements. Not really lots of signal there.
Secondly, the code is trivial in 99% of cases. Just set up an initial (likely multidimensional) array, some for loops to iterate in the right order and then apply the formula. Returning the right array element at the end.
Also terrible signal, since the initial fizzbuzz question during phone screens or whatever should've caught an inability to code.
That said, yeah, the algorithms bit of interviews are the bits that are scary to me, since they're the biggest dice rolls. Everything else just has normal levels of unexpected events that you learn to deal with during your job. However, I write proper algorithms once or twice year and, even then, just trivial ones.
I've coined a term for these FANGA interviews: Epiphany Lottery.
You need to come up with the correct answer in less than 2 minutes, twice, within 45 minutes. Because it runs twice, you will only have 15 minutes to write up the code to handle all the edge cases your solution can't cover for. There is simply no time, nor expectation, for the candidate to reason about a problem and actually work out a solution.
Fwiw... My go-to interview question has about four hard spots where people get stuck. I don't really care so much where you get stuck, so much as that you demonstrate good thinking and deploy strategies for getting unstuck once you hit your limit, wherever it might be. And, yeah, points are given for actually getting unstuck.
Strategies I want to see are along the lines of 'draw a picture' or 'work a small example, carefully, in full detail.' People who do these kinds of things /usually/ solve the 'hard part' they got to, and I give them a good review, wherever that was. People who don't manage to get unstuck tend to either a) not use simple problem solving strategies and/or b) get overly attached to an initial wrong idea.
(and I totally agree: taking a walk is totally a valid problem solving strategy, though it isn't easy to incorporate into a time boxed interview...)
Are you explaining this to the interviewee. Otherwise it's a guessing game for what you want and creates unnecessary stress. If you planning to put people on-call (working under stress and time constraint) on their first day(no prior knowledge of the problem they may encounter) then its fine.
While I'm a decent programer, I perform terrible under these situations. When I get stuck I need to take two steps back (go for a walk, explain it to a coworker/rubber duck).
> Of course, you should already know basic data structures
That's partly what the whiteboards are screening for. Any decent CS program should teach them.
> I had a FAANG interview question applying statistics to a unbounded input. It took me a while to understand what the question was really asking, followed by some shock because it was something I'd never even imagined before (since I haven't needed to do much statistics in my line of work) and I didn't have the faintest idea where to start. With some hand-holding I figured out some basics, but I'm pretty sure that interview was part of the reason that "the hire signal was not strong enough".
Yeah, if you are asking something weird (as an interviewer) you should be expected to explain it.
It sounds to me you had the right approach (figuring out what the problem is and getting help from the interviewer). Ultimately, it's completely possible you simply stumbled upon a bad interviewer who assumed his specialty question was well known.
> What's a little frustrating is that I'm not really sure how to expose myself to the problems I've never imagined but which FAANG interviewers are likely to ask
> Algos/data structures are used as a proxy for problem solving and how fast someone can learn.
A piss poor one if you ask me. The truth is that it’s a skill where you need to internalize what various low level data structures buy you to know when to reach for them.
Most of the code I saw at Google was boring ass proto transforms based on business logic. Knowing when to use a map vs an array was about as complex as it got for 95% of the positions.
Additionally, knowing the algorithms/ds (as all Googlers are supposed to) did not help for that normal work. A bunch of folks I worked with in the open source world produced better structured, better tested, and more performant code than many of the internal folks but they couldn’t join Google because of the algo/ds bar.
>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.
If it prompted the meeting organiser to put their one point into an email, thereby saving 6 people a 45 minute meeting, would it be a problem or a feature?
Anyone who has worked with a team in a time zone 8+ hours away from their own can already answer this question. It depends entirely on the technical and communication skills of all involved parties.
> 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.
Can I knock up a site with some PHP/HTML/CSS without references - sure.
Can I knock up a standard server side app - sure, but I'm gonna want to look up certain functions and what arguments they take.
Can I put together an SPA without? Probably not.
I know what I need to do, but I'm not going to remember which packages I need to install,
or how they are configured, or if package x works with webpack4 or if I have to have Vue2 because a certain thing I want to use doesn't support 3 yet etc.
There are so many moving parts now for an 'app' that it is not feasible to keep it all in your head. Thats why there are so many starter-packages for things, because people forget what they did the first time around, so just create a new git repo with the skeleton to get going again ... only to be replaced in 6 months.
It was perl and flat file site counters when I started, and now I have to google how to make webpack work nicely :D
Yeah I guess I can crank out a basic CRUD-App without looking up anything. All depending on what app means. If I have to work with new technologies I clearly look up the best practices and different solutions to common problems but on my hometurf? I look into the source code to know my way around. It's quicker most of the time. Or I ask in the forums - is this allowed?
When I run a technical interview for a dev role, I make a point to ask the candidate to Google their way to a solution since I figure that's probably one of the top skills they'll need on the job.
So much this. Knowing how to refine a search and how to guess phrases that will occur in the correct page (which sequence of words to quote and which not to quote) is at least as important as anything else like data structures.
I’d much rather have someone find the best page showing a specific tree algorithm, than describing it on a white board.
Bonus points if the searching test requires knowing the termninology. Having a broad-but-shallow set of knowledge is a key skill for developers in general, for this reason (information finding).
E.g knowing that a bounded cache can be a “LRU cache” will help you find information or implementations.
This specific case, and the norm of interviewing without access to references is not that interesting.
But it is kinda like a specialized version of a fun party question, "With what you know now, if you were sent back in time, how far could you go and usefully employ your knowledge of the future?" (E.g. I know chemical fertilizer is a big deal, but I definitely do not know how to make it. I studied heat engines in a physics class, but could not spark the industrial revolution a century earlier.)
Maybe the midway point between these is something like, "if you were sent back to an earlier era in computing, how far back could you go while usefully applying your current knowledge?" E.g. I work with the jvm constantly and I know that it was a big deal for a popular language to have an actually described memory model, but I couldn't build it myself in the 80s. Maybe I could build MapReduce or Spark in the 90s?
It's _hard_ working without the informational resources you're used to, but there are so many more fun ways to explore that gradient than web apps.
The going back in time question is actually really good. What are the fundamental concepts you need to kickstart stuff? Those fundamental insights are still going to be relevant today, which is why they sparked revolutions and major changes to the landscape.
A close parallel, which I refuse to play until the world becomes a less scary place is about rebuilding after an apocalypse.
One "out" that can make the exercise more inclusive depending on the group is germ theory. Any modern person could save a bunch of lives in almost any period if they can convince people to wash their hands, boil suspect water, separate wells and sewage by a wide margin, etc. And yes, definitely still relevant today.
> Any modern person could save a bunch of lives in almost any period if they can convince people to wash their hands, boil suspect water, separate wells and sewage by a wide margin, etc. And yes, definitely still relevant today.
The hard part here is probably convincing people. Something to prepare for before you go back in time or post-apocolyptic.
I can, but it will be basic! I might have to use a JSON file for the backend because I probably can't remember any database libs well enough to use without documentation.
However, lots of programming is much closer to plumming than to.. programming.. any time you're using a lib or api, you're just looking up what kind of fittings that comes with and what length of pipe to attach to it.. So don't worry about not being able to do anything really useful without looking in the docs :)
Now, if you have to look up basic language syntax for the language you use every day, I'd say its bad and you probably need to practice a bit ^_^
You should be able to learn at least one language deeply enough that, given sufficient time, you could do just about anything without libraries or external dependencies, and therefore without needing additional documentation. Aspiring to and eventually developing that level of language mastery is, IMO, one of the core signs of maturity for a Software Engineer.
However, that would be wildly impractical in our day to day work, which is more about connecting pieces together in the right way, and hence is a lot about reading the manual for those pieces, understanding what it is they do and how they should be assembled together, and then actually assembling them together and testing that it all worked as expected. "Googling things" is an essential step in that process, but you could substitute Google for "read the manual" in an earlier era and it would be the same thing.
Perhaps what is sad is how many things these days ship without good manuals, because Google makes it easy enough for people to stitch together scanty release notes, comments in the source code, blog posts, Stack Overflow questions, etc. that you can actually get away with not having a manual.
> You should be able to learn at least one language deeply enough that, given sufficient time, you could do just about anything without libraries or external dependencies, and therefore without needing additional documentation. Aspiring to and eventually developing that level of language mastery is, IMO, one of the core signs of maturity for a Software Engineer.
I don't understand why so much emphasis is put on being able to do this without consulting the docs. Sure, it's nice to be able to pound out the most basic valid HTML page without googling it, but that's hardly a web app. If you need a backend component, I suspect the ecosystems where you can make anything practical using only built-in functions (no libs) are in the minority. You'd end up doing ridiculous stuff like using the filesystem as a database, plain javascript on the client side, node's builtin http in the backend. People with years of expertise may be able to do this, but it's just a side effect of having been steeped in the tech stacks for so long. I don't agree that being able to do this is something worth aspiring to. Rather, people should aspire to moving efficiently within their ecosystems and conserving mental space by knowing where to find things quickly.
Of course people’s projects can be unique, and my work may not be representative of the readers work, but I guess this raises the question: what does “using Google” mean? I frequently use “lots of things” on my computer: man pages, other installed documentation, will browse source code of libraries I’m using, or indeed my own previous work. I can do this if, say, I have no Internet connection, but that doesn’t mean I’ve got a fully-formed bug-free implementation of my goal floating around in my photographic memory.
It's a good point, I take it to mean search for how to use or do something, even as google is becoming worse at finding things, it's still often waaay better than the search functionality available on the websites of many libraries and utilities.
So yeah, I guess I take it to also mean searching through local documentation, but I know that's maybe not what was meant.
A basic app? I've been doing this for years and of course I can.
For the things I've mastered I hardly use google anymore, and even that is mostly to check if things have changed since the last time I used them and if there's a new way I didn't know about.
Using notepad or your systems equivalent? I notice a lot of developers rely heavily on autocompleters and syntax hints in the editor, but deny that they need "documentation."
I don't know how many people are aware but https://devdocs.io/ has been a life-changer, runs locally as PWA and caches all the docs you need to use, instant search across all interfaces - so yes you can write even a complex web app without googling at all.
Well there is this quote, often attributed to Einstein himself: “Never memorize something that you can look up.”
I don't know whether he really said or thought anything like that, and I also don't actually agree with the literal meaning. There are some things that it pays to memorize, in my opinion. As I keep reminding my daughters: times tables (or math facts as they seem to be known nowadays) are important forever.
The principal behind the quote, however, I'm fully behind. I live in the docs. Even if it's something that I know pretty well, I often like to check to make sure I understand exactly what's going down. There are too many little details that are easy to forget. If it's important and you aren't sure, look it up!
Finally, I could probably claim to be able to write build a simple web app without using google, but I'm sure I would lean heavily on my editor to remind me of argument order, syntax, etc. Maybe there is a little bit of difference there: if my editor/IDE can tell me what I need to know, it's probably just that bit faster than searching for it in a browser.
There is some truth to that quote, namely that becoming effective at looking things up is a big productivity booster.
But there is no productivity booster as large as knowing exactly how to do something without needing to look it up. This is almost by definition the level of mastery that comes from significant practice / experience.
I've noticed that some of the very smart people I've worked with for years did not ever really achieve mastery of their language or tools, and I think that's at least partially because they didn't care to take the time to try and figure things out without looking them up, and thus the inner workings of things remained inscrutable to them.
I know for a lot of people coding is all about fun and lifestyle, but at some point it becomes a job and you just need to get shit done without being fancy, cool, hardcore, eXtreme, 1337, agile, lean, mean, whatever.
It’s like how people equate rattling of facts as being smart. When you’re effectively carrying the equivalent of all human knowledge with you at all times, memorizing facts and historical dates seems obsolete.
Now it’s about filtering out the “noise” facts and figuring out which facts or dates are relevant.
I have identified this issue during whiteboard interviews. I was not able to write code on a blank piece of paper/plastic. It turns out I have delegated part of the coding activities to tools like IDE and Google.
I made a conscious decision to fix this.
I have switched from Java to Go, effectively lowering the level of abstraction. Then from IDE to Vim, getting rid of autocomplete.
I turned off syntax highlighting, allowing my brain to parse and interpret code more effectively. Last but not least was starting to use embedded documentation `go doc {{ package }}` via terminal and reading language sources to learn how internals work.
It was hard at the beginning, and my productivity dropped for some time. Later, when new neural connections were created in my brain, things started to improve.
Some of the benefits that I enjoy now are a better understanding of the code, improved knowledge of language libraries and interfaces.
I have tested this approach by coding in planes and trains without access to the Internet, and it works well.
Did it fix my problem with whiteboards? I do not know, but I am happy with the new skills.
It matters if you're applying for a job and the people interviewing or the hiring manager think you should.
People like Mike Acton and Jonathan Blow give incredibly condescending speeches about "practice" like you should be able to just make a Win32 API app that calls DirectX (or some other comically absurdly bad API) from memory. Blow in particular loves harping on this and loves saying that web developers are incompetent and wasting their time creating awful products.
How much time do you spend making new apps on long-lived projects? At many companies, the answer is zero. These same companies may think you suck shit at programming if you can't remember command line options you never have to use in day-to-day work.
An interesting approach would be try to code something with only the official documentation and source code of the libraries your are using. No internet except for the git clone.
I like doing that as an exercise. It trains you well for a very common situation for professional developers. You have to work on a project, poorly documented, the original developers left long ago and no one really knows how it works, except maybe for one guy who don't have time to answer your questions. Of course it is internal stuff, so the internet is no help. It is a valuable skill, literally, companies are ready to pay good money to people who can do that.
> It is a valuable skill, literally, companies are ready to pay good money to people who can do that.
I totally agree that it's a very valuable skill, but just wondering, how would you demonstrate that skill in an interview? I personally find it pretty hard to demonstrate these "soft" skills, and even when I act as an interviewer in those rare cases, I find it hard to tell if a person is equipped with such skills.
I once had a side-gig where I advertised auditing out-sourced coding. Basically hundred-k loc reviews. It was fun, but word got around that I was good at it (uncovered security issues, reduced costs by finding things that could be optimized, etc). It’s on my resume, and that’s how interviewers know I can do the job. I can tell “war stories” about the code I reviewed, how I handled engineers that tried to obfuscate the code, etc.
There are just so many things you rarely do and do only at the start of a project. I have done most of my development with Django on the backend. I start a project once every few months at most. There is plenty of config that I am copy and pasting from the internet. There are lots of little quirks like CORS that are handled once and never touched again.
So yeah, I might be able to get a basic page going, but I am sure I would need it for the postgres integration.
Only with Pycharm, so I can scroll through and search code easily as an alternative to Google.
For me, and I think the majority, memory is where you keep what your brain thinks that it will use again.
If your job is to make and fix/tweak the style of a web page, and you do it practically everyday, you probably can make a pretty decent css file without even looking away from the editor. But if you then need to make a basic html page, you will probably search.
If you use an ide with autocompletion, you probably won't remember the correct camelCase of even common functions (is it instaceof or instaceOf?) but if you work on an embedded system with a plain console editor you probably remember them all (or at least the most used ones).
I remember when I was actively using Lightning Launcher (an android launcher with JavaScript capabilities) that I could make full scripts almost without pressing delete, when its editor was simply a big textarea (no autocompletion, no colors, not even automatic indentation). I did need to check the docs from time to time, but their limited (and logical) set of basic functions made it easy for me to remember.
Nowadays I need to check everything again, because I simply forgot due to not using it much.
Answering the question: yes, yes I can, a very basic but working one, simply because I like making small tool pages for myself, coding directly from my phone (in a basic text editor). But when I need to do something not so basic, like checking if the user has scrolled to the bottom of the page, I search it.
> For me, and I think the majority, memory is where you keep what your brain thinks that it will use again.
There's some pedagogical theory around this. (I learned this through the FAA's instructor training.) Sort of common sense stuff, but it's helpful for structuring learning. Basically you'll remember things that you use a lot, have used recently, experienced intensely (e.g. actually used rather than just read about), and had fun learning. In addition, the first way you learn to do something tends to stick.
It's something that I'm mildly interested in because 1) finding the same thing on the Internet again is not always easy (the answer can be buried somewhere in the search results, the site rankings change)[1], 2) going to the web browser can be distracting, 3) there are the odd situations when you don't have Internet connection.
So here's my attempts. I store some annotated snippets in Joplin (could probably use org-mode or similar). I also collect programming ebooks and PDF'ed docs: sometimes you can still find them, sometimes you can 'print to PDF'. No idea how one would do it with javadoc for example.
The problem is interface for searching this stuff locally and reading. I use recoll for full text search and qpdfview for PDF viewing (the main reason is that it has tabs). Admittedly, this is not completely satisfying. Simple text search doesn't have the sophistication, PDF's feel less pleasant than web pages. Maybe something I could get used to if I went fully that route, but for now I don't feel compelled to do that (besides some experimentation).
My guess is that if you use a small language/libraries, or have a self-contained codebase, or do fairly rote things, it's possible to go without searching documentation. Otherwise... no?
[1] Or you could use bookmarks, but then, why not archive.
It obviously doesn't matter that much if you can or can't. We all google all day long.
But through my career at various times I've been able to say yes, usually after spending multiple years on a project and the platform/tech its built with.
Speaks to the really enjoyable side effect of productivity and unencumbered expressiveness that comes with being immersed in a platform or technology for a longer period or time.
I probably can't start an app for any framework without googling. Except basic console apps.
Thing is, you don't start apps every day. In some jobs, not even every year.
Whatever's initial setup and not related to the actual functionality you're working on will fade from your mind, and that's good. You can concentrate on the thing you're trying to do then.
all support a healthy amount of documentation that you can download and most importantly a very healthy amount of integrations from Vim (https://github.com/KabbAmine/zeavim.vim) to VSCode (https://github.com/deerawan/vscode-dash) - note that on Windows all these apps write to the registry as "Zeal" so remember to uninstall the previous one if you're switching between them and using an integration.
If you just need a searchable docset that can be made available offline, there's also DevDocs (https://devdocs.io/) - just note that downloaded documentation can disappear if you regularly use the same browser for normal internet use - I'd do things like grab a copy of ungoogled chromium and just use it for this site before traveling if you're gonna be offline for a while (alternatively, there's some electron versions out there and you could package it that way for yourself too)
I think this shows the necessity for learning instead of learning to look up. In my early days (pre-Google) my peers would only answer a question if they agreed completely with what I was doing and how. I would have to explain what I was working on from the beginning and every design decision and who had approved them and after all that if they didn’t like the project I was working on or thought it should be done a different way then silence. Books could be helpful but they generally lagged the state of the art by 3-5 years at that time. Between the two it made it very difficult to do anything cutting edge, so I made it my goal to learn as much as possible so that I would never again be limited in what I could do by others. Through the decades this has paid off immensely. Today I do “cheat” and look at Stack Overflow and Google pretty frequently, but if the internet goes out or I’m asked to give an impromptu explanation or overview of something in a meeting, I can carry on and speak with authority.
In my opinion, there's a difference between having to go to the docs once and having to go to the docs (or example code) every time.
I am not a (frontend) web developer by career. I did LAMP webdev work as a college job 12+ years ago and, like the author of this article, do small personal web projects perhaps once or twice a year. I did one of them earlier this week.
Yes, I went to Google for basic things like "Javascript map lambda" or even "Javascript foreach syntax", but I refreshed myself on those exactly once and was then able to keep it in my short term memory through the completion of the project a few days later. I switch around so many similar-but-not-identical languages (Java, Go, Python, C++, etc.) in a year that it's often not worth it for me to memorize the minutae of each one. I know how to conceptually do something in whatever language, and use search engines and stack overflow to remind myself where to put the semicolons and the brackets.
Are you asking if I can make a web app from memory? Probably not.
I have ebooks, I have my Dash app which downloads documentation.
So while, I could technically do it without Googling, I can't do it without documentation. If I can't Google then I'd have to look at documentation and my ebooks.
Why?
Well, I work with a lot of languages and frameworks. I can't commit all these technologies to memory.
I developed most of my iOS game without internet access (I did it mostly on a train).
I actually did this twice - once using a Mac, xCode, swift, and spritekit. Then the exact same app again using a Linux machine, text editor, C, and SDL2.
Doing things in C was far better - I just opened up the relevant SDL header files when I needed information, and was able to get basically everything non-iOS specific up and running without any internet.
I definitely drew on a fair bit of experience and hunches (e.g. writing audio synthesizers from scratch often involves picking a bunch of magic numbers, and if you pick them wrong it can sound completely awful).
Now I have a mac laptop again, I still would lean towards C+SDL2 over swift+SpriteKit (though I do continue to experiment).
One of my fondest memories programming was on a sailboat crossing the ocean.
When ever I hit doldrums, I'd pull out the laptop and work on the app to pass time. Luckily I had a good collection of gems locally that I used for reference.
Yes, I can and I have done it before, under time pressure.
I was one of the original employees of k12.com, working as a Sun/Solaris sysadmin and late one night the "web team" had a next-day deadline to make a registration system work.
There were press releases and print materials being released the next morning with addresses and registration forms that needed to work and their big bloated "stack" was not producing anything workable for any of them.
I ftp'd over an old, personal copy of cgi-lib.pl and hacked up a little web page that dumped to a flat file and cc'd an email address with every registration.
It took about 45 minutes and they used it for a year.
I never thought that there is a benefit to working at a shop that is using an obscure, poorly documenyed in-house language. Since most of it is in conventions and institutionalized knowledge, the "core" of it that we actually use/type on a day-to-day basis is so small that it fits into everybody's mind, and it's getting constantly refreshed as well. No temptation to google anything, there wouldn't be answers anyway. And our in-house stackoverflow clone died from not being used years ago.
Wow this sounds terrible. But it's actually an awesome place to work at!
Yes. I'm a mobile and web developer of 15+ years and I often will just hit File->New in Dreamweaver and proceed to create the JS, CSS, PHP; etc, on its own while prototyping quite often without the need to use anything but my own head.
Granted, that knowledge came from, originally, reading a ton of books, which; as the Internet can be much, much more up-to-date with ever-changing APIs and technologies, I am happy to have as a replacement to heavy and quickly out-of-date books - and also came from 15 or so years of practice.
We as developers should be fighting back against this - not by memorizing everything (that would be impossible with the number of frameworks, tools, and languages that exist), but by relying more heavily on good documention, bookmarking that documentation, and finding answers ourselves rather than relying on Google. This means we will have greater expectations of projects to deliver good documentation, and empower ourselves to be less reliant on a global tech giant just to write software.
'Before Google', it seemed to go something like this:
* Ask coworkers
* Look at documentation
* Try things out
Things don't seem way different today; we've just replaced the first two items with a search engine.
There is one difference I've noticed, though: an instant-access search engine makes it easier to 'fake' your way through something with less skill and knowledge. In the long run, this seems detrimental to professional growth and development.
Before google it was exactly like that. When I was younger and junior and eager to build whatever my boss wanted, coworkers would rely on each other for figuring things out. No fear of being labeled “incompetent”, “unskilled”, or “underperforming”. It was more team oriented.
Trying to reverse-engineer some crazy DHTML javascript algorithm used by one site so we can reproduce it in ours (for their members portal).
Coworker came to me asking if I could help her deconstruct the hair ball javascript code into something meaningful. It used variable names like “a, z, t1” etc.
While you can quickly google something and get back a barrage of answers, usually on the same solution, this is software we are talking about - there isn’t a One True Way and there never will be. The more we try to make a “right way to do things” we invent a new way.
Do I google when coding, sometimes. Do I need to? No. Does it make me faster to put my thinking cap on the wall and just go with #1 SO answer? Unfortunately yes.
If you can, the app is too simple. The soft-ness of software means you always have a lot of choices about how to do things, and those things are a very deep tree. Knowing one specific solution is generally not that useful, because softness is about malleability.
The real skill is understanding what you're making. What are the constraints, and of those which are hard to satisfy? Which choices are binding once committed? Everything else is fill-in-gaps, or choose a sane default: "Page needs my corporate background color, can't remember the CSS for it. I need a DB, let's go with pg. I need to make sure passwords are done sanely, let's double check the django docs. For some reason I keep getting an error with the page, let's google it."
It's also a skill to recognize when you have to backtrack on your choices. Maybe you missed the bit where it says "don't use this lib multithreaded" and you have to find another. With some experience your backtracking won't take you all the way back to square zero.
Personally, I can get a SPA running in Elm without using Google. I have to Google react-router if I use React instead. But that isn't the value I'm getting from this thread.
This post, along with the talk of interviewing and webapp development in this thread, is giving so much anxiety that it's really galvanizing my desire to leave this industry and never look back.
I couldn't either. No doubt many could. But that's not the point. What a wonderfully posed question with such broad relevance, especially for Australians ATM vis a vis the government's current attempted tussle with the omniscient platform. Please let this discussion grow. This is just a thank you message. Cheers!
.NET is the kind of stack I can come back to after years of not using it and fit right back in without googling. Even a 10 year old book would still be mostly relevant.
I think I'd be able to do this, especially from my desktop where I have the code for many basic web apps to look at if I need to (which feels a bit like cheating). I am also not a professional web developer but I make random websites sometimes for fun.
Great article. In fact the same conclusion brought me to create Assistant extension for Visual Studio Code. It allows you to document your know-how and display it in the source code while you are writing it.
It is not only great for technical knowledge but also for project know how. Also it does not require know how to be introduced to the source code, it is stored separately.
It increased my productivity by 30% because I am not distracted by googling answers again and again.
There is a difference between "how do I do this?" And "how do I do this?"
I know without even thinking precisely how I would assemble a simple web app - I do not need help to understand what needs to be done in turns of building blocks. I.e. architecture, how it all hangs together, how data is stored and transmitted etc.
But do I need to search specific arguments for a library function call, some DSL syntax, or other reference material? You bet I do - time is too short to memorise that sort of thing, and totally not worth it IMO (especially since tech moves fast - what is relevant today, is obsolete and dead next year)
I thought this was going to be more interesting. There's an important distinction between consulting online documentation and googling for "how do I do this very specific thing?"
Of course you can't build an app without consulting documentation. Why do you think references even exist? Nobody can store all the knowledge in their head.
But doing it without the very specific questions (ie. Stackoverflow), that's a different question. This should be possible imo. But in my experience it is increasingly not possible. Many, many so-called engineers reach for this as their primary source of information these days.
Using Rails with offline documentation for the gems I use and the rails guides in Dash.app, I can, yes. As long as I don‘t run into any brand new problems after a version upgrade.
As soon as I use JavaScript/TypeScript and Vue, no way.
I suspect this has to do with the level of integration of the piece of tooling. I used to write Rails apps many years ago (before SPA was a thing). I realised at some point that I had memorised all the methods of both Ruby and Rails by that point. Yes, there were certainly edge case tasks where one was using a new library (auth comes to mind) where heavy googling was necessary, but there was virtually none for the day to day stuff.
React on the other hand never got there for me. I suspect that it’s the many libraries awkwardly glued together (ugh react-redux), with often complex APIs that makes it difficult.
This was done in the past by books. But those days when I’m writing and many languages where some of them aren’t my dailies. This can save me a lot of time.
- cleaner/modernize:
This is equivalent to asking a colleague that’s more seasoned. At least with C++ you discover there’s a brand new std that does that cleaner.
- issues:
We live in a package / deps manager days. Sometimes tiny change breaks your tools.
Many times the web searching could save you day(s) of hunting issues that broke due to some dependency or package update.
While the same was also in the old days. You’d naturally had less web deps and less frequent updates.
- official docs:
Embarrassingly I often neglect to even learn doc tools available to me offline and instead rely on google for even the most basic stdlib documentation.
Well not using node.js, but with Java and a modern ide with autocompletion I can definitely do it; as a matter of fact that was the normal way we worked for a long while, and it's still probably the reason why today I steer clear of framework with too many undocumented corner cases or with too wide a surface to understand it all.
Without documentation and autocompletion tho it would be a messy process of trial and error, I wouldn't even call it programming, albeit I've done it in the past, with the PHP toolchain of old. Hated every minute of it tho.
I don't think I've ever been able to write software without an API reference, and I've been at it since the (late) 1980s. I guess it depends on what you're Googling. Sometimes I can work out a way to do something, but what I really want is the idiomatic way to do it. No way to get there but to look it up. Or I need to know some specific fiddly bit about how a function behaves. That's a reference lookup. If I'm Googling "how to reverse a linked list" ;-(, well, that's maybe not so great.
Let me give you an example: I often search the internet for the ASCII table. I don't think it's a fault, that I do not remember it. Even if I had it stored in my computer, opening it from a computer would not be as fast as looking it up online.
Another example: the setTimeout(a,b) in Javascript has two parameters: the time delay and the function to call. I never remember which one is the first, so I look it up every time.
I can type without looking at the keyboard. But I believe there can be great programmers, who need to look at the keyboard when they type.
He thing about web development I found is that how most new users try todo something is inevitably insecure, inefficient, or whatever. It’s too complex to memorize all the steps and there’s invariably a module for what you need. Most people have a time crunch so don’t have cycles to write from scratch. If somebody has done what you’re trying to do, and that’s usually the norm, then google will get you to a solution faster. It’s never feels like you do any of your own work at the end of the day as you’re opting and pasting mostly.
I love googling and stackoverflowing. I know a great deal, but I'm like Kelly Bundy; I can only hold so much in my pretty little head.
I generally forget stuff a week after last using it, and am googling even the most basic things.
In a few days, I'm gonna have to put my Swift code aside for a week or two, while I modify my backend (PHP). I guarantee that I'll be like duuu-uhhh for the first couple of days, with serious Google-Jistu katas.
Then, the same thing will happen again, when I switch back to the Swift frontend.
I tend to avoid using dependencies, so I write a lot of code.
When I was in high school my family was poor and we frequently didn't have internet. I relied a ton on the version of mdn I downloaded at school and wrote questions down for things I needed answers for the next day as well as things I might need answers for over the weekend. It made me work on things in a very different way than today but it's one of those "I went through it and it was formative but I don't think it's necessary for everyone to do so" type things.
I could if I had the framework docs. I have also made a few boilerplate projects to make it easier and faster to get started with simple stuff like Flask modular app and tornado consumer daemon.
If I had a book on each framework I use with their docs reference material I could do without Google.
It's a fun question but can it really happen realistically? I mean if there is still a demand for web apps then there is most likely some sort of way to index the existing web and search it. Even if that isn't google anymore.
So the crucial thing for me would be: are the reference docs for may language/library/OS considered external resources? Can I type man in a terminal? Can I use a Python repl to explore the data structures? If so, then, yes, I can. But I had to go double tab on http.server to remember what was in there.
I used to commute on a ferry, and was offline for that commute. Often I would do some coding (more often I was writing), and a tool like Dash that put reference docs offline was essential.
I doubt most developers can do this. Especially if it involves all the configuration needed to deploy the site. I don't think they need to anyways. Most development involves a small amount of custom application logic and a large amount of hooking things together and manipulating data into the right format. Any programming of this sort requires lots of documentation checking to make sure everything is integrated properly.
Can you build a house with one arm tied behind your back? I'm sure someone theoretically could, but not why anyone would. Is relying on having two hands a detriment to being a handyman? Does such a person lack critical expertise?
Professionals use the tools at their disposal. Instant access to the sum of all human knowledge is an incredibly powerful tool, and you don't get any bonus points for leaving it in your toolbox.
I can't and I don't care. I consider my programming skills to be 100% based on my ability to know what to search for and not necessarily on my ability to remember trivial things like the exact sequence of things needed to initialize a framework or whatever.
What I care about is having good foundations that help me to undestand what exactly I need to look for and that's by itself and invaluable skill.
Could we write software without using one or two reference manuals back in the 80s? I couldn't.
I remember I used the X11 manuals, an encyclopedia sized serie. Plus the manual of every language I used. Plus the Unix man pages, especially section 2 for system calls.
Plus books about basic algorithms.
All those resources moved online and we use far more libraries now. I don't expect to be able to do anything without an internet connection.
This is mostly a property of your choice of framework.
Many contemporary frameworks come with a project generator, because setting up a basic project is so tedious that it has to be automated.
All these files are configurable, and likely the default configuration is insufficient for your goals. You're starting out with a bunch of technical debt.
It's no wonder if we have to consult online resources to get anywhere.
Title is misleading as they wanted to do it without any online resources, including online documentation. Using docs is a lot different from googling. I'm not surprised at all that they couldn't do it without documentation. I would have been a bit surprised if they couldn't do it just without google/SO, though I would have blamed that more on poor documentation.
I definitely cannot do this, but the tool that gets me close is using backsearch to find old terminal commands. This might sound really basic, but I have worked with surprisingly tenured devs who jaw drop when I show them backsearch (yes, really).
I'm personally a fan of fzf. ctrl-r has saved me many google searches. If you're just getting into software development it's a lifesaver.
I could do it, but I would likely have to have access to Dash [1] which is actually quite useful when you're on the go. I am a proud purchaser of Dash (though not at all affiliated with them), because it comes in handy when I'm somewhere with little to no internet.
I rarely do google at all - DuckDuckGo is usually more than enough.
Seriously, web search is usually the most efficient way to find documentation. This also works for finding math definitions / formulae (usually on Wikipedia) instead of skimming through books. In all, consulting literature sounds legit, and web search is usually the fastest way.
Yes I can and I did after the enyojs framework went completely bye-bye and replaced with an entirely different framework called enact based not on enyo but on react! It reminded me of the time Qualcomm decided to one day purge all brew documents from their website. Google is fickle. The truth is in the source code of whatever you’re working with.
There's so much involved, it's almost impossible to do many things from memory, especially across all different languages, frameworks, tools, platforms, etc. In the old days (for me, late 80's to early 90's, programming without the Internet), I remember having books next to the computer. Things were much simpler then.
As others pointed out, it doesn't matter in a professional setting since everything tends to be very well organized. But I realized when I work on solo projects, it helps a lot to be fluent with the tools I use. Because when I have an idea, I think it's better to implement it swiftly, otherwise the enthusiasm fades :-)
Yes. It’s not that hard, so long as your definition of “basic web app” is server rendered HTML and CSS. I could certainly do that from scratch in Ruby without Google. If I didn’t have Google I wouldn’t want to use Rails - even though I know the framework well, there’s a lot there to remember.
But I would expect anyone who is (a) proficient with a high level programming language and (b) has ever built a web app from scratch would be able to say yes to this as well, so long as they get to work in the language they know well.
The author of this post specifically does not fit this criteria:
> To be fair, I'm not a web developer so I'm not entirely shocked by this. I only have the itch (and time) to throw together a small web app about once every 6 months.
Also, JS is part of the problem. Even avoiding the chaotic world of front-end by assuming strict SSR using something like Express, Node would be one of the more difficult ecosystems build in from memory, because JS doesn’t have the level of standard library that most languages do, because it changes so fast, and because it’s drunk the micro package kool-aid so hard (aka left_pad).
But for developers fluent in Ruby, Python, Go, Java, PHP, and probably several others, I would think this is a very realistic ask.
After two years of doing Rails I still regularly have to look up methods like 'select' on an array / active record collection, the various group, group_by, find, find_by, max, max_by, tally, partition and loads of different Ruby or ActiveSupport methods, the routing DSL, migration-related methods...
I couldn't, some undoubtedly could, but that's not the point. What a wonderfully posed question with much broader implications, especially relevant to Australians ATM vis a vis the government's attempted tussle with the big people. I hope this discussion spreads. This is a thank you message. Cheers.
Haha, no. The way I see it, I can't remember everything so for most things I bias towards remembering the index and for some things I bias towards remembering the content.
In practice, whether I like it or not, the content for frequently performed tasks gets memorized. So I just need to keep the index well tended.
Most of the time, we're not starting a project, so making a basic web app isn't something most of us do often. That said, there's still an over-reliance on google and the web. A better test would be: can you close tickets in your current project without googling?
I think I could do it if the front-end is all custom HTML/JS/CSS and the back-end is just Express. Might have to cheat and use a local file instead of a database. Could be an interesting exercise.
Does looking at old code I've written and have locally count?
What about offline documentation like help() in python?
Without either of those it would be iffy. I could probably do something that updates data consistantly but using a serious database or doing authentication correctly might be a stretch.
It is utterly bizarre to me that not only are the answers almost universally “no, I couldn’t” but also, “no, and it’a totally ridiculous to expect anyone to be able to.”
I make myself do it occasionally just to make sure I’m not getting too lazy about paying attention to details. I can build a basic web site in both golang and nodejs, from scratch, using a plain editor with no autocomplete. It’s actually a very good feeling. I can even do a react app from scratch if we aren’t counting webpack config.
My last proof of concept project at work, the server side was running behind so I spit out an extremely basic but totally functional node server and frontend in an afternoon without using any fancy frameworks and the Java dude was still trying to build the same thing three days after the demo was done. It’s pretty useful to just be able to write it straight from your keyboard without having to go googling a bunch of stuff.
Why is everyone acting like it’s impossible or unreasonable?
The meaning of and technology needed to build a “basic web app” is in a continual state of evolution. Therefore, googling is not so much required due to a lack of knowledge but rather due to that this knowledge needs to be continually kept up to date.
I regularly disconnect for a hacking session, reduces distractions and I find it often helps me come up with simpler solutions then building something up out of what's already there.
Its also nice to spend some time on my boat and still get some work done :)
I was going to post something along the same lines. I know my framework, I know my code, and I absolutely can create a web app offline without using google.
I also enjoy boats and working from them from time to time.
A lot of people missed the fact that good intellisense style code completion, local docs (rdoc, what have you) are still viable. Also having some PDF’s on your machine of programming books helps you not google for solutions.
As a sidenote on the availability of Google to look things up, how often do you find yourself stuck on a problem and locked into a result bubble where Google keeps on showing you the wrong results, usually spammy articles?
Lawyers aren’t expected to memorize all (if very much at all) of statute law. Doctors prescribe using a computer-system that autocompletes and checks for pharmaceutical interactions. This is no different.
maybe the browser devtools should be shipped with typescript definitions and mdn docs. If you think they are bloats then another thing to look into would be decoupling the devtools from the browser
I agree, unfortunately MDN has it's own type definition format "Web IDL". This means community must write the type definitions twice, once for specification in Web IDL and second time in TypeScript to get proper IDE support. (There is a converter, not sure how well it works)
Naturally the Web IDL is not as nearly as sophisticated as TypeScript so it would be nice if they could improve the TS to work as a replacement for Web IDL.
Level 2: Can you do it without building / testing every now and then?
Level 3: Can you do it without syntax checking, IntelliSense, etc.?
Level 4: What about removing DEL and BACKSPACE?
Reminds me of earlier this week when I wrote an algorithm from memory. My coworker pointed out a library we had that did the same thing. Sometimes, knowing things by heart isn’t the best.
I'm guessing you could use a .pdf reference manual for a specific language instead of googling, but it does feel like frameworks and workflows have gotten more complex overtime.
If I really need that capability, I personally would download a LAMP/WAMP/MAMP setup with all the docs downloaded but needing to Google things isn't inherently bad.
I think one of the questions beneath the question is how much would you be able to justify paying each month for a subscription-only Google? How about Internet access?
People used to buy big books and stick to languages with more batteries included. I still remember the big huge fat Java book I bought when I was in high school.
I think one question is how much would doing it with this arbitrary restriction improve the experience for users of the site - for example I wouldn't be able to add tracking of any sort, or any social media icons to like and share content because I wouldn't be able to find how to add them without searching.
Yes, I definitely could do it without Googling(TM). There's plenty of search engines and little need to advertise one in particular by coining a word just for it.
Sorry about the snark and completely missing the point of the article.
Yeah, the googling point is kind of strange in that way.
My first thought was, OK I'd probably go back to some projects in my bookmarks db that seemed interesting last time I was looking into web apps. HTMX maybe. That project has some good examples in the docs.
Googling can help in some ways, but it's also casting way too wide a net in others, especially if you keep repeating that step. It's like walking out into the street and shouting, "I WANT TO BUILD AN APP" infrequently, and then wondering why you keep doing this instead of building apps.
Perhaps it would help the author to think more about creating their own process for selecting, refining, and testing methodologies first, then ramp up to building an app second.
The corollary to this is can you write a simple c program without a compiler and have it do the right thing and compile without syntax errors the first time.
I probably could at some point. It's pretty easy: you do the right commands to generate a Java project from a maven archetype or to start a Rails project, you hook up your git repo to Heroku, tweak some HTML. Today if I wanted to, I could memorize the sequences to stick some node.js inside of an AWS Lambda.
There are at least a few problems with this:
1. I don't have to create a basic web app frequently, so I've forgotten the commands. They're easy to find with googling. It's not worth my time to memorize them. (When I was learning to program in the 90's my family didn't have Internet access yet, but if you replace "google" with "looking through helpfiles or programming books," you get the same effect.)
2. The kinds of webapps professional software engineers build generally aren't "basic." Webapps at the professional level are complicated. Rather than "an over-reliance on documentation indicate a lack of critical expertise that will ultimately result in considerably lower job performance," reliance on documentation seems to be more about having more tools at our hands to build software that's more maintainable in the long run. We have frameworks/services that handle payments, security, storing data, and so on for us. The trade-off for delegating to others solving ancillary problems for you is that you have to read their documentation.
3. More and more in my career, I find myself not just googling technology but to try to understand business domains. Our job isn't to tell our boss "Here's a webapp!" Our job is to solve a customer need, and that involves understanding who the customer is. Could I shovel some code out the door without googling around for something? Maybe, but it probably wouldn't be very good.
4. All else being equal, I'd rather work with an engineer who is good at finding information quickly rather than someone who insists on figuring it out. Google is not some magic mind reader - you have to know the names of some of the things your trying to do, you have to assess the likelihood of an approach is worth trying, and even if you do get an answer from Google, you'll inevitably need to adapt it in some way to meet your need. Sometimes, it's not enough to look it up in Google, you have to reach out to other people, and you need to know how to formulate your question to help others help you. There is skill involved in finding information.
5. I look up things that I already know all the time. Just because you know something, that doesn't mean you shouldn't double check that you know it as well as you think, or that there isn't some better answer or solution. For one example within programming, I'll look up articles I read 6 years ago that do a good job of explaining an idea to someone before I give feedback on a code review and I have to explain a similar idea.
So, engineers don't just memorize stuff for the sake of it. Anyone reading this article shouldn't feel like they're not a real engineer because they can't do what the author suggested.
This is slightly perplexing. I love the intention of this post. Some thoughts..
I feel one could argue that there is a chicken-and-egg problem here. Nobody could code anything without a reference to start from. But, then, who developed the first language without a reference?
Ah, there - the start of something - those who invented the first programming languages - the very concept of "stored programs" as punches on a card, for example - assembly language, etc. - they did not have a reference. They invented the reference. But, it was also, by today's standards - much "simpler" and a much "smaller surface area" - while probably quite technologically complex and difficult for those at the time.
But after that, everyone else, who didn't invent the technology, but was rather using it.. was therefore - by definition - using a reference. Standing on the shoulders of giants... how else to learn?
For instance, I learned BASIC coding first by studying other people's examples - in magazines, by looking at code that came with my first compiler as samples, reading books. Same way I learned Pascal and C++ - the tooling/IDEs back then couldn't "help you learn" with autocomplete.. you learned when you wrote something, and it either compiled or it didn't. You learned by using "help" or books or talking to people or looking at examples.
I'd argue that even those who invent most things today are inventing it at a higher level of abstraction, and therefore still looking at references for levels below the level of abstraction they work at.
So.. "can you make a basic web app without googling"? Well, actually, yes, sure I can. But that is because I learned HTML, CSS, JS (and supporting languages like Perl, PHP, etc.) when the surface area was still small - from the Internet itself, by looking at examples and reading things like the entire HTML specification when it was smaller. Then I memorized it by doing it.. a lot. Then things changed, but a lot of the basics are still possible to do today and still work. That said - "will that basic web app work in every browser platform or any every server/OS platform that exists"? Well, if you stick to the true basics, possibly yes - but, this raises the question of technology and implementation variability and complexity.
I think the bigger question being posed here, isn't the headline... it would be better to ask, "does it matter if you can't make a basic web app without Googling"? There, I think, is the point of the post - and - yes, it matters in a lot of ways. But if you are coding for the web - presumably you are already using the web.. so.. perhaps that specifically is not as important as the next bigger question...
"Has writing code for modern systems become so diverse and complex, and the surface area so large, that it is difficult to build systems? Has the variability and diversity of our platforms become so large that it is difficult to build once/deploy many with certainty?". There again, I feel, is a much deeper and more interesting question. This too can be answered simply - avoid complexity and choose simpler languages/platforms that accomplish your goals, learn their surface area, and do your work. But, this might be more difficult/non-obvious to those just getting started - and there some good work could be done to make it more accessible.
And here we look to things, for example, like WASM - trying to build simple primitives that can work on nearly any platform, upon which many complex languages can live - engineering solutions to attempt at reducing complexity based on variability and diversity of platforms and implementations.
This question... surely relevant during this time of resurgence of "low/no-code" platforms and in relation to what we might have once thought of as "4GL" (or beyond) programming languages and related implementations/platforms.
> To be fair, I'm not a web developer so I'm not entirely shocked by this. I only have the itch (and time) to throw together a small web app about once every 6 months.
A better rebuttal is, do you make a [small] outdoor irrigation system or fix a [simple] head gasket "once every 6 months"? I added the adjectives to better compare to his stated "small web app".
I think it's reasonable to expect someone who "throw[s] together a small web app about once every 6 months" to be able to do it without googling, but it isn't how software development is taught. When studying something to master it you start with the basics and do them over and over until you understand them. We don't (tend to) do that in software development, I think for two primary reasons: 1) there's more "important, urgent" things to do and 2) things change so quickly that probably half of what you learn today will be unused in a year (of course if you learn the very basics those rarely change, but I'm talking about the things we all know change so frequently, but were good decisions at the time)
I am wondering are you using some external framework angular/react or just "only" js?
"Or even deeper, does an over-reliance on documentation indicate a lack of critical expertise that will ultimately result in considerably lower job performance?"
I don't think so, and I don't know why relying on documentation would be bad.
In a more general sense even for making a todo list app I'd imagine the fundamentals aren't changed even across frameworks e.g. of when adding a todo it needs to be added to some sort of a list.
So in my metaphor, that would be like perhaps a gardener assembling irrigation, or someone in a mechanical trade fixing the gasket. There's still a ton of specific knowledge to the job in question.
Of course, it shouldn't be that Google specifically is necessary - just some literature or reference source (i.e. consulting with someone).
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.