Hacker News new | ask | show | jobs
by ben165 2631 days ago
>Bob: Is there any advice you'd like to give to young programmers/computer science students?

>Linus: I'm actually the worst person to ask. I knew I was interested in math and computers since an early age, and I was largely self-taught until university. And everything I did was fairly self-driven. So I don't understand the problems people face when they say "what should I do?" It's not where I came from at all.

This is a problem I don't understand too. If you are really into something you motivating yourself in doing things. You can see how stupid people are when you just read the questions on Stackoverflow today. Nobody seems to figure things out by themselves anymore.

Same with YouTube, when people explaining simple math things with extremely effort people complaining then that today's teachers are shit. But it's more your own lack if you're not able to imagine these thing inside your mind by yourself.

19 comments

I don’t think stackoverflow is a problem at all, I think it’s much better to have people ask stupid questions than to call them stupid.

That being said, I do think people owe it to themselves to read the documentation first. I’m extremely rarely in a situation where the official documentation isn’t monumentally better than every other option. There are a few exceptions of course, when the official documentation flat out sucks.

I do think we have a general issue with how we teach CS though. Especially outside the hardcore CS degree, because we’re really not teaching young people computation anymore, we’re teaching them how to produce results. This is especially true for places like Udemy and YouTube, but it’s frankly also true on more UX centric or academy/bachelor level degrees.

I do external examinations on academy levels, and earlier this year I went to a place where they teach associate degrees in CS. Only they opted to build their places as a “gaming education”, so they had a heavy emphasis on Unity. And sure enough, the students were pretty good at unity, but only a handful of them knew how to calculate Big O of a few simple examples and only a single student knew how a computer actually works.

When I did my own freshman year, one of my first tests was to decode a hidden message by altering the contents of a bitmap file using C. That’s pretty useless, sure, but it teaches you a lot of things, including how to read the official documentation for a bitmap, which is a much more useful skill than knowing how to use a certain version of some framework. At least in my opinion.

It seems to me there is some kind of political war going on when it comes to education about computers.

One side argues, they must know what a computer is, how it roughly works, what it can do and cannot do, and how you can program it.

The other side says, knowing how to use Microsoft Office and Excel, and Facebook and Instagram 'responsibly' is enough, and they fight tooth and nails that the education doesn't become deeper.

This is my experience in Germany, though, where digitalization is understood as replacing books by tablet computers from Apple in school.

Have you made similar experiences?

Edit: Let me reiterate on that. I think part of the fierce resistance against deeper education is fueled by fear.

To explain that, I see how mathematics is used in schools as a rough intelligence test. And the results in math are important, not because people would need differentiation of nested functions at work, but because the grade in math is used as a proxy by the society.

Abstract thinking is difficult for many. And they dislike it. A fundamental education in computers requires abstract thinking. So with that, there would be even more filterng between those who think good, and those that don't. People are afraid of that. So they fight that change.

I think people are afraid of loosing out and becoming meaningless and irrelevant in a world of computers, i.e. a world of abstract thinking.

>One side argues, they must know ...how you can program it

>The other...fight tooth and nails

I'd guess a big part of the problem is many teachers not being able to program. After all programming jobs tend to pay more than teaching ones and even with those there are issues eg https://blog.codinghorror.com/why-cant-programmers-program/

Anecdote when I was like 15 we had a computer class but the teacher didn't have a clue and I ended up showing the others how to do 10 PRINT "some stuff"; 20 GOTO 10 etc

Feels like what you are describing was the state of affairs like 15 years ago when i was in secondary school. We had an "Informationstechnischer Grundkurs" teaching office / excel and a separate programming course for guys like me who wanted to focus on that. I don't really follow the state of education that closely, but would be quite surprised if the latter is not at least more widely available now.

Does everyone need to know how to program? I don't know, probably not. Us humans specializing is the only way we have to handle the huge amount of knowledge necessary to support our society. I certainly would have a hard time just surviving by myself. Also education slots are limited, we'd have to abolish other courses in exchange. This obviously will generate opposition.

Now let imagine we have an open slot to teach "CS" for 90min a week for a year in such a young age. What do you teach that would actually be useful to most of them later on? A bit of python? Basic C, since it doesn't come with many complicated abstractions on top? Javascript, since many of its courses quickly give colorful results? Even the programming bachelor I later did had trouble answering those questions, they switched from c->java->c++ to teaching 3 courses java. Plus all the languages other courses used and had to teach pretty much from scratch.

