A lot of programming is ritual. I know what I need to get done, I just need to get the magic incantation to get it done in language X or in framework Y or with tool Z. There is often not much thinking involved. I’m not looking at stack overflow for “how to do breadth first search”. I’m looking on stack overflow for “squash commits” because I don’t do it often enough that I’ve memorized the particular incantation I need to do it with the versioning system I’m currently using. Or, to paraphrase Holmes, I use stack overflow because I have more important things to put in my memory.
I know what I need to get done, I just need to get the magic incantation to get it done in language X or in framework Y or with tool Z. There is often not much thinking involved.
I think it depends. Each language, framework or tool has its own flavour, its own way of doing things. If you regularly use a language/framework/tool, you should understand clearly how a certain thing can be done with it and why it is done the way it is. The solution should not be a magic incantation, as you call it. On the other hand, if you use that language/framework/tool sparingly, it is perfectly acceptable to do something with it and treat it as a magic incantation.
Other than that, I completely agree with everything else.
If you regularly use a language/framework/tool, you should understand clearly how a certain thing can be done with it and why it is done the way it is.
I am a long-time contributor to Django. I’ve written both code and documentation for it. I’ve served on the framework’s technical board. I’ve written articles on it and books on it. I’ve given advanced seminars on it that peek under the hood into how it works at a deep level.
I still routinely have the Django documentation open in a tab when I’m doing something that involves Django.
Of course, you don’t remember everything, and that’s human. But I bet you understand what you search and find in the documentation, and that’s what I was saying in my comment.
I don’t know; I’ve been programming Go daily for almost five years, and sometimes I almost know how to do something, but either 1) can’t remember something simple, like the specific package a function is in, or 2) just can’t be arsed to do it myself and it’s easier to copy/paste some lines of code from the first search result.
So, for example, I could write a simple function which, say, returns a random element from an array; it’s just a matter of looking at the documentation and finding the best function. Or … I can just look it up (and possibly choose the best option out of several). It saves me the time and brainpower about thinking about all of this, since there’s probably a few ways to do it wrong too I have a higher chance to get it right (not that SO is always correct either, of course, but at least it has some feedback).
With Python or Ruby this is even more helpful, as they have a larger standard library and many more useful helper functions for stuff like this. It’s hard to remember them all.
It’s a “magic incantation” not because I don’t understand it or because it’s “magic”, but because what I’m really focused on is not choosing random elements from an array, but solving some real-world problem. The “magic incantation” is just plumbing to get that job done and I’d like to spend as little time on that as reasonable, so I can actually solve useful problems.
I agree, what you described doesn’t fall into the Stack Overflow Antipattern. During the process you understand what you’re doing, you’re just delegating some small tasks to other minds (users who had posted answers on SO, for example) in order to solve the problem you’re tackling faster.
Maybe I wasn’t 100% clear in the comment I made above (and in the post in general), however I was not arguing that programmers should remember everything they need and shouldn’t seek information online. What I was saying is that they should understand what they’re doing (at different degrees, it depends on a lot of different things: e.g. time available or, as you said, how much a problem is tied to the real problem I’m working onto) and not use online resources mindlessly. It is important to understand when searching is a good choice, and when it’s not. If you do that, then you’re using SO (and online resource in general) in the right way.
I started my blog less than a week ago, and a few days ago I wrote my first post. I’ve already submitted it to lobste.rs, however I’d really appreciate some feedback on the writing style since English is not my mother tongue! Thanks in advance.
GitHub first put there the most important open source software
I feel it would read better as “GitHub first put the most important open source software there”
Probably some emperors are unknown to nowadays’ history because everything about them got lost.
“unknown to nowadays’ history” feels odd to me, how about “unkown today”?
This is the 1st post of the blog
Would suggest to use “first” instead of “1st”
English isn’t my native either, but I felt the article was well written and conveyed your thoughts nicely. Keep writing!
Thanks! I updated the article according to your suggestions.
“unknown to nowadays’ history” feels odd to me, how about “unkown today”?
Much more clear and simple. Sometimes it seems like I’m trying my best to find the most convoluted way to express a concept!
I think my dotfiles are in the vault since I updated it within the 80 day window. It’s strange that something so personal—it’s a glimpse into how I work, and similarly I’m the only person who’d find it useful—will last so long.
It’s also kinda interesting that my dotfiles have changed since then. I’ve already outgrown the version of the dotfiles that will outlive me.
I think my dotfiles are in the vault since I updated it within the 80 day window.
You can check whether you contributed to the Arctic Code Vault by visiting your GitHub profile. You should get a badge in the left sidebar under “Highlights”. In addition, if you hover it you see which repositories of yours are in the vault.
It’s strange that something so personal—it’s a glimpse into how I work, and similarly I’m the only person who’d find it useful—will last so long.
Yep, it’s really strange. I think they’re definition of active repository is kind of wide, I wonder how many “useless” repositories got in the vault.
if you hover it you see which repositories of yours are in the vault
The format seems to be “{{three most starred repos}} and more!”. I don’t see a way to get a complete list of repos that went into the vault.
I wonder how many “useless” repositories got in the vault
A lot of archeological artifacts are items people have thrown away—often because they broke or worn out. I think future historians may find dotfiles more valuable than programs because it’s a glimpse into how people actually used computers in our time. If someone accidentally added their command history files, that’s even better.
I got my ticket to an “eternity in obscurity” much earlier, by being a co-author in some papers and one patent (now expired, and it wasn’t a software patent anyway). There’s a tradeoff of course: on one hand, it’s in (more or less) publicly accessible and searchable archives, so someone can stumble upon my stuff. On the other hand, it’s unlikely to outlive our civilization as we know it.
In any case, I just mean I had time to contemplate this issue so an arctic vault badge wasn’t thought-provoking to me. Most people are immortalized exactly this way: imperfect and impersonal. Take a paper from the 60’s, and chances are most (if not all) authors are dead by now.
Then, suppose there are three authors who did the research together, a PI and a couple of PhD or grad students. Student A wrote the manuscript, student B designed a key experiment but later dropped out. Now student B’s name is kept in the journal copies for as long as academic community exists, but no one can learn anything about the contributions or even the writing style of that person.
Myself, I guess I came to terms with it.
On the other hand, it’s unlikely to outlive our civilization as we know it.
What do you mean?
Now student B’s name is kept in the journal copies for as long as academic community exists, but no one can learn anything about the contributions or even the writing style of that person.
Yep, he’ll be remembered just by the fact that he joined the research and then left. However, these infos, even if small, defines him in some way. How much of his personality can be inferred from these limited, impersonal, unemotional facts? The answer to this question (which is certainly subjective) may lead us to think of an “eternity in obscurity” (as you call it) or the other way around.
For a machine learning University exam I have to write an essay in which I report how different neural networks architecture perform on recognizing fruits varieties from a dataset. Since I don’t know a lot about NNs, I’m going to read this book.
You forgot a detail that makes this very user-averse. The required signup step.
Users already have an account for app X, which this tool is collecting feedback for. Why not reuse that account for authentication ? Canny has intercom integration, which means 0-step setup for both the user and the developers. You should at least provide oauth2 support, if you want this to be used anywhere.
Or even better allow for non-auth contributions. Basically just anonymous with a field for name/handle that can be set to anything. This is usual for users who don’t want to register or can’t register but still find a bug or something.
Filter out spam with a captcha or something.
Registration is a big mental load for me. Especially for one offs like if I’m visiting someone’s site or shopping. I will rarely register and if I can’t remember my existing registration I can’t be bothered to look it up.
Here’s my problem with this kind of post (yes, it’s a kind: I think I’ve lost count of how many iterations I’ve seem by now):
Some, in short, this kind of post is likely an exaggeration over personal experience, and will hurt more than help people who read it.
“Well, that’s nice, but I actually saw a person doing this the other day, so what do you suggest? Should I just let them ruin the codebase with crap copy and paste from SO?” Glad you asked. Coach them. Directly. Act on the actual instance of the issue. Maybe even send them this post? At least it might do some good, then. But ranting about it online will pretty much only miss the target and hit “innocents”.
Disclaimer: I might very well be incurring in 1.1 and 1.2 myself, so, take this with a grain of salt.
Actually, it’s a generalization over my own personal experience. I don’t work in a tech company and I have very few friends that are into programming, so I don’t know the behaviour of other people in this regard. In fact, nearly all the post is written in first person!
This could be true.
Hopefully beginner programmers can read an article and understand its meaning! I think I emphasized enough the idea that Stack Overflow should be used, it just shouldn’t be used mindlessly.
All in all I believe that it is true that the article is pretty generic, but it’s the way I wanted it. I also believe that it can either be useless or useful, depending on who reads it, but not harmful.
PS: I’m glad you liked the theme of my blog (at least :P). It is a Jekyll theme and I made it available on GitHub. Here’s the link if you want to check it out.
PS: Loved the theme on your blog though, might steal it =)