Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Should beginner-oriented Q&A here include basic use of a terminal (command line) for developers?
It seems that year over year, computers constantly get easier to use, and it becomes easier for people to start learning to program who have never touched it before. This comes with the consequence that increasingly more new programmers have disturbingly little (and increasingly less) understanding of how computers work, generally.
We're now long past the point where new programmers can be reliably expected to be familiar with the command line, concepts like a "current working directory", etc. Indeed, some of them don't even seem to have a solid understanding of the computer's filesystem (never mind drive letters or reserved characters or the text encoding of paths etc. - I mean that they don't even seem to grasp the concept of files being contained in directories that form a tree.)
For one specific example, there are well-known examples of beginning Python programmers expecting to use command-line commands within the code (12.5 years old and 1.2 million views, BTW), or vice-versa (sort of; it happens much more often when trying to treat the script as executable without setting that up properly, but there are certainly exceptional cases). Python is especially susceptible to this confusion because it's currently the default choice for new programmers and because there's a command-line REPL.
Would a question about the "trying to use Pip in the REPL" issue be on topic here?
More broadly, where's the line between this site and Power Users, when it comes to fixing these elementary issues (where a new programmer needs a proper understanding of how the computer works before it's possible to start programming)?
3 answers
IMO we should expect questions to have a single main point. Answers should address only that point.
If the answerer feels like they are introducing some new topic that the asker might not know - so what? People who read the answer (not just the OP!) can just search for that topic online or ask another question about it. Just don't be stealthy about introducing them - if there's searchable terms you can drop, do so.
If the asker has a bunch of tangents or confusions about things unrelated to the main point, he should be linked to other questions about those in comments. Once the confusion if dispelled, if there is no real question left, it can be closed. If there is still a main point remaining, the question should be edited to focus on that and answered succinctly.
We should not attempt to statically link half of all knowledge in every answer. It's far too much work to even read such answers let alone write them. People who come to QA sites don't have the patience to read a textbook, otherwise they'd be doing so.
- The 3 examples from SO in the OP are all XY problems.
- "Why does "pip install" inside Python raise a SyntaxError?" - X is "what counts as valid Python syntax", Y is "how do I install packages"
- "./xx.py: line 1: import: command not found" - X is "what is this bash syntax error", Y is "how do I run Python code?"
- "'From/import' is not recognized as an internal or external command, operable program or batch file" - X is "what is this cmd.exe error", Y is "how do I run Python code?"
- The example from here IMO is begging the question. I submitted an edit to this to make it less chatty and more to the point, if that is accepted it would be a normal question, not a "beginner question". Btw beginner topic != beginner question, it's about style not topic.
- "trying to use Pip in the REPL" should be closed and linked to "how to use pip" and "how to use REPL".
More broadly, where's the line between this site and Power Users, when it comes to fixing these elementary issues (where a new programmer needs a proper understanding of how the computer works before it's possible to start programming)?
Technically, the scope of "Power Users" is "everything you do on a computer". You can imagine how some of those questions would end up with a tag coding
, defined loosely as "anything about doing X in Y programming language". For practical reasons, coding
was turned into a separate site rather than a tag. There is no qualitative difference between the questions on either site.
The line should be this: If the question is about doing X in Y programming language, it should be on this site. If not, it should be elsewhere. If it's borderline (like pip commands), it should go on whichever site has more existing questions on that topic.
"Programming language" is used loosely here. So for example, JSON or HTML are not really programming languages, but it's the same idea (still "coding") so they should go on here.
0 comment threads
Yes, tools used by developers are on topic here
From the top of the front page (emphasis mine):
General Q&A about programming, scripting, software design & architecture, process, tools, testing, and more.
Responses to the finer details of the question
Understanding computers is not necessary for starting to learn programming
Different programming languages require understanding of different things. A C programmer may have a certain mental model of memory layout, which a Python programmer can do without due to the abstractions provided by the Python language. As they learn more, the Python programmer may find that they need to think more about how the machine works, in order to achieve things they could not achieve as a beginner. As the C programmer learns more, they may find that their mental model of memory layout turns out to be a sometimes misleading approximation, which needs to be modified for more advanced work.
This community is for helping people who are developing software, at any level and in any programming language.
Confusion can happen even for someone familiar with the terminal
The question linked as an example, asking why pip install
doesn't work in the REPL doesn't seem that surprising to me. Even for someone familiar with the terminal, it isn't immediately obvious to me why PIP couldn't have been written in Python as a function. The fact that PIP happens to be a terminal command seems more like an arbitrary choice than an inevitable conclusion.
The command doesn't look like a Python function, due to the lack of parentheses, but overlooking that could result from being a Python beginner, rather than from being a terminal beginner. (Also, the question is from only 3 years after the release of Python 3, when most Python programmers were still using Python 2, which used print "hello"
rather than print("hello")
, making it even more feasible to mistake a terminal command for a Python command.)
Also bear in mind that if Python is not someone's first programming language, installing using the terminal may be surprising. For example, someone coming to Python from R may expect all packages to be installed using functions.
I wouldn't want to assume that a question is beginner level, and I'd want beginner level questions to be welcomed in any case.
Askers don't know what their question is about
The example mistaking a terminal command for a Python command demonstrates that the asker did not realise they were asking a terminal question. I wouldn't want to exclude a question because the answer happens to be "use the terminal" any more than I would want to exclude a question because the answer happens to be "there's a typo". Either way, the question is still about programming.
Even when the question is explicitly about the terminal, it's on topic here if it relates to software development.
There is not a line between different communities
Something can be on topic in more than one community. I could ask a question about a recipe on either Cooking or Writing, depending on whether I want culinary feedback or grammatical feedback. Similarly, someone trying to use existing Python software may ask on Power Users for help in getting it running, using the terminal, while someone trying to modify that same Python software may ask here on Software Development for help in using the terminal during testing.
Generally, rather than ask "Which community does this question belong in?" I would prefer to ask "Which community does this asker want answers from?".
0 comment threads
Shell scripts, BASH, batch files, PowerShell etc etc are all on-topic here and so questions about command line commands ought to be as well.
We may however require the question to include enough relevant details like which OS, which version/distro or otherwise the question is probably off-topic.
None of this is really mandatory prerequisite knowledge for programming - I'm very rusty at it all personally. The overall trend in programming during the last 20 years is to move away from command line and make files etc towards graphical IDEs that handle the linking and building. For very sound reasons: with IDEs, the programmer can focus on programming instead of cumbersome side tasks such as writing make files or linker scripts. (You can of course still tweak builds, compiler options etc when there's a need, but you typically don't have to.)
It may be meaningful to assemble some sort of help post with minimum expected prerequisite knowledge before starting programming. However, coming from the low-level side of things, I would rather list things like binary, hex, boolean algebra, basic electronics etc as prerequisites before learning programming. So these prerequisites are quite subjective depending on what type of programming you end up doing - "programming" is a really broad topic, software engineering even more so.
2 comment threads