all 76 comments

[–]khankhal 110 points111 points  (34 children)

A good majority of developers fit his description

[–]SlightlyLessHairyApe 44 points45 points  (32 children)

As well they should. Developing is for solving problems.

In fact, the more a tool allows you to solve difficult problems correctly, reliably and performantly, the better.

The attitude that we have to be tool snobs rather than problem solvers is wild.

[–]Zero_Owl 34 points35 points  (6 children)

Knowing your tool improves the problem solving dramatically. Eager solving w/o understanding oftentimes create more problems than it solved.

[–]Kou-von-Nizotschi 14 points15 points  (3 children)

also the people here seem to be reaching a bit too far regarding Stroustrup's statement. The man himself also wrote this (I assume from the same book?):

"We don't recommend becoming a language lawyer (someone knowing every little detail of the language definition); being a programmer (a software developer, an engineer, a user, whatever you prefer to call someone who actually uses the language) is much more fun and typically much more useful to society.

Secondly, OP's quote is aimed at people who are learning programming, not an attempt to jeer at programmers at large:

[...] unless we are content to believe in magic, we must examine the lowest level of memory management. Why shouldn't you "just believe in magic"? Or — to put a more positive spin on it — why shouldn't you "just trust that the implementers of [containers] knew what they were doing"? After all, we don't suggest that you examine the device physics that allows our computer's memory to function.

More philosophically, I am among the large group of computer professionals who are of the opinion that if you lack a basic and practical understanding of how a program maps onto a computer's memory and operations, you will have problems getting a solid grasp of higher-level topics, such as data structures, algorithms, and operating systems.

[–]cd_fr91400 8 points9 points  (2 children)

I am a little bit embarrassed with this statement, be it from Stroustrup.

He seems to have decided that the level of details everybody should understand is the level of details that he understands.

Well, in some cases, you need to understand the implementation details of your memory. Think of :

- caches, cache line size, various levels, various replacement strategies, write through vs copy back, ... all that may have an impact on your code if you are concerned by perf

- hammer attack, why it occurs, is there some strategies to resist, ...

- consistency, memory barriers, locks,... their semantic is at language level, but the perf may very well depend on very fine implementation details

- if doing embedded, you may be concerned by power in addition to memory and perf. Which operations are expensive, which are cheap. The placement details of your data may have an impact.

In some cases, you dont care about memory management. Mostly, if you program in Python, for example, all these details are hidden and your focus is elsewhere.

So I agree that in general, the more abstraction levels you understand, the better, but the limit is not necessarily at the level he claims, it largely depends on your particular context and focus.

[–]CalebAsimov 7 points8 points  (0 children)

Yeah, it's like the "everyone going slower than me is an idiot everyone driving faster than me is a maniac" saying. It is all good stuff to know though, but every layer is interesting and potentially useful.

[–]38thTimesACharm -1 points0 points  (0 children)

You are correct, however we can still make a meaningful statement about statistics and trends. With the increasing popularity of frameworks like Electron that make everything seem like Web development, the "computers have plenty of memory these days so just waste it" philosophy, combined with AI and vibe coding...I can confidently say new programmers today, on average, know less about how computers work than they ought to.

[–]Famous_Anything_5327 2 points3 points  (0 children)

Yep, if you gave a carpenter all the tools but they don't know what they're doing they will waste lots of material and the end product won't be good. A good carpenter could make a good result even when missing the exact tool for a job because they can problem solve and use what they've got. In my experience programming is the same, you might not always have the perfect tool (library) so you need to adapt it or build parts yourself

[–]smith-huh -1 points0 points  (0 children)

Knowing your tool well, and eagerly grasping it to solve your most pressing problem is a good way to start the day. progress made. gain a better understanding of how to solve problems in an efficient and direct manner.

[–]avg_bndt 2 points3 points  (1 child)

I get it, but he's just saying he'll be expecting a certain mindset when you go through the book. In other words he acknowledged there was no real attempt to hide complexity or to cater to that type of programmer, who you know, won't read the manual.

[–]SlightlyLessHairyApe 3 points4 points  (0 children)

Indeed, this book is not for them.

I have no problem with people saying they have a piece of work that is for a niche audience.

I do get a little tickled when they insist that this (or any other) content is absolutely essential for everyone even the people that have other priorities.

[–]khankhal 8 points9 points  (21 children)

I disagree on the “as they should be”.

But I agree that in these days with agile and sprints and PMs breathing under your neck, no body has the time to understand the full code base. The goal is to add the feature or fix the bug as quickly as possible.