Personally, I think there is far too much focus on 'which language', rather than on the fundamentals of how to think/reason about a program, troubleshooting, and exposure to the actual documentation. Once you have a solid grasp of one language, picking up others becomes much easier. So someone who only has Javascript experience would likely be able to at least grok the basic structure of a c++ program. I feel the main problem with all the intro courses I have ever taken was too much reliance on textbooks/tutorials, and too much desire to over-simplify. I remember multiple people I took CS101 (Java) with who had no idea how to do anything outside of eclipse, and when they wanted to expand their skills through self-study had no idea how to use the documentation in a helpful manner. They knew how to write a class diagram, but all functions & classes had been introduced piecemeal, so they got overwhelmed looking at the official docs & just gave up out of frustration.

That said, I don't think something like haskell or straight assembler is a good choice, but any of the C-likes or Python would be fine, the differences just aren't great enough to matter much for the absolute beginner. A strong case could be made for Javascript, simply for ease of development, since any computer is almost guaranteed to have the basic software for writing, executing, & debugging. It is far from my favorite language, but for early intro courses I think pedagogy is far more important than language or tooling.

And personally, I feel that the only 'CS' that should be required for all students is keyboarding. Does someone who wants to go into the trades (excepting trades like machining) really have any urgent need for programming? However, almost any job will require typing skills.

Students have limited time, and I think it's foolish to force everyone to learn to program. Those classes have their benefits, but so do music classes. But, given avaliable time and resources, should we also require all students to learn an instrument?

The mindset I have seen is less fear, more "if I don't understand this, how could anyone else?"
Hmm. So if the teacher doesn't understand anything deeper, then the teacher is probably going to resist making the class deeper. That would make perfect sense.
> The other side says, knowing how to use Microsoft Office and Excel, and Facebook and Instagram 'responsibly' is enough, and they fight tooth and nails that the education doesn't become deeper.

I have certainly encountered efforts to ignore or deprioritize deeper education, but I have yet to meet active opposition to it. What form does it take, and what is the rationale?

I think you're right but there's more to it. When you can succeed by using your brain and technology, it doesn't matter so much who your parents are. The thing is we still have a massive legacy of wealth and power fueled by inheritance and other non-meritocratic systems.

This is why you see old media, non-STEM academia and other classic playgrounds of the rich first in line to bash tech. It's an existential threat to their power and control over society.

I don't think it's as much about stupid questions or reading docs, stupid questions can be OK and sometimes people just haven't learned there are loads of docs yet. Instead, when you read SO questions, for example, there some you can tell are coming from a place of, "just tell me what to do" and not "how can I do this?"

I work in UX design and I see similar things on site related to that field. It's becoming popular so you can tell when some people think, "If I do X and Y then I am now magically a UX designer (or programmer)." Sometimes they literally ask, "how do I become a UX designer?" You can spot the smart beginners because they ask, "what is UX design?" The former is only interested in the destination while the latter is interested in the journey.

They're not interested in learning out even in the field itself, they just want to style themselves as such and simply ask others how to do the magical rituals required that they have no actual understanding of.

It's a fine line, because by no means am I lumping all beginners into this category. These people happen to look a lot like beginners, but even the real beginners are more knowledgeable.

> I’m extremely rarely in a situation where the official documentation isn’t monumentally better than every other option.

Man, opposite experience here. I will cheerfully admit to being way less smart than most HN users, but I find that official documentation almost always lacks egregiously in example code, and also in overview material that gives me a 30,000’ view of the product. So often documentation seems assume that I’m already familiar with the product, when sometimes I’m dropped in for some external reason and just want to get a job done without being an expert.

I don’t think it has anything to do with intelligence, I think it has to do with experience.

Documentation can take some getting used to, and like I said, sometimes it really sucks, but I’ve found it to be worthwhile.

I mean technically you can probably google solve how to handle a bitmap in C, but that won’t teach you how the bitmap format works, so the next time you need to do it again, you’ll probably have to turn to google again. Where as I still have a pretty good idea on what to do, even though it’s been a decade since I touched C and even longer since I played around with bitmaps.

Don’t get me wrong, I say these things, not because I think I’m smarter than anyone, but because I forget everything I quick solve through google programming myself.

> where the official documentation isn’t monumentally better than every other option

Let me tell you my problem with documentation, with this example (embellished to emphasize my point): say you're looking at the man page for this new, unfamiliar linux command `abc`. Here, "a b c d e f g h i j k l m n o p q r s t u v w x y z". That's the documentation, in fact it's the documentation for ALL linux commands. What's wrong? Can't make `abc` work for your use case? OH, that's your fault because you didn't know the one particular sequence to arrange those 27 characters (include the space) to actually give you the information you need. You just didn't read hard enough. I mean, there's only 36^2000 or so combinations. Just keep arranging them until the letters spell out the answer to your query!