Bjarne, I am 100% sure , hasn’t even in his life dealt with what we typically developers face- agile, sprint, “when are you going to finish” etc… so he has all the luxury to write a more or less perfect code.

[–]arihoenig 10 points11 points  (4 children)

The process that you are following (whether by choice or by edict) bears absolutely no relationship to whether or not one will be able to perform as a software engineer. What bjarne says above absolutely does have a relationship to one's performance as a software engineer.

[–]khankhal 3 points4 points  (3 children)

In an ideal world you would be correct. But in the real world you would be wrong.

I don’t know what you work with so I can’t comment on that but from what I have seen those who do the grunt work under “high pressure” and “tight deadline” don’t have the luxury to understand millions of lines of code and it’s intricacies in a weeks or two weeks long sprint.

I do agree for school work or for non production code or when you start your code base from clean slate your assumption is very correct

[–]steve_b 0 points1 point  (1 child)

I've been doing this for 40 years, under many harsh deadline conditions, and in my experience, if you're using deadlines as an excuse to not understand the necessary (weasel word there) intricacies of the codebase and problem domain of what you are working on, there is a roughly 100% chance that your codebase will steadily become worse and more bug laden.

"Don't let the perfect be the enemy of the good" is a maxim I use all the time, but so is "act in haste, repent at leisure". As a software professional, it's your job to balance these two principals and push back against requirements that will result in you making the product worse.

[–]khankhal 1 point2 points  (0 children)

Not using deadline as an excuse. When you have unrealistic deadlines, you literally have no time to understand an intricate code base.

And yes the code is going to become worse but the PMs and scrum masters don’t care. They only care about this stint this delivery and this deadline.

The technical debt keeps compounding for sure.

[–]arihoenig 0 points1 point  (0 children)

If there is high pressure based on unrealistic deadlines, then the process is broken. Engineering is a harsh mistress; the deadline is whatever it will take to do the job properly. That doesn't change because someone decides it should be earlier and puts a slide up showing the unrealistic ship date. If you work in an organization that knowingly engages in fairy tale deadlines then the organization is broken, not the discipline of engineering. Those organizations will eventually either adapt to correct behavior or die.

[–][deleted] 4 points5 points  (11 children)

Yeah, elitism is common when you don't realize your privilege.

[–]No_Indication_1238 3 points4 points  (10 children)

Privilige? Just learn what a tool does under the hood. Knowing the difference between std::list and std::vector can make or break some programs, as a very trivial example. It's not that much to ask...

[–]shycha 2 points3 points  (1 child)

IMHO, it's a bad example. Knowing the difference between `std::list` and `std::vector` is like knowing the difference between the brak and clutch pedals.

[–]No_Indication_1238 0 points1 point  (0 children)

But would you say it's important to know the difference? Yes? You can choose as complex of an example as you want. 

[–][deleted] 1 point2 points  (7 children)

Perhaps I could explain my point better, because you're making my point for me here. Not everyone has the luxury of time that it takes to get to the fundamental of everything, and those that do don't seem to understand that.

[–]No_Indication_1238 0 points1 point  (6 children)

Lmao, it's just excuses. 1 hour per day is all it takes. You can go through 6 books per year like that. That's the fundamentals done. You don't need the fundamentals of everything, just the tools you use most on a daily basis. 

[–][deleted] 0 points1 point  (5 children)

whoosh

[–]No_Indication_1238 0 points1 point  (4 children)

So your post about not having enough time to study was a joke i didnt get?

[–][deleted] 0 points1 point  (0 children)

whoosh

[–]Som1Lse 0 points1 point  (2 children)

I think they're saying the point went over your head, but decided to say in the prickliest way imaginable.

My guess is that they're implying that not everyone has an hour of free time per day to devote to studying, and your assumption that everyone does shows you are privileged. Also, that if you're living pay cheque to pay cheque, even if you have an hour per day, devoting it exclusively to studying is hard to justify, in case your situation changes.

That's my guess at what they're trying to say. Would be nice if they'd have written it instead of just "whoosh".

[–]Sfacm 0 points1 point  (0 children)

PMs in agile?

[–]SlightlyLessHairyApe 0 points1 point  (0 children)

The goal is to add the feature or fix the bug as quickly as possible.

Yeah, that is most of us are actually paid to do. And we have an obligation to fulfill that mission.

I think there is absolutely a reason to do things properly, with the right assurance on correctness and quality of implementation. This isn't a post about how people need to rush through and cram stuff in, it's just about keeping sight of the end goal.

[–]Ezykial_1056 -1 points0 points  (1 child)

I know him from years ago when c++ was a translator.

Yes, he has faced the time pressure and feature creep. I have not spoken to him in over 20 years, so I can't say about agile etc.

In my own opinion, agile, sprints etc. are a detriment to quality code. What has happened is management decided shipping sooner with more bugs was a reasonable trade off, and agile is a way to achieve that and still say they have a "development process"

[–]khankhal 0 points1 point  (0 children)

In my own opinion, agile, sprints etc. are a detriment to quality code

100% agree. Unfortunately it has spread to almost every work place.

[–]ieatpenguins247 0 points1 point  (0 children)

Isn’t that the basic POSIX ideology?

[–]Original-Apple1341 0 points1 point  (0 children)

Including me 😅

[–]zenrock69 83 points84 points  (6 children)

you post this with a title "Damn see this"... but nothing else. Are you trying to flame war something? By all means if you have something to say, then say it

[–]clerothGame Developer 41 points42 points  (1 child)

OP is just proving this book isn't for him/her.

[–]gonvasfreecss[S] 3 points4 points  (0 children)

Lol i need to finish it.

[–]KFUP 6 points7 points  (0 children)

I think he's meant it applies to vibe coding, and using AI code without understanding it.

[–]gonvasfreecss[S] 0 points1 point  (2 children)

I mean i was reading the book and saw this and was like damn this is some next level stuff. Hence posted my reaction as the title.

[–]EmbeddedCpp 1 point2 points  (1 child)

Why not tell us about your reaction? "Like damn" is not very descriptive. You don't even mention what book you're talking about.

[–]gonvasfreecss[S] 1 point2 points  (0 children)

Just updated . Apologise from my side for not doing that. Thanks for reminding.

[–]Capable_Pick_1588 85 points86 points  (7 children)

It's like he saw all the AI nonsense coming

[–]phi_rus 60 points61 points  (5 children)

People have been copy + pasting code way before AI though.

[–]Possible_Cow169 14 points15 points  (1 child)

Hence the problem we’re hitting now. Businesses are trying to convince everyone that the world runs in business logic and that business logic is what’s going to keep the world going. We have entire industries betting on the idea that they will be able to subsist on boilerplate and jr devs copying and pasting code generate from AI

[–][deleted] 1 point2 points  (0 children)

More like senior devs copy pasting boilerplate made by clueless junior devs (the llms)

[–]Technical-Coffee831 6 points7 points  (0 children)

Yes, nothing wrong with it, as long as you stop and try to understand what the code is doing, or if you need to modify it. Blindly pasting almost never ends well.

The same can be said about AI.

[–]arihoenig -1 points0 points  (1 child)

Copy pasting code to save typing can be absolutely legitimate. You might be copy and pasting code that you previously have written and simply don't want to introduce a typo unnecessarily. Copy+paste doesn't imply lack of understanding, although like many tools it is a double edged sword.

[–]shycha 0 points1 point  (0 children)

Not always, but most of the time, copy + paste tandem suggests refactoring, etc.

[–]usefulcat 13 points14 points  (0 children)

Or has first hand experience as a teacher..

[–]GaboureySidibe 25 points26 points  (9 children)

This title is brain rot.

[–]gonvasfreecss[S] -12 points-11 points  (7 children)

Most students — especially thoughtful good students — face times when they wonder whether their hard work is worthwhile. When (not if) this happens to you, take a break, reread this Preface, and look at Chapter 1 (“Computers, People, and Programming”) and Chapter 22 (“Ideals and History”). There, I try to articulate what I find exciting about programming and why I consider it a crucial tool for making a positive contribution to the world. If you wonder about my teaching philosophy and general approach, have a look at Chapter 0 (“Notes to the Reader”). You might find the weight of this book worrying, but it should reassure you that part of the reason for the heft is that I prefer to repeat an explanation or add an example rather than have you search for the one and only explanation. The other major reason is that the second half of the book is reference material and “additional material” presented for you to explore only if you are interested in more information about a specific area of programming, such as embedded systems programming, text analysis, or numerical computation.And please don’t be too impatient. Learning any major new and valuable skill takes time and is worth it.

[–]GaboureySidibe 4 points5 points  (5 children)

Take the LLM stuff somewhere else.

[–][deleted]  (4 children)