Thats why SO is way more popular than RTFM. TFM never tells me what I want. They tell me an encyclopedic, exhaustive treatise on `abc`. They don't tell me something helpful, examples on how to use `abc` to get me from point A to point B.

Here's a toy example, I wish I could think of a real one but I'm on the spot and can't recall somthing concrete, but this happens to me constantly. Also, disclaimer: no matter what example I give, someone is going to shoot me down by searching the man page and 'proving me wrong', but I've been Linux-ing for 20 years and I can't tell you a single time a man page has helped me. Generalize with me here, and dont focus on this command in particular. Say I want to use rsync and ssh. Yeah I know about scp, but there was just an HN discussion a few days ago about how that's "bad", so unless I remember their commands, I might think, "ah, I'll just read the handy rsync man page and that will show me how". Now, here's what actually happens:

man rsync:

<huge paragraphs telling me shit I already know, that rsync transmits files>

<-A does some obscure, esoteric thing that I dont care about>

<-a does almost the same thing as A, but was kept for "Sys-V compatibilty, deprecated">

<-b ....> ... <-r getting close,>

<-s ah , secure mode>

. ok cool, but in all likelihood, it wont tell you HOW to use secure mode. just that -s turns secure mode on. ok, do I just tap -s and magically rsyncs are now secure? Oh, HELL NO! no, no no. First, you have to know that -s has to go before the file you want to transmit. Should the man page tell you that? oh, HELL NO! They'll just let you type it wrong, get the error, and get really frustrated (or just go to google and type "how to rsync+ssh " and get the answer immediately). so going back to my "arrange the letters" analogy, you just have to arrange the -s before, after, or in between the options until it works. The man page is USELESS.

Again, this isnt intended to be a real example. I don't know what -s does for rsync. But I DO know if I were to try to read the rsync man page to do rsync+ssh, without fail, any options documented will not work or do what I want them to, usually because the order they are typed or the format of their arguments are conveniently omitted from the so-called documentation. I used to think it was my fault for pathologically composing the args wrong, but I've come to realize it's that the docs are written by people who already know or wrote the commands, so they omit the most obvious steps, or they don't "test" the man pages (which, arguable for FOSS, maybe they shouldn't. But it doesn't change the fact that the documentation sucks).

Me: "which president authored the New Deal?"

Man page: "`presidents`, displays a complete biography of all US presidents.

<-n> displays the biography of the n-th president. Note, to increase frustration levels, search functionality is disabled for this page. If you want to find out about a specific president, you can just start at 0 and read all of their biographies until you find what you need.

me: "maybe the answer is on SO."

smug hackers: "what a noob, people don't even read the docs these days"

In this case, s/stupid/lazy.
If you're lazy about learning for long enough you'll end up stupid.
> You can see how stupid people are when you just read the questions on Stackoverflow today. Nobody seems to figure things out by themselves anymore.

I resemble that remark!

It was just yesterday that I was looking up a bit of JavaScript trivia, how to format a number rounded to some number of decimal places.

Yeah, I'm supposed to be some kind of JavaScript expert, so I could have done the obvious "mdn tofixed", right?

But I was working on a Google Maps API project and typed in the first thing that popped into my mind:

https://www.google.com/search?q=six+digit+decimal+place+goog...

And you know what? It took me straight to my own Stack Overflow answer where I explained how to do this, either preserving or removing any trailing zeroes.

Who needs to remember things when you have a service like that? ;-)

I don't think that you're and author of parent comment are talking about the same thing. Most of low-quality questions on SO that make you think that author is lazy and unqualified are not about trivia or API bits like that. They're about a medium-level task that could be decomposed into more elementary subtasks without the need to know anything specific about the language or framework - but the author didn't even do that.

Following your example, it wouldn't be a question about formatting a number. It would be a question where the user would ask something along the lines of, "how do I write an app that calculates user's effective tax rate?". If someone is not able to decompose this at least to the level of "take input, process it, calculate it, present output" and then ask questions about each of those individual steps, or linking them together - then, in my opinion, he is stupid. (At least in the field of computer programming.)

Agreed. This is a thinking problem not even a programming problem. That question could be answered without a single line of code. Of course what the asked was probably looking for was all the code necessary, written for them.
Yeah, I love the feeling when end up with your own answers... You feel so stupid that you didn't remember, but also happy that you wrote that answer back in the day ;-)
Ever been a novice at something hard but still wanted to do it?