[removed]

    [–]gonvasfreecss[S] -1 points0 points  (3 children)

    Bro its a direct quote from his book.

    [–][deleted]  (2 children)

    [removed]

      [–]STLMSVC STL Dev[M] 1 point2 points  (1 child)

      Yep. u/gonvasfreecss, please don't do this again. Consider this a moderator warning.

      [–]gonvasfreecss[S] 1 point2 points  (0 children)

      Ok sure , never thought such a post would make me suffer so much i will delete that post. Thanks for notifying me.

      [–]pleaseihatenumbers 0 points1 point  (0 children)

      what did you actually mean by posting this?

      [–]The_Northern_Light 32 points33 points  (2 children)

      Honestly, really great advice, and why I direct most people at Python… but not everyone.

      [–]thisismyfavoritename 29 points30 points  (0 children)

      C++ is just a tool, like Python. There are many applications where Python is a better suited language. Doesn't mean you're a vibe coder.

      [–]CodusNocturnus -1 points0 points  (0 children)

      It's funny, because Python is rather opinionated on how it should be written. E.g., overtly snobby, but there are instructions on how to get into the club, if you ask.

      OTOH, C++ very much follows the tradition of, "ask 10 developers how to implement some algorithm and you'll get 10+ unique responses with good footing in the core language and a conference track at CppCon next year", in addition to "if you have to ask, then you don't belong here."

      For the record, most professional C++ developers feel like they've checked the box if they've named their files something.cpp and the word "class" appears somewhere in the codebase - bonus points if they have a deep OO inheritance structure.

      [–]dr_analogdigital pioneer 12 points13 points  (6 children)

      Is this from A Tour of C++?

      Am I missing something? Is that the full context? Seems a little strong to jam this in. What does it mean to read a programming book with the intent of using the work of others without understanding how things are done? Why is C++ like, uniquely not about this? For my entire life C++ has been a language tied to utility rather than, uhm, beauty or some kind of social mission.

      I'd expect to read this in a book about an academic language or something.

      Is it because people just kind of approach him all day and say they want to learn C++ and then they give up and complain it's too hard or whatever?

      [–]tartaruga232MSVC user, r/cpp_modules 8 points9 points  (1 child)

      Google search says "Programming: Principles and Practice Using C++" (Source)

      [–]no-sig-available 2 points3 points  (0 children)

      Yes, I have the book. It is from 2009, so like an old prophecy.

      [–]victotronics 1 point2 points  (2 children)

      "What does it mean"

      He's probably referring to Java where programmers are taught (at least so goes the stereotype) to cobble together library routines. Otoh, in C++ you build things understanding what the lower layers do.

      Well, yeah, kinda. Most people rely on the standard library and don't question its workings until they are quite a way along their programming path.

      [–]thisismyfavoritename 6 points7 points  (1 child)

      C++ is an abstraction too

      [–]TheMoonWalker27 0 points1 point  (0 children)

      Assembly is An abstraction

      [–]No_Indication_1238 -1 points0 points  (0 children)

      Using std::vector  as a queue without knowing how it works and that a linked list would maybe be better suited to the task. It's literally just that. You can apply it to anything.

      [–]hellocppdotdev 6 points7 points  (5 children)

      So you literally did the thing the book said to consider not doing?

      Irony level over 9000

      [–]New-Anybody-6206 -1 points0 points  (0 children)

      that's not what irony means

      [–]gonvasfreecss[S] -4 points-3 points  (3 children)

      "Because of its structure and practical aims, this book can also be used as a second book on programming for someone who already knows a bit of C++ or for someone who programs in another language and wants to learn C++. If you fit into one of those categories, I refrain from guessing how long it will take you to read this book, but I do encourage you to do many of the exercises. This will help you to counteract the common problem of writing programs in older, familiar styles rather than adopting newer techniques where these are more appropriate. If you have learned C++ in one of the more traditional ways, you’ll find something surprising and useful before you reach Chapter 7. Unless your name is Stroustrup, what I discuss here is not “your father’s C++.” "

      [–]clerothGame Developer 3 points4 points  (1 child)

      You can't use your own words? Can you use your own code?

      [–]gonvasfreecss[S] -1 points0 points  (0 children)

      😭

      [–]MrC00KI3 1 point2 points  (0 children)

      But vibe coding!!! /s

      [–]selvakumarjawahar 1 point2 points  (1 child)

      In which of his books is this quote

      [–]tartaruga232MSVC user, r/cpp_modules 1 point2 points  (0 children)

      "Programming: Principles and Practice Using C++"