Like really, if you were to try to learn Korean (assuming you don't know it) right now, you think you'd have any simple questions that someone who'd been speaking Korean all their life would find absurdly easy?

Everyone starts from somewhere, this sort of ego-ist stuff is toxic. It is okay to be bad at things and it is okay to ask dumb questions.

The point is you don't ask this question to the korean people, just like you don't ask those kind of question to linus. It won't be effective because they are the wrong person to ask.
I'm pretty sure the point was OP calling people stupid for trying to learn something.
Most questions are easily answerable by learning to use a search engine.

Although I have discovered that sometimes things I remember seeing the answer to before are no longer discoverable by search :(

I get where you are coming from here, but calling someone stupid for looking to get past a sticking point isnt stupid. spinning your wheels when an answer exists is stupid. I think stack overflow proves that there is most likely no problem you are solving that hasnt been solved before, and given the pace of change of things, nobody can know everything. Heck I still google SQL 101 questions on occasion and I write sql/C#/C++ daily. I can either rack my brain and beat myself up for not remembering some syntax, or go look up the answer...
The productivity gains from SO awesome. That site has provided me with more value than maybe anything else on the web. To me it represents some of the best of what the internet has to offer: Not only are you not alone with your problems, but there's help available.
>You can see how stupid people are when you just read the questions on Stackoverflow today.

Wow, why the aggressiveness? This strikes me as prime "/r/iamverysmart" material. Yes, we get it, you figured everything out for yourself, well done -.- Yet if something is not trivially apparent to somebody (as everything seems to be to you) why should they not ask questions in a website whose purpose is to ask questions. I find it's almost always better to just ask for help when you are stuck rather than bang your head on a brick wall for hours. It will save you time and, if the teacher is good, it will make things much more clear.

>Nobody seems to figure things out by themselves anymore.

Again, the "back in my day" cliché. What is your basis for saying this. Sure, we can have a discussion about whether or not the abundance of material can make students more inclined to look everything up before giving it an honest shot, but a priori I would be inclined to say that more material and more teachers, accessible even to those not in formal education, can only be a good thing.

>Same with YouTube, when people explaining simple math things with extremely effort people complaining then that today's teachers are shit. But it's more your own lack if you're not able to imagine these thing inside your mind by yourself.

To be honest, this attitude makes me quite annoyed.

You will never in a million years catch me ragging on somebody that is making an honest effort to learn, even if they are struggling and it's taking them a long time to grasp the material. And clearly, if somebody is looking up teaching materials online of their own free will, they are interested and curious and motivated to learn. That's commendable, and it's a terribly arrogant and presumptuous thing to do IMO, chastising someone for not immediately understanding everything.

> You can see how stupid people are when you just read the questions on Stackoverflow today. Nobody seems to figure things out by themselves anymore.

OTOH given the proliferation of tools a programmer uses in their day to day work and the large number of software dependencies these days, you could end up spending all your time figuring out problems with your tools/dependencies, rather than the problem your trying to solve.

I think it goes both ways. Yes the student has to expend effort to understand, but teachers can make a huge difference. With Stackoverflow, I think often the simple questions point to a possibility that technical documentation isn’t all that beginner friendly. That and a lack of good examples in many tech docs. Good questions answered by good teachers can be an amazing shortcut to better understanding.

> But it’s more your own lack if you’re not able to imagine these thing inside your mind by yourself

Maybe that in itself is a taught skill?

Disraeli said “the fool wonders, the wise man asks”

Technical documentation can be unhelpful as it sometimes leaves out a lot of surrounding context. So even if you’ve got the docs it can be unclear how to apply what they say as so much other knowledge is assumed by the authors.

This is understandable as they tend to be written by people who know the thing inside out and backwards, but there can be a gulf between the beginner getting started guides (if any) and the proper docs, that only reading/asking questions can properly fill.

Very true. I think Stackoverflow questions provide context that tends to be missing in most technical documentation. Many times starting in SO and ending in the docs is more practical than just starting in the docs.
We are the sum of all the questions we have asked.
You just explained the issue: they're really not into it. They're often going through the motions because they see there's money there or the mythical 'good job' their parents keep telling them to get as far as computing/programming is concerned. In decades past, they would be asking the same questions re: business (or perhaps law or med) school.
Why is it stupid?

Instead of spending hours working to understand and implement a concept / fix. Get other people to do it for internet points.

Seems surpisingly “smart” to me.

It all depends on what you’re optinizing for.

Maybe you are optimizing for fulfilling the current assignment, not for long-term efficiency. Next homework the professor will give out will takelonger than needed, since you only have the solutions, but no understanding.
While your phrasing implies the "every once in a while I need external input on tricky things" end of the S.O. use spectrum, the parent post is gesturing at the "pants-on-head, you call yourself a professional?" low-tier use cases.

Overall throughput goes down when someone has to keep turning to external help. Even if they somehow manage to do many tasks in parallel to eliminate as much downtime as possible. And any design issue that requires having insight rather than a well-defined problem space goes unresolved and spirals into a bigger problem as more and more 90% solutions are bolted in.

It does depend on what you're optimizing for, but unless that includes turning over 100% ownership of the codebase, the "just give me the homework answer, don't try to make me understand" approach to problem solving is just shooting the team in the foot.

Sure, but the internet can't solve all your problems. Especially not for internet points
The influence of Big Media may show its power here. Back in the early web, we had lots of unprofessional sites with valuable information created by freaks who were doing it out of passion. Now we have hundreds of "How to create microservices on X cloud with k8s" promotionals leaving out the background bits and catering to the naive.
> This is a problem I don't understand too.

I always tell my clients' staff "There are no such questions as 'stupid' questions" to encourage them to explore. People in many cultures don't explore by and large because they're afraid of ridicule. I take pains to tell everyone who is exploring, including myself, that while exploring a new skill, concept or task, a state of discomfort and clumsiness is normal. Somehow our "go-fast", pre-packaged-experience culture has forgotten this lesson that every infant learns early on.

This "what should I do?" posture permeates many retiring individuals, as well. I have an Emacs Org file with over 6,000 lines of "I want to try this..." reminders that I'm adding to many times a week and sometimes several times a day, so this is very much a "...not where I came from..." that I've puzzled over for awhile. I hypothesize that this happens because many people allow a perception (whether by themselves or via others) that pigeon-holes themselves and their human potential.

I think the type of stackoverflow question your parent post is talking about is indicative of someone who isn't actually exploring but is just trying to get paid to do something they don't understand. I've got all the time in the world for someone who wants to learn what I know. I haven't got time to do someone else's job for them.
IT, like Medicine, is seen today as a pathway to a good job and financial security. So there are tons of people entering the field with no real interest in it.
You don't have to visit Stackoverflow, if you are in a regular work environment it is likely you encounter this mentality every day. Heck I have coworkers who won't even ask the question!

Yet this may be a broader issue, an education issue. As in, if we don't teach children to do and instead tell them they deserve or are entitled are we forever hampering their progress?

Its ironic that with literally all of human knowledge a google search away, people still don't do basic research and will ask questions online which can all be answered with a lmgtfy link.

I don't mean the search results that point to Stackoverflow, which are usually common patterns/answers. I mean looking up official docs, reading the code, just trying things without immediately looking for someone to handhold you through everything. You don't need to read medium articles or watch youtube for every single thing. Even a lot of tech conferences are full of talks going over the same basics over and over again, and these are meant for programmers.

This is a result of social media proliferation and the desire to do everything online and enhance your profile instead of just getting some work done. Y

One path to knowledge is to answer questions on stackoverflow about them - i.e. google, look at docs, try things, think, etc. This works when askers don't know how to work things out for themselves.

Maybe that's what they need to learn; though maybe they aren't interested in learning it...

OTOH I find many maths explanations wouldn't make sense if I wasn't able to already "imagine it inside my mind by myself" i.e if I didn't already understand it. IMHO this is the fundamental problem of education...

> "when people explaining simple math things with extremely effort people complaining then that today's teachers are shit"

You should have made an effort in fixing grammar in the above sentence before putting people down like that. At least, they are trying and not giving up. That's commendable

Not everyone has ability to figure things out on their own.

Why do you see people as possessing equal problem solving abilities and resources?

What will society benefit the most from? Teaching the people at bottom and bringing them to average or teaching the top ones and moving them to edge?

Completely agree (with you and Linus). I keep seeing these special programmes to try to get certain groups of people into programming. But the computers are right there. If they were interested they would have done it already. I wish people would stop trying to get people into this who really aren't interested in anything but the money.
I think you're confusing laziness, ADD, and a general lack of discipline with stupidity.
Or simple efficiency. Why spend hours figuring something complex out when the problem has already been solved a million times prior. That's essentially the basis of learning anything.

Sure, at some point it's nice to derive something from first principles to really understand it at a deeper level, but often times that's a complex process and it's aided by learning the thing by repetition prior to learning by how the thing was derived. That's how we learn math after all.

> Or simple efficiency. Why spend hours figuring something complex out when the problem has already been solved a million times prior.

I agree, at least when it comes to problems that don't fall into your core specialization. When you have a broken pipe, you don't spend several years studying plumbing, you just call a plumber. Similarly, when I have problem with LibreOffice, I don't start reading its source code, I go to Stack Overflow.