Slashdot Mirror


Overcoming Intuition In Programming (amasad.me)

An anonymous reader writes: Amjad Masad, a programmer who works at Facebook, has put up a post about intuition and programming. It's based on a series of experiments (PDF) into how the presentation of a problem affects the learning involved in solving it. Researchers found that if they made a test deliberately hard to understand, those taking the test would exhibit greater understanding after solving it than those who were presented with a more intuitive wording of the same problem. Masad discusses how the research applies to software engineering: "Programming is an intellectually challenging task, but luckily we invent tools to make it manageable. I find that up to a certain point, the intuitive and easy properties of a given language, framework, or library might start to have negative effects.

From personal experience and from mentoring beginners I noticed that when using tools that allow us to reason within our intuition, anytime we're faced with some difficulty we feel that we've done something wrong. And although we might have the necessary skills to overcome the difficulty, we often start questioning and revising our work." He concludes, "Code reuse, libraries, sharing, and open-source are very important to software engineering, but we should be careful to not enable the belief that programming should be as easy as gluing things together."

237 comments

  1. Too Late by chill · · Score: 4, Insightful

    "Code reuse, libraries, sharing, and open-source are very important to software engineering, but we should be careful to not enable the belief that programming should be as easy as gluing things together."

    That is the management view of programming and a major corporate goal. This way it reduces the skills needed to complete the task, and hence you can pay less for the less skilled laborers.

    Why do you think the average salary of a Windows Admin is lower than that of a Unix/Linux Admin? Because Microsoft pushed the "we've made it simple, just push the button" marketing drek and aimed it squarely at the management crowd -- who bought it hook, line and sinker.

    "They made it easy, so I shouldn't have to pay you as much because anyone can do it. I'll just hire some kid with the latest MS cert..."

    --
    Learning HOW to think is more important than learning WHAT to think.
    1. Re:Too Late by Anonymous Coward · · Score: 0

      I intended to tell him to find me someone who pays for unintuitive programming but you beat me to it.

    2. Re:Too Late by TsuruchiBrian · · Score: 2

      If MS made their software easy enough to use that a low skilled person can do it, isn't that a good thing?

    3. Re:Too Late by DigiShaman · · Score: 4, Interesting

      Which is funny, because in the world of Windows Administration, either you're a complete idiot, or an experienced Windows sage that's very good at cleaning up other peoples mess, and running the network properly. There is no middle ground unless you've gained the experience under the wing of such a sage.

      --
      Life is not for the lazy.
    4. Re:Too Late by spire3661 · · Score: 1

      This is a prime example of 'all of the power, none of the responsibility.' type of thinking.

      --
      Good-bye
    5. Re:Too Late by TemporalBeing · · Score: 3, Informative

      If MS made their software easy enough to use that a low skilled person can do it, isn't that a good thing?

      Only for Microsoft and their Partner when stuff breaks and you have to bring in experts because it's really foobar'd up the wazoo, so much so that only hands-on work by MS can solve the problem - on and it comes at really high billing rates too.

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    6. Re:Too Late by gstoddart · · Score: 4, Insightful

      Right up until you meet the limits of what a low skilled person can do.

      And then you can quickly get into uncharted territory which requires much more understanding.

      Sure, that low skilled person can do "some", "many", or possibly even "most" of the tasks. And they can also drive you off a cliff through lack of understanding.

      Anybody who has ever dealt with outsourced admins who can follow a script can tell you that when those people go outside of the script they will become utterly useless, if not outright dangerous.

      And at that point, you're deeply screwed if there's not someone around who actually understands the rest of the stuff. It's not pretty to watch some noob with a little knowledge completely screw up a corporate environment.

      --
      Lost at C:>. Found at C.
    7. Re:Too Late by Rhacman · · Score: 2

      There tends to be a perception amongst the Linux crowd that things like email and web browsing should be easy (to foster greater Linux adoption) while things like system administration *should* be hard (to discourage newbs / the uneducated, and to forgive clunky, inconsistent, and poorly documented tools).

      --
      Account -> Discussions -> Disable Sigs
    8. Re:Too Late by mwvdlee · · Score: 1

      Knives are very easy to use, but that doesn't mean I'll let some random bozo perform surgery on me.

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    9. Re:Too Late by epyT-R · · Score: 2

      There tends to be a perception amongst the windows/mac and web 3.0/mobile crowd that complex things be made simple at any cost, even if the result is only the appearance of simplicity, just to give newbs the impression they understand more than they actually do.

    10. Re:Too Late by Anonymous Coward · · Score: 5, Insightful


      Why do you think the average salary of a Windows Admin is lower than that of a Unix/Linux Admin? Because Microsoft pushed the "we've made it simple, just push the button" marketing drek and aimed it squarely at the management crowd -- who bought it hook, line and sinker.

      "They made it easy, so I shouldn't have to pay you as much because anyone can do it. I'll just hire some kid with the latest MS cert..."

      It's more complicated than that. Salaries are lower because there's a herd of "kids with the latest MS Cert" that also bought into the "it's easy" line of thinking. It's not, but it sure looks that way. Managers are always looking to save a dollar of course, and many of them don't have any ability to distinguish talent from dreck. Even after they hire the dreck, they might be forced to put up with it as the "new normal".

      It stems from a mentality of measuring salaries, but not measuring consequences of fucking up. Let's say John knows what the hell he's doing, but is paid $120,000 a year and rarely screws things up. John managed to increase productivity and save $50,000 last year through some innovative thinking. Joel is paid $50,000, but is constantly fucking shit up. Just last week Joel took down the network through one of his changes, and cost the company $20,000 in lost productivity. Over the past year Joel has cost the company approximately $200,000 in lost productivity due to his own point/click mentality and a management team that encourages this rather than learning and risk management.

      So John costs $70,000 a year, and Joel costs $250,000 if you add up all the costs and savings from each. Yet if you only look at salaries, it looks like John should be replaced with 2 Joels, at a cost savings of $20,000!

      So part of the problem is not measuring employees true worth.

    11. Re:Too Late by matbury · · Score: 1

      "Code reuse, libraries, sharing, and open-source are very important to software engineering, but we should be careful to not enable the belief that programming should be as easy as gluing things together."

      Too bad he hasn't told this to his colleagues at code.org.

    12. Re:Too Late by TsuruchiBrian · · Score: 1

      No it's an example of a question being asked.

    13. Re:Too Late by Darinbob · · Score: 1

      Their software can be easy enough to use, that's good, but the creation of the software should not necessarily be easy to do. The tieing together of complex parts does not create a complex product that's well designed. A turbo engine duct taped to a bicycle.

    14. Re:Too Late by Nidi62 · · Score: 1

      Right up until you meet the limits of what a low skilled person can do.

      And then you can quickly get into uncharted territory which requires much more understanding.

      Sure, that low skilled person can do "some", "many", or possibly even "most" of the tasks.

      If your entire shop is full of low skill people you are screwed anyway. If your daily work is simple enough that low skill employees can do most of the work, then that's why you keep senior employees around. Their job, besides doing daily work, is to jump in when the newer, less skilled employees run into problems they can't solve and also to train said lower skilled employees when those situations arise.

      --
      The only thing necessary for evil to triumph is for it to be pitted against a slightly greater evil
    15. Re:Too Late by TsuruchiBrian · · Score: 1

      In a world with relatively few people that are very highly skilled, I think it makes sense to have those skilled people doing things like surgery. I think I can live with a less skilled windows IT admin.

    16. Re:Too Late by yagu · · Score: 4, Funny

      There should be a moderation category "Scary".

    17. Re:Too Late by unimacs · · Score: 1

      In my experience it's usually the IT people that have religious fights over Linux vs Windows.

      Management wants stuff that works and costs to be low. They may want a Windows box or Mac on their desk, but they don't care what's running on the servers in the rack.

    18. Re:Too Late by BronsCon · · Score: 1

      Actually, it's both and the post you were replying to is an example of a valid explanation of the problem.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    19. Re:Too Late by BronsCon · · Score: 1

      I'm one of those highly skilled people, would you like me to perform that difficult (even for a skilled surgeon) surgery even though my skills lie in the realm of computing? Simply being "highly skilled" does not make one highly skilled at everything, so I sure hope you answer is "no", for your own sake.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    20. Re:Too Late by angel'o'sphere · · Score: 2

      In my country both get payed the same, actually MS jockeys a bit more as they are rather rare. No one really wants to administrate such systems.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    21. Re:Too Late by Anonymous Coward · · Score: 0

      There tends to be a perception amongst the Linux crowd that things like email and web browsing should be easy (to foster greater Linux adoption) while things like system administration *should* be hard (to discourage newbs / the uneducated, and to forgive clunky, inconsistent, and poorly documented tools).

      Process automation by a skilled *nix administrator can save thousands of person-hours each year. The administrator can focus on organisation enhancing projects.

    22. Re:Too Late by Anonymous Coward · · Score: 0

      In my experience it's usually the IT people that have religious fights over Linux vs Windows.

      Management wants stuff that works and costs to be low. They may want a Windows box or Mac on their desk, but they don't care what's running on the servers in the rack.

      Anything you can do on a Microsoft Windows Server you can do at least as well on a *nix server. The management mindset though has them thinking in terms of specific products instead of solutions.

    23. Re:Too Late by Gr8Apes · · Score: 1

      There tends to be a perception amongst the Linux crowd that somehow only they understand...

      --
      The cesspool just got a check and balance.
    24. Re:Too Late by TsuruchiBrian · · Score: 1

      I don;t think the post I was replying to is a good explanation because it seems to suggest that making things easier (require less skilled labor) is bad because it leads to lower pay for those jobs. I disagree with this assertion, but I am not even sure if he is making it, which is why I was asking.

    25. Re:Too Late by TsuruchiBrian · · Score: 1

      I guess what I am asking is for you to think about what I am saying in a more meaningful way rather than the trivially incoherent way that you have decided to interpret what I said.

      If I asked "What came first, the chicken or the egg?". An answer one might give is "Obviously the egg came first because lots of prehistoric animals had eggs before chickens ever existed". I am asking you not to give this answer.

    26. Re:Too Late by TsuruchiBrian · · Score: 2

      First of all I didn't say that MS's software is easy to use. I merely suggested that *if* MS software was easier to use (requiring less skill/effort for the same result), that that would be a good thing. Chill (the person I was responding to, seems to be suggesting the opposite is true (i.e. it's better if the software is harder to use).

      Second of all, I would say that the job of software is precisely to make hard things easy. If the goal was to create a jet powered bike, then good software would generate a good design, rather than simply a design calling for the 2 to be duct taped together. You don't even need software to come up with a bad design, humans alone are perfectly capable of doing this without any help.

    27. Re:Too Late by thinkwaitfast · · Score: 1

      major corporate goal

      Is there a technical reason why this shouldn't be a goal? I've spent the better part of my software career in making systems "as easy as gluing things together." Granted, I have written myself out of a lot of jobs, but I work for interest in the system and making something, not to give myself a job.

    28. Re:Too Late by TsuruchiBrian · · Score: 1

      Well it seems that the scenario you are talking about is the one where the software doesn't allow a low-skilled person to do the job.

    29. Re: Too Late by Anonymous Coward · · Score: 1

      Don't get upset. He is skilled in coding, not in understanding.

    30. Re:Too Late by aix+tom · · Score: 3, Interesting

      I always like "update holidays" in our company.

      The Windows Admins run around sweating, clicking this clicking that, checking there, trying thing a couple of time in the test environment, then switching to live, etc.....

      I recline in my chair, open a terminal to run the update scripts I have tested beforehand, and a Media Player to watch some TV shows while they run. The thing is, the "little things" I have to install on the Windows machines are also scripted the same way, while the "Little things" the Windows Admins need to do on the Linux machines they also use some GUI Tool.

      90% of "System Administration" is "knowing how things work" For example the technicalities on how IPs/Network-Masks/Gateways/routes, etc... work are absolutely identical in both Windows, Linux, IOs, whatever. There used to be a time when the only way to set them in Linux was the CLI, and the only way to set them in Windows was the GUI. That is no longer true. Now you can also use a CLI in Windows and GUI-Packages to manage them in Linux. The same way that most Cloud/Web/Whatever applications can be administered either via a GUI or a CLI.

      So the difference is not really Linux/Windows any more, it's more of a GUI / CLI thing. So any admin might need to learn three things:

      - How "Stuff" works.
      - How do set up "Stuff" via the CLI.
      - How do set up "Stuff" via the GUI.

      It's interesting that even Microsoft (for example with SQLServer) only expose "the most commonly used" settings via the GUI (SQLServer Management Studio), while "all" are available via the sp_configure procedure that can be called from the CLI.

      So in system administration I have either the option to:

      - Learn "Stuff"
      - Learn the GUI
      - and then a few month later when I'm bored out of my skull by repetitive steps I need to do over and over in the GUI to learn the CLI to automate it maybe sometime later.

      - Learn "Stuff"
      - Learn the CLI
      - go on learning new "Stuff" after the boring jobs have been automated.

    31. Re:Too Late by TsuruchiBrian · · Score: 3, Interesting

      Right up until you meet the limits of what a low skilled person can do.

      There is always a limit to what a person of any skill level can do. All I am suggesting is that raising that limit is a good good thing, even if it means accomplishing a task pays less money.

      For example I don't think it's a bad thing that any idiot can look at google maps and have a very accurate set of directions. I think it would be worse if getting good directions required a very highly skilled and well compensated cartographer.

    32. Re:Too Late by BronsCon · · Score: 1

      Oh, no, I get what you're trying to say, I'm just subtly pointing out the fallacy of your reasoning. You see, for various reasons, I am not well suited to be a surgeon or a chemist, or most other highly-skilled professions that you might deem worthy; knowledge is the least of those reasons. You certainly wouldn't want my shaky hands cutting you open or digging around inside you, nor mixing chemicals to form an unstable but important solution, so it would certainly be worthless for me to pursue those fields. Oh, but there exists equipment that can do those things under my direction? There sure does, and it's controlled by software written by people like me.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    33. Re: Too Late by BronsCon · · Score: 1

      Ah, is it me who lacks understanding, though? Read the thread again, including the explanation of my answer.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    34. Re:Too Late by TsuruchiBrian · · Score: 1

      You seem to be making a lot of very narrow assumptions interpreting what I said. I am not going to go into all the logical fallacies you are probably making with your reasoning, because I don't feel it's worth my time, and I don't like make assumptions about what people are thinking.

      But I'll offer up a few hints...

      1. The fact that not every high skilled person is high skilled in every possible skill, does not imply that every high skilled person is/ can be only skilled at one thing.

      2. The skills that "people" have are not static. Even if it were true that every person's skills never changed througout their lifetime, the skillset of society would be constantly changing as people died and new people are born.

      3. The skills people choose to acquire can be influenced by technology and economics. If a certain skill commands a high salary, it incentivizes more people to acquire that skill. If the demand for a skill is lowered or the supply of that skill is raised due to better technology making the skill easier to have (like windows IT), then the lower salary would disincentivize more ambitious people from acquiring this skill and/or encourage less ambitious people to acquire this new skill that has been made easier to acquire and within their reach.

    35. Re:Too Late by Anonymous Coward · · Score: 0

      Why do you think the average salary of a Windows Admin is lower than that of a Unix/Linux Admin? Because Microsoft pushed the "we've made it simple, just push the button" marketing drek and aimed it squarely at the management crowd -- who bought it hook, line and sinker.

      "They made it easy, so I shouldn't have to pay you as much because anyone can do it. I'll just hire some kid with the latest MS cert..."

      It's supply vs. demand that determines pay, not how hard/easy something is to do.

      If the supply of people interested in messing with Linux increases, and demand isn't changing, we get paid less.

    36. Re:Too Late by BronsCon · · Score: 1

      It was your third point that made me realize the point you were trying to make, which is actually complimentary to the point I was making. It was your tone that made me stop reading before I got that far and go do something else; I only read so far as my eyes grazed the screen when I came back to close this tab. That you chose that particular tone tells me that you still fail to see my point and think that I am arguing when I am not.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    37. Re:Too Late by Pseudonym · · Score: 2

      The Principle of Charity is the first lecture in any decent university-level critical thinking course. It should be required knowledge for any Slashdot comment thread.

      --
      sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
    38. Re:Too Late by BronsCon · · Score: 1

      Ah, yes, and one should take one's own advice, no? Perhaps read the rest of the thread?

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    39. Re:Too Late by TsuruchiBrian · · Score: 1

      I am really starting to get the impression that you are a "highly skilled" windows IT admin...

    40. Re:Too Late by chill · · Score: 1

      It promotes a shallow understanding of the way things work. You can be good doing this, but will never be great unless you understand the fundamentals, deep down. This applies to almost every craft, and companies who are in the business of creating things should know that. It matters.

      --
      Learning HOW to think is more important than learning WHAT to think.
    41. Re:Too Late by BronsCon · · Score: 1
      And I'm really starting to think you're nowhere near the philosopher you fancy yourself. It doesn't surprise me, though; most people who try to sound "smarter" than others by posing philosophical questions in the midst of non-philosophical discussions are usually just spouting something they heard when the happened to take their headphones off for a moment during class, or, as is apparent in your case, attempting to mimic what they heard, rather than repeat if verbatim.

      I'll address your points so that you can see that, despite my relative short stature, my head and rectum have more distance between them than other participants in this thread.

      1. The fact that not every high skilled person is high skilled in every possible skill, does not imply that every high skilled person is/ can be only skilled at one thing.

      Indeed, I'm also highly mechanically skilled, just not where it requires very detailed fine motor skills (such as assembling very tiny and delicate parts) amongst other skills; of course I understand that a person can be skiled in multiple fields. Speaking of assumptions...

      2. The skills that "people" have are not static. Even if it were true that every person's skills never changed througout their lifetime, the skillset of society would be constantly changing as people died and new people are born.

      Indeed, I'm always learning new languages and programming techniques and philosophies; as well, I had to learn a new set of tools and assemblies to work on the new car I recently bought. If my skills were static, as you wish to imply I think they are, this would not have been possible.

      3. The skills people choose to acquire can be influenced by technology and economics. If a certain skill commands a high salary, it incentivizes more people to acquire that skill. If the demand for a skill is lowered or the supply of that skill is raised due to better technology making the skill easier to have (like windows IT), then the lower salary would disincentivize more ambitious people from acquiring this skill and/or encourage less ambitious people to acquire this new skill that has been made easier to acquire and within their reach.

      Yes, of course economics and technology can influence the skills people choose to acquire. If, some day, my job as a software developer become irrelevant, I'll certainly be glad I've padded my skill set with a number of hobbies I've chosen to not simply be satisfied being mediocre at. And, of course, many people have worked for many years before me to make it easier to acquire the skills that I have; those people were experts, just as the people who maintain the technologies that keep those skills accessible and attainable are experts.

      Back to my point, however: Never underestimate the value of expertise, even in a field that has been made highly accessible. there will always be a use for an expert to maintain that accessibility, and to handle use cases the previous experts did not consider.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    42. Re:Too Late by TsuruchiBrian · · Score: 1

      I take the fact that you think I am trying to sound smart as a compliment.

      I find it ironic that you criticize me for trying to bring philosophy into a discussion where it doesn;t belong, but you are the one bringing up (what you think are) logical fallacies in my position.

      Indeed, I'm also highly mechanically skilled, just not where it requires very detailed fine motor skills (such as assembling very tiny and delicate parts) amongst other skills; of course I understand that a person can be skiled in multiple fields. Speaking of assumptions...

      Please note that I explicitly refrained from making any assumptions about what you think. I specifically try to avoid falling into the trap that you can't stop falling into.

      Indeed, I'm always learning new languages and programming techniques and philosophies; as well, I had to learn a new set of tools and assemblies to work on the new car I recently bought. If my skills were static, as you wish to imply I think they are, this would not have been possible.

      If you think I was trying to imply your skills were static, I think you need to reread what I said.

      Back to my point, however: Never underestimate the value of expertise, even in a field that has been made highly accessible. there will always be a use for an expert to maintain that accessibility, and to handle use cases the previous experts did not consider.

      When is it OK to underestimate anything? Is it ok to underestimate the value of expertise in heating up a Big Mac?

      Back to my point, which is the absurdity of comparing the expertise of a surgeon to a windows IT guy.

    43. Re:Too Late by Anonymous Coward · · Score: 0

      This is a great example of why you want medical care from medical doctors, and not unlicensed medical professionals (independently practicing nurse practitioners and their ilk).

    44. Re:Too Late by TsuruchiBrian · · Score: 2

      A shallow understanding of the way some things work is necessary to being productive. If a library has a good API I can use it's functionality effectively without understanding exactly how it works. There have been plenty of bad libraries with bad APIs that have forced me to learn exactly how they work, but I wouldn't consider this effective use of my time.

      Some things are very important to understand in detail, and some things are not.

      In fact part of the art of writing a good library or a good API is making it so that people can use it without knowing the implementation details.

      Obviously a "deep" understanding is better than a "shallow" understanding. But usually the tradeoff is broad vs. narrow.

      Of all the resources one might consider important to save in the endeavor of software development CPU cycles, memory usage, etc. I would argue that the most limited resource is the man hours of engineers' time. It's not a question of *should* the engineer have a deep understanding of XYZ, the question is, what things are the most important for the engineer to spend time working on and developing an understanding of.

    45. Re:Too Late by BronsCon · · Score: 1

      Wait, so your point in comparing a surgeon to an Windows IT guy was to show that it is absurd to do so? Then yes, I did totally miss your point. The post you were replying to was making no such comparison but, rather, implying that eas-of-use of the tools required for the job in now way indicated possession of the required skills, id est, you still missed the point.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    46. Re:Too Late by ultranova · · Score: 1

      If MS made their software easy enough to use that a low skilled person can do it, isn't that a good thing?

      Everybody likes to talk about how we shouldn't worry about the effects of the automobile on buggy whip manufacturers. Nobody wants to be the buggy whip manufacturer going out of business. Especially if they've spent their time in the sun talking bad things about all those mediocre people who need unions and the government to look after them because individually they lack power, just like those former whip experts do now.

      The flame of progress melts special little snowflakes just like all others. It can be a rather rude awakening for some of them.

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    47. Re:Too Late by Anonymous Coward · · Score: 0

      A person with low skill in the specific language, yes. A person with low programming skill is still going to create crap, no matter how easy the language.

    48. Re:Too Late by Anonymous Coward · · Score: 0

      There have been plenty of bad libraries with bad APIs that have forced me to learn exactly how they work, but I wouldn't consider this effective use of my time.

      I don't use any API until I understand what it's doing under the hood. I want to know memory and CPU complexity of the algorithms used, how they affect the GC if one exists. When I wanted to learn about multi-threading in C#, the first thing I did was read about how single core CPUs "multi-task", then multi-core CPUs, cache-coherency, x86 vs x64 vs ARM, atomic instructors, non-atomic instructions. Then I started reading up on kernel thread schedulers from for Linux, FreeBSD, Solaris, and Windows from the past 20 years, and the reasoning behind all of the decisions they made with their algorithms. Then I got myself familiar with coroutines and other forms of user-mode scheduling. Once I learned about all of that fun stuff, I went to read into how compilers generate code that may or may-not be thread safe. Finally, I read into how .Net does threading, best practices, etc.

      This all took about 3-5 work days of light reading. I can't remember, it was many many years ago, I was fresh out of college, and was working on my first program. I wish .Net had Tasks back then. Of course most people just jump in with no f'n clue what's going on behind the scenes.

    49. Re:Too Late by TsuruchiBrian · · Score: 1

      The post you were replying to was making no such comparison but, rather, implying that eas-of-use of the tools required for the job in now way indicated possession of the required skills, id est, you still missed the point.

      ...by comparing what we were talking about (windows IT) with surgery. Are you really that fucking stupid?

      And no I didn't miss the point. I fully acknowledge the dumb and irrelevant point that was being made. But comparing a knife as a tool vs software as a tool is a bit disingenuous considering software actually does the work *for* the human. The whole point of software is automation. That's why you can have people who are good at using photoshop without a having any clue how the math behind a Gaussian blur works, and it's why you are able to google things without understanding Markov chains.

      There is a lot more to surgery than just knowing how a knife works. There is apparently not all that much more to Windows IT than knowing how to use Windows admin software.

    50. Re:Too Late by Anonymous Coward · · Score: 0

      I forgot to mention kqueue, epoll, completion ports, thread pools, IO thread pools(don't do CPU work on an "end"), socket-to-socket communication for cache-coherency via HT or QPI, TCP MSS, common false sharing gotchas(blindly obvious once you understand cachelines, but not all gotchas are intuitive), multi-core cacheline latency characteristics between inclusive vs exclusive CPU caches, translation lookaside buffer (TLB)(aka context switching), garbage collectors, how .Net's garbage collector works and how it interacts with multi-threading, GC collection algorithms(please don't change references a lot near the root objects, it dirties the tree and reduces pruning).

      All very simple stuff that any junior programmer should be able to easily research and understand in a week or two.

    51. Re:Too Late by dave420 · · Score: 1

      From the "women can't be scientists" guy. Very insightful. Please tell us more of your wonderful generalisations, clearly based on whatever grudge you pulled out of your ass this morning.

    52. Re:Too Late by Anonymous Coward · · Score: 0

      You're a fucking genius.

      Now tell us one thing that affects supply.

    53. Re:Too Late by TemporalBeing · · Score: 1

      Well it seems that the scenario you are talking about is the one where the software doesn't allow a low-skilled person to do the job.

      As in MS Exchange or any of their other business services...services that are often run by low skilled administrators. Though in the case of MS Exchange, I know of one instance in particular where even the high skilled admins couldn't fix it and it took a week for MS to fix the issue.

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    54. Re:Too Late by Anonymous Coward · · Score: 0

      Software is not meant to and does not make hard things easy, it's meant to do all of the mind-numbingly repeatable things so slow error-prone humans don't.

    55. Re: Too Late by Fwipp · · Score: 1

      Yeah, it's you.

    56. Re:Too Late by BronsCon · · Score: 1

      comparing a knife as a tool vs software as a tool is a bit disingenuous considering software actually does the work *for* the human

      The data fed to the software (by the human) is the software's input, whatever the software does with that software is its output (e.g. work); the position, pressure, and direction of force (e.g. data) fed to the knife (by the human) is the knife's input, the resulting cut is the knife's output (e.g. work). In both scenarios, the human does the work of inputting the data and the tool does the work of providing a result, how is that disingenuous?

      The whole point of software is automation. That's why you can have people who are good at using photoshop without a having any clue how the math behind a Gaussian blur works, and it's why you are able to google things without understanding Markov chains.

      And the whole point of knives is cutting. That's why we have people who are good at carving turkeys without having a clue how to forge a blade, and it's why you are able to cut your steak without understanding metallurgy.

      There is a lot more to surgery than just knowing how a knife works. There is apparently not all that much more to Windows IT than knowing how to use Windows admin software.

      Of course there's more to surgery and, speaking of disingenuous, it's funny you'd imply that I ever claimed otherwise. There is also a lot more to Windows IT than simply knowing how to use the tools; and I'm not speaking as a windows IT worker here, just using common sense; as in any field, it's not just knowing how to use the tools, but when,/em> (e.g. which tool for which job). Of course, there is also the essential skill of knowing how to make and maintain your own tools for the use cases and scenarios that toolmakers before you did not think of (I feel like I'm repeating myself here) and even maintaining the existing toolchain. There's actually a lot more to being a Windows IT admin than firing up some software and clicking around, if you're going to be good at the job, just like any other field. And only an idiot would hire an idiot admin, likely to administer their own idiocy as they're clearly too idiotic to do it themselves.

      And, clearly, if Linux admins are still higher paid than Windows admins, while those of us with any real aptitude for maintaining computer systems often find the task easier to do in Linux, that simply says that nobody working in Windows IT really knows what they're doing enough to command a higher salary; it honestly says nothing about how easy or difficult the job is. On your typical corporate (e.g. Windows) network, you're dealing with a lot more moving parts than the typical human body, so I think the comparison is fair, even if I don't think the post you initially replied to was making that comparison (at least, not intentionally). I'll repeat (I seem to have to do that a lot with you): The poster was making a point about not letting people who don't know how (and when) to use the tools do the job, regardless of what the job is.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    57. Re:Too Late by BronsCon · · Score: 1

      Damn, missed the < in my closing em tag.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    58. Re: Too Late by BronsCon · · Score: 1

      I should think not; perhaps wait until the debate is finished before passing judgment.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    59. Re:Too Late by TsuruchiBrian · · Score: 1

      I am not making any claims about how hard or easy or how much skill is required to be a windows admin. All I am asking is this:

      Scenario A: It requires 10 highly skilled admins to do job X.

      Scenario B: It requires 2 highly skilled admins and 8 low skilled admins to do job X.

      Isn't Scenario B better? The person I originally responded to seemed to be suggesting that Scenario A was better because it meant 10 people were highly paid rather than just 2.

    60. Re:Too Late by TsuruchiBrian · · Score: 1

      The data fed to the software (by the human) is the software's input, whatever the software does with that software is its output (e.g. work); the position, pressure, and direction of force (e.g. data) fed to the knife (by the human) is the knife's input, the resulting cut is the knife's output (e.g. work). In both scenarios, the human does the work of inputting the data and the tool does the work of providing a result, how is that disingenuous?

      I will entertain this ridiculous example of a knife having input and output. In this example the knife is a very dumb tool. If it had any sort of logic at all it would be something like "while (true) beSharp();". If a tool does nearly everything for you (i.e. a robot surgeon rather than a knife), then you don't need as highly skilled a person to do the job competently.

      I trust a bozo with a calculator to come up with an accurate value for sin(57.678 degrees) more than I trust Albert Einstein with a pencil and paper. That's because the tool (the calculator) does nearly all the work of calculating the result of the Taylor series. The only job for human is to enter the input correctly.

      Even doing math by hand has inputs and outputs. The inputs and outputs are the result of every single intermediate arithmetic operation. Arithmetic/taylor series and calculators are both tools. One requires a person very good at arithmetic and the other doesn't.

      And the whole point of knives is cutting. That's why we have people who are good at carving turkeys without having a clue how to forge a blade, and it's why you are able to cut your steak without understanding metallurgy.

      Yes the whole point of a knife is cutting. If all you need to do is cut, then a knife will allow any idiot to achieve the goal of cutting.

      Of course there's more to surgery and, speaking of disingenuous, it's funny you'd imply that I ever claimed otherwise.

      I made no such implication. You inferred it. I was caliming that the person I was responding to made this implication. Try to pay attention.

      There is also a lot more to Windows IT than simply knowing how to use the tools; and I'm not speaking as a windows IT worker here, just using common sense; as in any field, it's not just knowing how to use the tools

      It is not *only* using tools, but it is not *a lot* more than just using tools. What counts as *a lot* is subjective, but I think salaries are a good (albeit imperfect) measure of how much skill a job requires. The more people that can do it, the less the job will pay. The easier it is, the more people that will be able to do it.

      On your typical corporate (e.g. Windows) network, you're dealing with a lot more moving parts than the typical human body, so I think the comparison is fair,

      I don't think this is even a coherent comparison. We actually fully understand computers having intentionally designed them at every level from transistors to the high level software architecture. There is not a single piece of computer technology that is no completely understood by a human.

      I will ignore that fact that nothing in a computer is "moving" except for fans and disk drives and take this metaphorically. Computers currently have tens of billions of transistors We don't even completely understand how a single cell works, and the human body is a system of tens of trillions of cells, and hundreds of trillions of microbes. We definitely not understand the human body to the degree to which we understand computers (i.e. 100% perfectly), we don't even know how much more there is to know about human biology.

      And, clearly, if Linux admins are still higher paid than Windows admins, while those of us with any real aptitude for maintaining computer systems often find the task easier to do in Linux, that simply says that nobody working in Windows IT really knows what they're doing enough

    61. Re:Too Late by TsuruchiBrian · · Score: 1

      It's not that we shouldn't worry about the buggy whip manufacturers. It's that we should worry more about a stagnant economy where buggy whip manufacturers have nothing to worry about (other than the dead end society they live in).

      If we cured cancer tomorrow, all the oncologists would be out of a job. Is there really anybody (even the oncologists) that shouldn't be celebrating?

      As a software engineer I am constantly trying to make my own job obsolete. If one day we actually succeed, I might be a little sad, but that would mean that the ultimate goal of the entire field of computer science (i.e. automation) has been fully realized.

    62. Re:Too Late by BronsCon · · Score: 1

      I will entertain this ridiculous example of a knife having input and output.

      And you'll entirely miss the point by focusing on that and not acknowledging that, at the end of the day, that knife allows you to cut and carve without knowing anything about metallurgy, without knowing how to forge a blade or harden steel, without knowing any of the things the person who made that knife must know. Just like the computer operator in your example can Google things without understanding Markov chains, or even knowing they exist as a concept. If you can't draw the parallels yourself, hopefully that direct comparison helped; if not, you're hopeless. Either way, that's where I stopped reading your comment. I am done with this thread.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    63. Re:Too Late by BronsCon · · Score: 1
      Ok, I lied, I got curious just how far up there your head was, so I kept reading.

      Of course there's more to surgery and, speaking of disingenuous, it's funny you'd imply that I ever claimed otherwise.

      I made no such implication. You inferred it. I was caliming that the person I was responding to made this implication. Try to pay attention.

      Oh, I'm paying attention alright. I especially paid attention when the other person you were responding to said the following:

      Knives are very easy to use, but that doesn't mean I'll let some random bozo perform surgery on me.

      Why do you think he would not let some random bozo perform surgery on him? Is it, perhaps, because he is implying, even acknowledging, that there is more to surgery than using a knife? I think so, and if you were paying attention you'd have caught that.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    64. Re:Too Late by TsuruchiBrian · · Score: 1

      And you'll entirely miss the point by focusing on that and not acknowledging that, at the end of the day, that knife allows you to cut and carve without knowing anything about metallurgy

      I didn't miss this point. In fact I reiterated it. You need to learn to read.

    65. Re: Too Late by Fwipp · · Score: 1

      You should think so, though.

    66. Re: Too Late by BronsCon · · Score: 1

      I think you should think before you type.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    67. Re:Too Late by TemporalBeing · · Score: 2

      I am not making any claims about how hard or easy or how much skill is required to be a windows admin. All I am asking is this:

      Scenario A: It requires 10 highly skilled admins to do job X.

      Scenario B: It requires 2 highly skilled admins and 8 low skilled admins to do job X.

      Isn't Scenario B better? The person I originally responded to seemed to be suggesting that Scenario A was better because it meant 10 people were highly paid rather than just 2.

      I would say it depends on what X is.

      My primary point was that X being Microsoft Exchange or any of the other big tools that Microsoft markets towards Scenario B is ripe for problems since those low skilled admins will create a lot of problems that fewer higher skilled admins would have prevented.

      And the fact that you're comparing 10 high skilled versus 2 high skilled plus 8 lower skilled also highlights the problem because in reality the comparison would more likely be:

      5 high skilled admins to do job X.
      1 high skilled admins and 40 low skilled admins to do job X.

      1 good high skilled admin is usually worth at least 10 low skilled admins.

      The other problem with your scenario is that the low skilled admins work at the behest of the high skilled admin; and they'll usually be LOWER skilled than they should be (e.g fresh off the certificate farm or out of school) so they're really worth even less.

      You can often see this in Windows versus Unix admins where a single high skilled Windows admin will only administer a handful (typically 5, though less than 10) boxes at a time, while a typical Unix/Linux admin will be administering 100+. So again, it depends on what X is.

      The sad thing is that management will often use the argument you use to "reduce costs" - but in the end cost themselves more because of the foobars of the lower skilled admins or because they changed models from a cheaper model with more highly skilled admins (e.g 5 high skilled Unix Admins with 500 servers) to a "cheaper" model with lower skilled admins (e.g 2 high skilled Windows Admin and 6 low skilled Windows Admin with 40 servers that all cost more than the 500 servers) but they're "saving" on human costs (not really, but that's how they sell it).

      Or take the recent off-shoring of technical services (such as Help Desk) where a small team in the US (or Canada or anywhere in Europe) got replaced by a larger and cheaper team in India. They've discovered that it's not really advantageous to do so - it really does cost more to offshore than keep local people because of all the mistakes the cheaper workers will make - whether cultural differences leading miscommunication or other things of similar nature, ultimately costing customers which makes dents in the bottom lines.

      So it really does depend on what X is and what you're trying to do with it or whether you're trying to replace Y with it, and how all the numbers work out. You'll often be surprised to find that what you thought was a cheaper route isn't.

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    68. Re:Too Late by TsuruchiBrian · · Score: 1

      The implication was that there is an equivalence between the relationship between (knives->surgery : software->IT). He is implying both that surgery is more than just using a knife and it's opposite. This is what's known as a contradiction. And I was trying to highlight this contradiction.

      If I Bob says "I hate all mammals" and Sally says to Bob "But dolphins are mammals", is she implying that Bob hates dolphins or that Bob doesn't hate dolphins. It could be either or both. It's ambiguous.

      I realize you are trying desperately to "get me", but this is getting really boring for me.

      My advice to you is to just read what people actually say rather than inferring extra meaning from what they said based on what kind of tone you feel like they have.

    69. Re:Too Late by TsuruchiBrian · · Score: 2

      I would say it depends on what X is.

      Of course it does

      My primary point was that X being Microsoft Exchange or any of the other big tools that Microsoft markets towards Scenario B is ripe for problems since those low skilled admins will create a lot of problems that fewer higher skilled admins would have prevented.

      Sure there are lots of jobs like that. My job is like that.

      And the fact that you're comparing 10 high skilled versus 2 high skilled plus 8 lower skilled also highlights the problem because in reality the comparison would more likely be:
      5 high skilled admins to do job X.
      1 high skilled admins and 40 low skilled admins to do job X.

      1 good high skilled admin is usually worth at least 10 low skilled admins.

      Sure. For jobs like that you just don't hire low skilled workers, because it is not economically efficient. But if you can make a job a little easier, you should be able to hire at least slightly less skilled workers or at least fewer workers of equal skill.

      All I am saying is that if you make a job easier to the point where it is actually easier (i.e.not just perception), that is a good thing. This is in contrast to the suggestion that making jobs easier is not good, because it lowers wages.

      And yes, whether you can *actually* make job X easier is always an open question. If you can only make Job X seem easier (but not actually easier) then you shouldn't do that because having bad information just wastes resources (e.g. time, money, etc).

    70. Re:Too Late by BronsCon · · Score: 1

      So wait, your argument boils down to... *facepalm* you weren't sure whether he was saying he would or would not let some bozo off the street perform surgery on him? Seriously? And you think he and I are the idiots? Anyone reading this thread will pick out the inconsistencies in your position without a second glance; not, I'm not trying to "get" you, you've already "gotten" yourself. Good on you for getting another reply out of me, though; I figure if it were nearly as boring for you as you claim, you'd have left it alone when I said I was done.

      --
      APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
    71. Re:Too Late by TemporalBeing · · Score: 0

      All I am saying is that if you make a job easier to the point where it is actually easier (i.e.not just perception), that is a good thing. This is in contrast to the suggestion that making jobs easier is not good, because it lowers wages.

      And yes, whether you can *actually* make job X easier is always an open question. If you can only make Job X seem easier (but not actually easier) then you shouldn't do that because having bad information just wastes resources (e.g. time, money, etc).

      Agreed.

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    72. Re:Too Late by david_thornley · · Score: 1

      In one case, I have a bunch of DLLs and .h files and some documentation. In another, I have tons of source code that requires mathematical knowledge that would probably take at least a month of serious study to comprehend (I work around the edges sometimes), .h files, and less documentation. In neither of these cases am I going to know the exact algorithm for everything, and yet these are vital in what I work on.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    73. Re:Too Late by Anonymous Coward · · Score: 0

      Microsoft worked hard to make pushing a few buttons work 90% of the time, but it can't fix all the myriad of edge cases that fall into the other 10%. the story implies simplifying the system negatively impacts your ability to solve cases that fall outside normal operation. A company is paying a price for a cheaper admin, who falls over on all those 10% of the time edge cases, in comparison to the more well rounded problem solver.
      Are microsoft wrong in doing that? not in my eyes. Are the company wrong for employing a person less suited to keeping the system running under all failure cases? much more so, yes.

  2. Glueing things together is how I teach OO design.. by Anonymous Coward · · Score: 0

    Because that's what OO design is. Build a lego brick from lots of little prefabbed framework bricks to solve bigger problems. Put those bits together and you get to solve bigger problems. This sounds like the ramblings of a C weilding academic to me. Wow, problems that are phrased well are easier to understand? Say it ain't so. Coincidentally, that is a key skill for interfacing with non-technical team members.

  3. Oh you mean you want unintuitive code by Crashmarik · · Score: 1

    Like this
      X 3 3÷9 Y DATA[DATA] A comment

    I really don't mourn APL's passing.

    It is nice to see that programming as a discipline has reached the point where it questions it's great successes.

    1. Re:Oh you mean you want unintuitive code by Anonymous Coward · · Score: 0

      You're old enough to know about APL, but you still can't tell it's from its? Even though you complain about APL's mess of characters?

      It's means it is.

      Your (see what I did there?) right, that completely invalidates his entire argument.

    2. Re:Oh you mean you want unintuitive code by pollarda · · Score: 2
      I think that what they are trying to say is that if we all are presented with problems that we solve in assembler then we will develop a very good understanding of how to solve a large number of problems computationally as we will have a very good understanding of the underlying computer architecture. (How's that for a long sentence?)

      I've known a lot of brilliant assembler programmers and I have to admit, I've always admired them for their skills. Even so, I can get a whole lot more done than they can using C/C++. I'm sure for a lot of projects someone else can get a lot more done than I can using Python but they will probably not have the same level of understanding as the assembler guy.

    3. Re:Oh you mean you want unintuitive code by pollarda · · Score: 1

      just because we can code dont mean that we know proper engrish

    4. Re:Oh you mean you want unintuitive code by chill · · Score: 2

      The key is once you get a good knowledge of assembler, you stop using assembler as a general purpose tool and only use it were it would benefit.

      Back in the day ham radio exams in parts of the world required building a functioning radio from supplied parts. You had to know how a radio worked, in the abstract.

      That doesn't mean that once you have that knowledge you forever build your own radios from unassembled kit.

      --
      Learning HOW to think is more important than learning WHAT to think.
    5. Re:Oh you mean you want unintuitive code by TsuruchiBrian · · Score: 1

      Being proficient in different tools (e.g assembly, c++, python), doesn't give you more or less understanding, it just helps you understand different things. Being able to write good python code means you are probably good at abstracting solutions to problems, which is a very useful skill.

    6. Re:Oh you mean you want unintuitive code by SuperKendall · · Score: 1

      I prefer to imagine he's such a dedicated programmer he cannot bring himself to insert unbalanced ' characters.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    7. Re:Oh you mean you want unintuitive code by mwvdlee · · Score: 1, Insightful

      Yeah, only people who speak perfect english can ever be credible.
      Fuck Einstein, Curie and all those stupid Greek philosophers.

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    8. Re:Oh you mean you want unintuitive code by Anonymous Coward · · Score: 0

      Crashmarik is no Einstein. Neither are you. Neither was Einstein, really. (Olinto de Pretto was.) Learn it's means it is.

    9. Re:Oh you mean you want unintuitive code by Anonymous Coward · · Score: 0

        X 3 3÷9 Y DATA[DATA] A comment

      I really don't mourn APL's passing.

      I do, but suspect you messed up in the expression of APL (slashcode strikes again). There should have been a right-arrow after the X (and possibly in other places, can't tell for sure), and there should have been a lamp character before the comment (see this article). APL was the ultimate way to express mathematical algorithms in a computer language.

    10. Re:Oh you mean you want unintuitive code by Crashmarik · · Score: 0

      You're old enough to know about APL, but you still can't tell it's from its? Even though you complain about APL's mess of characters?

      It's means it is.

      You wouldn't know a good Asperger charity I could donate to ?

    11. Re:Oh you mean you want unintuitive code by DavidHumus · · Score: 0

      So, you clearly don't understand the language well enough to post a coherent line of it but feel competent to comment on it? WHOOSH! (The sound of the merits of APL passing well over his head)

    12. Re:Oh you mean you want unintuitive code by thinkwaitfast · · Score: 1

      abstracting solutions to problems

      I work on real time control. The basic for of every piece of software follows the same pattern for the last 60 years.
      1 read (measure temperature, water level, etc)
      2 evaluate (f(13cm of water, at 90c) = valve opening angle = 17.7 degrees - through some set of complicated functions and lookup tables)
      3 output (writing 0x418d999a to location 0xFFBEAD408)
      4 wait for timer
      5 go to 1
      The solution has been abstracted out for about 50 years now. The hard part is knowing not to optimize out &0x418d999a = 0x418d999a because it has no affect n the software or when to use asm ("fflush"); depending on your memory controller. I don't know, maybe something in csp has been developed, but is it really so much better than repl loop?

    13. Re:Oh you mean you want unintuitive code by Crashmarik · · Score: 1

      If you can post a back arrow here be my guest. I suspect I was writing APL code before you were born and probably stopped before you learned how to talk.

    14. Re:Oh you mean you want unintuitive code by TsuruchiBrian · · Score: 1

      I don't think anyone is saying that you should have N levels of abstraction in software designed to control a single servo from an embedded computer. There is a time and a place to be abstract, and a time and place to be explicit.

      That said, there are benefits to software abstraction even in some low level code. Abstraction allows you to reuse logic that would otherwise be duplicated. All that duplicated logic needs to be tested and maintained.

      Rather than hard coding all this stuff you could do something that abstracts the general pattern which is no doubt reused all over the place, and separate out the common logic from the logic specific to that particular thermometer/servo.

      If you have a good compiler, the abstracted code often gets turned into very similar (or even the same) machine code.

    15. Re:Oh you mean you want unintuitive code by jsilver212 · · Score: 1

      This bothers me. I especially hate superfluous apostrophe's. (/s)

    16. Re:Oh you mean you want unintuitive code by Anonymous Coward · · Score: 0

      You don't know if English is this person's first language. You don't know if they were typing on a device which autocorrected. You don't know how much time they had for proofreading. In summary, you don't know jack shit.

      This is a Slashdot comment, not even a professional email. The effort spent on polishing a message should be commensurate with the importance of the message. Besides, you understood precisely what they meant.

    17. Re:Oh you mean you want unintuitive code by Anonymous Coward · · Score: 0

      Using "it's" as a possessive is constitutional, as in literally occurring in the US Constitution.

    18. Re:Oh you mean you want unintuitive code by Anonymous Coward · · Score: 0

      <

      Like that? Think of it as "less than" and you'll get it more easily. Take out the spaces:

      & l t ; = (sans spaces) <

      KGIII (I'll save a post in case I get wordy later.)

  4. Tempting to read this as a mea culpa by Anonymous Coward · · Score: 0

    Sure must be some people getting their ears boxed at Facebook HQ over the epoch bug.

    Alternatively they may be owning up to how bullshit interview questions are: you're a psychological experiment guinea pig!

  5. Wrong end of the telescope by Anonymous Coward · · Score: 1

    The purpose of computer languages, frameworks and libraries is to solve business problems not to do your CS homework. That's why introductory programming classes don't use lean on frameworks (thanks Niklaus Wirth!) but real-world programmers do.

    TL/DR: educational psychology study results should be applied in educational settings, not in business settings.

    *grumble* Stupid kids can't see the forest for all the trees...

  6. Oh yippee, another county heard from by Anonymous Coward · · Score: 0

    > but luckily we invent tools to make it manageable.

    This idiot thinks the tools we have make this shit "manageable"?? Is he kidding?

    More often than not the tools are just half baked abominations, gimping along just well enough to get through some crisis, and never looked at again. All incarnations of make, the so-called "auto-tools", cvs, svn, hell, even git is a complete pain in the ass. No sane person calls these tools "manageable".

    And compilers? LInkers? Project management? Yeah those tools are so easy to use that we have to build abortions like Visual Studio and Xcode because we have no possibility of remembering how they work. Then we have to glom "package managers" like nuget et.al. onto the side because who the hell knows what dependencies this shit has.

    AFAIC the tooling we have is shit, and every methodology that anybody ever dreamed up to manage this shit is also shit. And I'm sorry but "gluing things together" is ALL programming is anymore, or at least since 1983. We glue the shit that shit-makers like Facebook, google, Microsoft, Twitter, and 99 kajillion other web api and platform vendors give us to glue.

    Stop trying to make it something it's not.

  7. This message brought to you by.. by DarkOx · · Score: 3, Insightful

    Researchers found that if they made a test deliberately hard to understand, those taking the test would exhibit greater understanding after solving it than those who were presented with a more intuitive wording of the same problem.

    Paid for by the society of project managers and business software analysts.

    --
    Repeal the 17th Amendment TODAY! Also Please Read http://www.gnu.org/philosophy/right-to-read.html
    1. Re:This message brought to you by.. by Anonymous Coward · · Score: 0

      They don't want sailors they want oarsmen

    2. Re:This message brought to you by.. by Anonymous Coward · · Score: 0

      Or linguists and psychologists. Rephrasing a question does make it simpler to understand, and true that details could be missed for the correct answer.

      With respect to programming, what is meant by this article is too much reliance on people expecting function A doing what it says it does, until you pass what function A expects, and get something else entirely. Such as, passing a string literal that's a number, attempting to cast it to an integer within the function, whereas the function doesn't check the length of the string, first, to prevent overflow.

      It's more a lesson in life: understand what you're looking for to happen more than just expecting it to just happen. Example: You smoke, and want to quit smoking. Okay, here's how you do it: you stop smoking. So, stop smoking is the result, and the function is quitSmoking(). But what is quitSmoking() doing on the inside? You'll never know unless you look into it -- that is, how do you quit smoking?

      For both: if you're expecting a result, you have to evaluate if what you are doing (instructions/algorithm) is going to give you what you want. Copying and pasting code won't necessarily do that, especially in business, as the software needs to serve the business' needs. And each business has different needs.

    3. Re:This message brought to you by.. by Anonymous Coward · · Score: 0

      This is kind of reminding me of the function stat. Boy was it a surprise to me to find out that the block size and block count referred to in the returned struct actually dealt with entirely different blocks. The documentation didn't really talk about it either. For those wondering, the block size is referring to the size of the block within the file system. The block count refers to the number of blocks the file occupies in the medium, based on the medium block size. This hit me when I wrote a 1 byte file, which used 4K block size, and somehow was using 8 blocks, because the hard drive underneath used 512 byte blocks, so a 4K file system block used 8 hard disk blocks.

      On a side note, to the makers of stat, for effs sake! Why do they refer to different block types and make no statement of differentiation?!

    4. Re:This message brought to you by.. by barbariccow · · Score: 1

      Besides the docs?

      blksize_t st_blksize; /* blocksize for file system I/O */ blkcnt_t st_blocks; /* number of 512B blocks allocated */

      Or in the structure itself? Did you want them to name it st_blksize_this_is_blocksize_ for_filesystem_io_not_number_of_underlying_blocks_allocated; or do you prefer camel case? :)

  8. Gimme a break.... by Anonymous Coward · · Score: 0

    We may refer to this as the framework intuitive space. On the other hand we may refer to the rest of the space that framework doesn’t solve or have an opinion on as the framework negative space.

    "framework intuitive space" ?!

    "framework negative space."?!

    I suggest the author gets out of the advertising business ( like facebook) and go to work for a tech company where he can work on some intelligent and socially useful projects.

    From what I gather from his long winded essay using made up terms to sound more important is that if programming gets hard, figure it out and don't slap togehter shit you find of the Internet.

  9. Never understood this by Anonymous Coward · · Score: 0

    I never understood all the self-introspection and rumination and hoops like Agile methodology that programmers go through. Just write the software. It isn't terribly complex to just do it. I've been doing it for decades, and I am not particularly bright. If you make a mistake, just rewrite/correct it. It is called SOFTware for a reason. It is easily changeable. Just do it.

    1. Re:Never understood this by gbjbaanb · · Score: 1

      you forget there's an industry around designed to make things harder, that';s how they get paid.

      If you can;t be part of the solution, there's good money to be made being part of the problem. Hence Scrum.

    2. Re:Never understood this by Anonymous Coward · · Score: 0

      I never understood all the self-introspection and rumination and hoops like Agile methodology that programmers go through. Just write the software. It isn't terribly complex to just do it. I've been doing it for decades, and I am not particularly bright. If you make a mistake, just rewrite/correct it. It is called SOFTware for a reason. It is easily changeable. Just do it.

      Yeah. "It's easy! All You Have To Do Is..."

    3. Re:Never understood this by Anonymous Coward · · Score: 1

      All You Have To Do Is...

      buy my new book!

    4. Re:Never understood this by 110010001000 · · Score: 0

      Correct: all you have to do is write it. Millions of people do it every day. The first versions of Linux were written by one person. So were most initial versions Operating Systems and significant programs. Amazing!

    5. Re:Never understood this by mwvdlee · · Score: 1

      Having worked in a 10-hours-a-week-in-meetings company, I kinda like the less time wasted by Agile.
      It is supposed to turn the manager into a problem-solving facilitator to the team instead of a controlling boss.
      Sadly, most managers have an ego-problem, causing them to prefer span-of-control over productivity.
      Agile was created to give managers a cool, hip buzzword to tack on their resume, while not being too disruptive to the workers.

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    6. Re:Never understood this by thinkwaitfast · · Score: 1

      industry around designed to make things harder

      Don't forget he hype, eg "Rocket Science". No more difficult tan any other large scale engineering project. But because it's "rocket science" it's immeasurably difficult and therefore must cost a lot.

    7. Re:Never understood this by Anonymous Coward · · Score: 0

      Don't be silly, books are cheap. Attend my lecture!

  10. Specialization by Tony+Isaac · · Score: 3, Insightful

    Code reuse, libraries, sharing, and open-source are very important to software engineering, but we should be careful to not enable the belief that programming should be as easy as gluing things together

    This is the wrong conclusion. Most of the time, we should give preference to tools and practices that have already become best practices, without necessarily questioning each one every time. Of course, there is room for challenging best practices and libraries, but that's for people who are interested more in the best practices and libraries, than for the people trying to use them to create something useful to end users.

    You don't need to know how to repair a car to drive one. The guy who repairs your car doesn't need to know how to build a motor or a transmission, only how to install them. The guy who assembles the motor doesn't need to know the finer points of metallurgy. The guy who refines the metals doesn't need to know the finer points of mining. Each of these stages of production can have their own issues that need to be resolved, but the guy driving the car needs to worry only about staying safe on the road and reaching his destination.

    Programming should be the same way. I shouldn't have to debug the IP stack to make my program connect to the Internet, nor should I have to reinvent build systems to produce a product.

    Specialize!

    1. Re:Specialization by Anonymous Coward · · Score: 0

      You're barking up the wrong tree.

      The trend in IT over the last 30 years hasn't been to specialize, it has been to dump every job on one poor slob, work him 100 hours a week and tell him to be grateful because there are a billion people in India who'd be glad to do it for a tenth the price.

      So instead of specialists, we have one person doing the UI design, the application code, acting as DBA, sysadmin, etc,, etc., etc.

      After all, a child could do it!

    2. Re:Specialization by Anonymous Coward · · Score: 0

      +1 to this, and a preemptive note to the morons preparing that asinine Heinlein quote about specialization: Heinlein was an idiot, and so are you for aping him.

    3. Re:Specialization by __aaclcg7560 · · Score: 1

      The trend in IT over the last 30 years hasn't been to specialize, it has been to dump every job on one poor slob, work him 100 hours a week and tell him to be grateful because there are a billion people in India who'd be glad to do it for a tenth the price.

      I've done I.T. support contract work for the last ten years. My contracts have prohibited me from working more than 40 hours a week. I also specialized in cleaning up the messes left behind by a billion people from India who get paid a tenth of what I earn. This poor slob is laughing all the way to the bank.

    4. Re:Specialization by AcidPenguin9873 · · Score: 1

      I agree with your general sentiment, but I would say that some amount of knowledge of levels just above and just below your own level is helpful or often necessary to do a job at a particular level.

      Using my own example of a computer system:

      • App developers generally need to know something about how the app framework or OS works.
      • Framework developers generally need to know how apps interact with their framework/services, and how to interact with the OS.
      • OS developers have to be very aware of the API and ABI they expose to frameworks/apps, and often many details about the hardware (CPU, GPU, whatever random network card or other device they are working with).
      • Hardware designers generally need to know how low-level software will interact with them, as well as about the physical design features and limitations (how fast do the transistors and wires run, rules about area and congestion in the integrated circuits, etc.) that the hardware is being built upon.
      • Physical designers need to know about the general organization of the logic they are implementing (how many ports on this structure, what other blocks of logic does this piece of logic talk to), as well as some about the transistors, wires, capacitance, EM noise, etc. that make up the design.
      • Process engineers need to know how physical designers are using their transistors and wires, as well as a bunch of stuff about basic physics, chemistry, etc.

      So yes, specialization, but some cross-discipline knowledge too.

    5. Re:Specialization by Ichijo · · Score: 2

      You don't need to know how to repair a car to drive one.

      Of the two, would you prefer to have a mechanic or a non-mechanic drive you to the other side of the country?

      --
      Any sufficiently unpopular but cohesive argument is indistinguishable from trolling.
    6. Re:Specialization by Anonymous Coward · · Score: 0

      Says some random blowhard on the internet...

    7. Re:Specialization by Anonymous Coward · · Score: 0

      Depends how much more the mechanic is going to charge me for the service.

    8. Re:Specialization by Anonymous Coward · · Score: 0

      ...correctly.

    9. Re:Specialization by quietwalker · · Score: 2

      I've noted that businesses that have historically shown high growth and apparent long term stability seem to be looking for "T-shaped" employees. These are employees who know a little about a lot (a wide horizontal) and a lot about a little (a narrow vertical). Specialization is good, but you have to know enough to be able to respecialize in anything else quickly, which means dabbling in a bit of everything so that it's at least familiar.

      Basically, a jack of all trades AND a master of one.

      To use your analogy, you don't need to know how to rebuild the motor in order to drive the car, but you should be aware of all the parts and how they operate, so that way when something makes a noise, you not only know what it likely is, you either know how to fix it (or if it even needs fixing) and where to start looking for the information on how to fix it - even if you lack the tools or experience to do so.

    10. Re:Specialization by mwvdlee · · Score: 1

      This poor slob is laughing all the way to the bank.

      I'm glad for you. I've done the outsourced code "integration" work as well.
      It got me all the way to the bank alright, but I sure as hell wasn't laughing.

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    11. Re:Specialization by Anonymous Coward · · Score: 0

      If they aren't bringing a tractor trailer with shop tools, then I'd rather take the non-mechanic for more interesting conversation.

    12. Re: Specialization by Anonymous Coward · · Score: 0

      Found the anarchist!

    13. Re: Specialization by Anonymous Coward · · Score: 0

      The non mechanic might be a plumber.

    14. Re:Specialization by Tony+Isaac · · Score: 1

      Clearly, you and I drive different kinds of cars. I never would even think to ask a potential travel companion of they knew how to fix a car! I would focus instead on ensuring that the car is in good running condition before the trip, and ride with the people I'm most interested in riding with.

      The analogy holds. If you choose good quality software components, you don't need to have someone on-site who understands their inner workings, just the interface.

    15. Re:Specialization by Anonymous Coward · · Score: 0

      Conclusion: People who know more about how things work tend to know more about how things work.

      Insisting that your users understand every nuance of your code usually means there's a failure to abstract or design the component - it's probably a "Big Ball Of Mud(TM)". The same line of thinking drives the "code *is* documentation" crowd. I don't believe in that way of working but that's usually how most programming chop shops work.

      Having to know everything you use means you'll very quickly hit the wall of complexity and you'll fail to build anything more complex. There's only so much technical information you can fit in your head at once before you have to:
      a) Find a better programmer.
      b) Find a simpler project.

      Lots of places have a combination approach to this: Keep hoping for that legendary programmer that can absorb 10-20 years of your company culture and technical debt and still write good code - grow that guy up on the legacy codebase. While doing this, move your tenured staff to higher ground away from the sinking codebase. Let them work on something smaller and easier. This is bad juju in some respects because it teaches your programmers not to care about the upkeep of the code or to have any responsibility for process and maintenance. You write crap and then get bailed out onto the shiny new project, or (worse) into management - this is a bad lesson. If the company can't find a shiny new to keep the old guard happy then they leave and you suffer mass braindrain and code extinction.

      And it all stems from failing to write an abstraction and reinventing the wheel - Classic "Not Invented Here" syndrome.

    16. Re:Specialization by Ichijo · · Score: 1

      If you choose good quality software components, you don't need to have someone on-site who understands their inner workings, just the interface.

      If there are no leaky abstractions.

      --
      Any sufficiently unpopular but cohesive argument is indistinguishable from trolling.
    17. Re: Specialization by Anonymous Coward · · Score: 0

      By looking in your imagination.

    18. Re:Specialization by phantomfive · · Score: 1

      I've noted that businesses that have historically shown high growth and apparent long term stability seem to be looking for "T-shaped" employees. These are employees who know a little about a lot (a wide horizontal) and a lot about a little (a narrow vertical). Specialization is good, but you have to know enough to be able to respecialize in anything else quickly

      Well said.

      --
      "First they came for the slanderers and i said nothing."
    19. Re:Specialization by thinkwaitfast · · Score: 1

      Knowing the whole stack (from mining up) can help you be better at the part you're specializing in. I've literally been involved in software problems where knowing how CMOS gate logic works came in handy.

    20. Re:Specialization by Tony+Isaac · · Score: 1

      Yes of course it does. And knowing metallurgy, engine construction, and car repair can help you be a better driver, especially if you're a race driver. But for the typical auto owner, knowing that level of detail is not necessary. And for many programmers, that level of knowledge is also not necessary.

    21. Re:Specialization by thinkwaitfast · · Score: 1

      If you want to make a lot of money and not be replaced by some kid in a third world country, it's best not to be typical.

    22. Re:Specialization by Anonymous Coward · · Score: 0

      > The analogy holds. If you choose good quality software components, you don't need to have someone on-site who understands their inner workings, just the interface.

      How do you tell a good and bad quality software apart, when you have no clue how they work?

    23. Re:Specialization by strikethree · · Score: 1

      You don't need to know how to repair a car to drive one. The guy who repairs your car doesn't need to know how to build a motor or a transmission, only how to install them. The guy who assembles the motor doesn't need to know the finer points of metallurgy. The guy who refines the metals doesn't need to know the finer points of mining. Each of these stages of production can have their own issues that need to be resolved, but the guy driving the car needs to worry only about staying safe on the road and reaching his destination.

      I agree and disagree. Let me explain:

      You are correct that the average driver does not need to know these things; however, the average driver only drives on paths that have been specifically laid out for them. That is why your analogy fails. Programmers are always going somewhere that nobody has made a path before. Similar paths? Most certainly. Same path? No.

      I have built a very nice "race" car. Do I know everything about putting such a car together? No. I had a friend do it. Do I know everything about programming the ECU (engine control unit)? No, I had another friend do it.

      Despite all of this, I did research to learn about metal allows, air/fuel mixtures, rod lengths, rotational velocities, etc. How else am I going to specify what I need/want without knowing all of these things?

      I learned enough to actually put the car together. I learned enough to program the ECU. It would take me 20 times longer than the friends I paid to do it for me, but if I did not learn those things, all I could say is, "build me an awesome car", and then be disappointed that it was not quite what I wanted... even if it is still a badass car.

      Programmers are in the same position. They need to understand sorting algorithms, data structures, and such in order to know which library to actually use. Should they be rewriting algorithms? Sometimes, but not normally... but then meh. Fuck it. Let them buy their certified professional programmers for half price. When they ask what went wrong, I will just be shrugging my shoulders.

      There is no fix for stupidity. Cronyism and nepotism keeps the best from rising to the top and this is a world that is rife with such corruptions. Sorry, I am too depressed to finish my original point.

      --
      "Someone needs to talk to the tree of liberty about its ghoulish drinking problem." by ohnocitizen
  11. Correct as far as it goes. by gestalt_n_pepper · · Score: 1

    This is a consideration for students and other people involved in learning a new language or skill set. In that case, yes, it makes sense to make the student work somewhat harder (within reason) to figure it out

    On the other hand, in a business context, you're not trying to develop understanding; you're trying to accomplish a specific task as quickly, easily and cheaply as possible. In that case, intuitive presentation of the problem is desirable and fostering development of deep understanding may be neither necessary nor cost effective.

    --
    Please do not read this sig. Thank you.
  12. Re:Glueing things together is how I teach OO desig by Austerity+Empowers · · Score: 3, Insightful

    C weilding academic to me

    Say what? I don't know too many (computer science) academics who'd touch C with a ten foot pole. Those of us who use C do it for real work (and like it/won't get off it).

    If I want to live in an ivory tower I'd either a) use the latest theory compliant language/compiler du jour or b) refuse to code at all since that is an implementation issue, and instead pontificate on what is missing from latest language.

  13. The sad reality of software today by Anonymous Coward · · Score: 0

    but we should be careful to not enable the belief that programming should be as easy as gluing things together.

    This pablum passes for wisdom nowadays. Actually, Church's Lambda Calculus proves the opposite. But, yes boys and girls, programming can be hard

  14. Heh, describing quicker short-term memory by Anonymous Coward · · Score: 0

    lol

  15. Odd title by Etcetera · · Score: 2

    A better title might be "Why Hipster Coders Shouldn't Think Super-High-Level JS-Framework-of-the-Month Calls Mean You're a Good Programmer"

    It's hard not to extend this to a #kidstoday rant, and I'm by no means arguing to go back to assembly, but at some point forcing large amounts of programming to the lowered-barrier of entry just reduces the percentage of folks who actually know what they're doing and can critically analyze the situation.

    1. Re:Odd title by gstoddart · · Score: 5, Informative

      Yeah, I always found coding (and especially debugging) required a level of intuition ... precisely because it was more than just gluing pieces together.

      I understand you don't want to rely too much on intuition, because it's hard to sound like anything other than voodoo, but sometimes the voodoo is still a real thing.

      I worked with someone years ago who liked to go on about how everything should be abstracted and pretty/elegant according to whatever was popular that month. He read the books and magazines incessantly, and wouldn't shut up about them.

      The problem is he often wrote shit code he couldn't maintain or debug because he'd abstracted things so much it was impossible for him to follow his own code, or know where to look when things went wrong. A small enhancement request left him squealing how the code wasn't designed to do that and he'd have to rebuild it. Meanwhile the rest of us went "so, all of that is in here, and if I just nudge this a little it's all done".

      I'm sure he got better over time, but for someone who was so loudly a proponent of the latest language theories and methodologies, he never seemed to understand how his neat intellectual model in no way translated into maintainable, readable, or sometimes even useful code. But his insistence on following all of these things usually had the result of him making absolutely terrible design choices.

      These frameworks and methodologies sound awesome on paper, but you can still use them to write complete garbage code which is brittle, inflexible, and often completely wrong for what you're trying to use it for.

      Whereas the guys who learned to program and debug without the syntactic sugar and frameworks to build upon, those guys tended to have a bigger picture view of the pieces. Which means you can zero in on where you think it likely went sideways instead of staring blankly wondering why your monument to methodology is now a teetering mess you have no idea where to begin with when there's a problem.

      --
      Lost at C:>. Found at C.
    2. Re:Odd title by quietwalker · · Score: 1

      My problem is with the strongly opinionated frameworks. You know, the ones where you use framework 'X' and now you have a 'X'-website or 'X' application? Where the framework's author makes the majority of architectural and project organization decisions. Sure, they make 80% of the common usage patterns easy, but that almost always results in making 10% of what's left hard and the remaining 10% near-if-not impossible.

      In a world where the programmer makes the rules, this is fine - they can find some awkward workaround, like forcing a second login or putting validation logic only on the client side. Unfortunately, in the business world, the customer is the one making the rules, and the customer always wants 100% of the product working the way they want it to work.

      They seem to flourish - at least until the next fad framework - thanks to their low barrier to entry and focus on the intuitive space the article author references.

      Hipster coder though? I don't know. Almost every dev I know has some subset of interest in new languages, frameworks, libraries, and so on. It's their toy language or pet project. In fact, the biggest violators I see are actual experienced programmers who do know what they ought to, but don't want to spend time reinventing that same tired ground when they just want to play around.

      In fact, not having to reinvent that same solution is exactly what they're interested in.

      That's why you'll find a Karaf server running a Camel app in a Microsoft shop, even though there's no one left at the company who knows OSGI. Or find an external build script dependency in the form of a Rust script from out of nowhere. The people who should know better just want to play, and the easiest way to do that is to make it part of their day to day job.

      What this article and experience tell me is that more than ever, we're in need of technically-competent managers who can evaluate, triage, and reign in individual developer output and provide focus.

      At least, in a business environment, where product delivery, support, and maintenance are more important than playing around.

    3. Re:Odd title by edtice1559 · · Score: 3, Interesting

      I don't doubt your story but the problems we are solving today are more complex than the ones of years ago. In the 1970s if you wrote a nifty way to solve the quadratic equation you might be considered a super star. (Okay that was somewhat of a dramatization) But today we are dealing with much more complex domains. In many cases we are trying to model human behavior. It's simply not possible to solve these problems if we didn't have building blocks. What we really need is a good understanding of the problem we are trying to solve and enough technical skills to turn that understanding into something working. Getting the problem description right is where the heavy lifting should be. If the implementation involves fussing with tools rather than working on the problem, the tools should improve.

    4. Re:Odd title by Anonymous Coward · · Score: 0

      Beginners or people forced to work on software without any training or tutoring tend to buy into one hype or any established practice, while never questioning their own and others' motives whatsoever.

      The experts tend to use whatever is available, looks simple and seems to have the least amount of flaws. Special, complex and dependency-driven development is the opposite of all that.

      The difference is that the experts own their own codebase more than the others, which tend to empower wise decision-making and shielding from external harm.
      The expert coder may consciously choose a complex library for many other reasons, but will know most of the limitations beforehand and will not recommend it for anything meant to grow organically.

      The idea of making "building blocks" out of code is a very tempting offer, but seriously limits what can be accomplished on other areas besides initial cost. Experts know this from hard experience and will tend to be very sceptical the more magical code becomes. Over time though, we often see feature creep. We've seen it in C++ over the years, and now in Java. It's part of a natural cycle. Garbahe keeps creeping in, until it becomes a mess and the cycle must start anew.

    5. Re:Odd title by rasmusbr · · Score: 1

      I think what the author meant to say is that novices who get access to a battery powered, laser-aimed, gyro-stabilised screwdriver will frequently spend hours thinking about how to hammer nails with it.

  16. Re:Glueing things together is how I teach OO desig by Rei · · Score: 4, Insightful

    Careful, C++ has its own share of unintuitive weirdness. Take the following example:

    std::map<int, int> map;
    map.emplace(1, 1);
    auto iter = map.begin();
    std::cout << iter->first << ", " << iter->second << std::endl;
    map.emplace(0, 0);
    std::cout << iter->first << ", " << iter->second << std::endl;

    This prints out:

    1, 1
    1, 1

    Nothing unusual there, right? std::map iterators are non-invalidating and you're not touching "iter", so it should be (and is) remaining the same. But what if we use reverse iterators (and correspondingly switch the side of the iterator we do the insert on)?

    std::map<int, int> map;
    map.emplace(1, 1);
    auto reverse_iter = map.rbegin();
    std::cout << reverse_iter->first << ", " << reverse_iter->second << std::endl;
    map.emplace(2, 2);
    std::cout << reverse_iter->first << ", " << reverse_iter->second << std::endl;

    1, 1
    2, 2

    Despite sounding like the same sort of thing ("iterators"), forward and reverse operators have some very different properties in a key area. A non-invalidating forward iterator will always remain pointing to the exact same element regardless of what happens with other parts of the container. This does not apply to reverse iterators, as they are implemented in a rather unintuitive way - they actually point to the element after the element that they pretend to point to, and so changes to other elements can change what they appear to point to.

    There's a lot of things like this in C++ that can slip past a person for years before it actually bites them. Don't get me wrong, I love C++ and think C is a rather dangerous language (from a memory safety standpoint) that requires that its authors reinvent the wheel over and over again. But C++ does have some weirdness in places that can pose hazards. For example, from a more beginner-perspective, what percentage of users have at one point been frustrated by trying to understand why a pointer in one of their classes is getting freed unexpectedly, due to not realizing the dangers of the implicit copy constructor/assignment operator when it comes to pointers? I bet that's bit almost everyone at some point in their career. Sure, you can "reason out" that that would happen, but most people learn it by being bitten once or twice.

    --
    Shiny New Australia.
  17. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    and instead pontificate on what is missing from latest language.

    you mean you'd be a software architect complaining how so and so's code doesn't follow SOLID principles?

  18. Pass me the glue by zJe · · Score: 2

    Gluing things together is how programming works. You start by gluing the small bits together to make bigger bits and so on and so on. Eventually you come to realize that when you need to use "Super Glue" to hold the bits together it's probably broken. Usually you glue bits together at discrete places, if you have to work on bits that have had the glue brushed on in large amounts, that's call accretion, avoid those bits, maybe put a layer of wax around them with tiny spots for glue.

  19. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 1, Insightful

    Having just finished a stint in academia, this. This 1000 times over. I actually worked along side someone who didn't understand why python wasn't used for firmware programming going on about how using it would fix all sorts of issues. Trying to make him understand the problems with resource limitations was completely useless. He just couldn't grasp that infinity was just a concept that didn't actually exist.

  20. Re:Glueing things together is how I teach OO desig by GuB-42 · · Score: 1

    Not really OO design but modular design. OO is just a way to this end, functional programming is another one. And you can be modular in C, too, there are plenty of excellent C APIs out there, starting with the libc iteslf.
    As for the Lego brick metaphor, it is very theoretical. In practice, abstractions leak. Which mean that to use the brick properly, you need to know what's inside the brick. Like, for example, garbage collectors that should manage the memory for you and yet, you need to help it in some cases (cycles, ...).

  21. Was this a dig against code.org? by xxxJonBoyxxx · · Score: 1

    >> we should be careful to not enable the belief that programming should be as easy as gluing things together

    I just helped my daughter do the princess-themed exercises on code.org. Code.org is ALL about "gluing things together" and issuing a "computer science" certificate at the end. Is this post Facebook's dig against code.org or this just one random guy?

  22. Depends on what is meant by "intuitive" by shadowofwind · · Score: 1

    I think the main problem is that by "intuitive", a lot of people mean "sloppily glossing over distinctions as if they don't matter". Sometimes people try to simplify problems by treating new or difficult ideas or operations as if they're like other more common things, but this leads to problems insofar as those things actually differ. Intuition is hugely important and valuable in problem solving, but your intuition doesn't tell you the truth if you've trained it by thinking of things as being something other than what they are.

    High level constructs should map in as straightforward way as possible to the more complex, low level details they represent. For example, if something is a pipeline, and a user finds pipelines conceptually difficult, trying to make the interface hide the fact that its a pipeline doesn't actually make it less difficult. The thing is still a pipeline, and can't be dealt with correctly any other way, so hiding that fact makes the problem even more difficult by making it less clear.

    But if you've been thinking about it in the right way, then your intuition points you at creative and effective ideas about how to use it, without having to first reason through the details. Its as if you have a correct model of the thing somewhere in your mind that you can feel, even when you don't trouble yourself with the details, so what you feel about it tends to be right. In general, in my experience, most things that seem 'counter-intuitive' usually seem that way because they weren't explained and understood in an accurate way, not because they would seem counter-intuitive otherwise.

  23. Three letters: by Anonymous Coward · · Score: 0

    TDD. Whether you're OO or event-driven, creating the unit test first keeps you at an honest level of difficulty; I don't get surprised by my frameworks.

  24. So C++ Isn't Such a Bad Language After All by Anonymous Coward · · Score: 0

    I can program best in C++ because it's less intuitive and so it makes me think.

  25. And the proof of the pudding is... Facebook? by Anonymous Coward · · Score: 0

    Sorry, I'm not interested in the recipe for a poison pudding.

  26. When something else does the hard work for you... by lorinc · · Score: 1

    ... you don't become good at doing it.

    Wow, news at 11, guys.

  27. Obvious? by SinGunner · · Score: 1

    If I say something to you and I use extremely poor grammar and vocabulary, you're likely to attempt to confirm you understood what I said by repeating it back to me as you understood it.

    And that's all programming is: Converting things into a language you understand well enough to teach a computer what to do.

  28. Re:Glueing things together is how I teach OO desig by quietwalker · · Score: 3, Interesting

    That's my experience as well, at least, as of the middle 90's. Why use a mainstream, commercial language, when you could use a theoretically complete one? One where they recognize that features like "output" and "input" are dirty exceptions that spoil the purity of your program when you're trying to get a good hard proof using Hoare logic.

    Better not clutter up the syntax either by using confusing, pre-existing symbols to form constructs, not when you can add whole new symbols requiring a special (APL) keyboard!

    I remember having a TA once challenge me - I had written an algorithm to operate iteratively, rather than recursively, because I had noticed the program would run out of memory if I did it the other way when fed large data sets - because to him, recursion was theoretically perfect and not using it was a personal affront. The fact that my code worked and his crashed after 4-5 minutes didn't matter.

    To paraphrase a professor of mine, "There's absolutely no reason for a computer scientist to use a computer."

    This sort of attitude was pretty rampant all throughout my college career, fairly startling having already been employed in the industry for some years prior. No concept of real world usage at all, or worse, some strange bias against it.

  29. Good find, Poor Understanding by Matheus · · Score: 1

    There are a couple outcomes of this that I don't think they quite understand correctly:

    1) I'm not sure whether we're really using a different part of our brain here but just having to dig deeper into the problem. The more time you have to spend figuring out how the code works to then find how it is not working the more you will understand that code. That's not a leap of imagination there it's straight cause and effect. As it is this inherently works its way into a new developer's role in a new company. Your first tasks will generally be fixing or augmenting other people's code not writing your own from scratch. You will therefore need to spend that time learning the existing code to then fix it hopefully gaining deeper understanding along the way.

    2) Tooling and Frameworks are their own separate case. Disclaimer: It is a good thing that modern developers should not have to reinvent the wheel on every task. That being said: The developers using these previously invented wheels no longer are exposed to the inner bits required to make that thing roll and so will inherently have a shallower understanding of how it works and therefore will not understand what's going on when it does quite work the way they want it to. If the Frameworks / Tooling worked exactly as spec'd with no fuzziness this would not be *that terrible but that's not the world we live in. Because of this newer devs are less equipped to diagnose an issue when their Frameworks and Tools are letting them down or not quite getting the job done.

  30. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    Modifying collections while iterating them is exactly the sort of bad idea good programmers have always avoided, regardless of the language. C++ doesn't protect fools from the consequences of being foolish.

    There's a lot of things like this in C++

    There are lots of stupid things good programmers avoid out of habit.

  31. Re:Glueing things together is how I teach OO desig by elfprince13 · · Score: 1

    Mmmmm, the "what will C++ do now?" quiz show is one of my favorites. here's a little gem showing off the bizarrities of EOF, peek, and ignore.

  32. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    There's a lot of things like this in C++ that can slip past a person for years before it actually bites them. Don't get me wrong, I love C++ and think C is a rather dangerous language (from a memory safety standpoint) that requires that its authors reinvent the wheel over and over again. But C++ does have some weirdness in places that can pose hazards.

    Seeing things like this make me glad that I gave up C++ ten years ago.

  33. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    Oh dear dog, not that mess. As someone who spent many years in c before moving to c++ that mess still confuses me. Yes I get it when I read it (again), but still...

  34. Re:Glueing things together is how I teach OO desig by viperidaenz · · Score: 1

    Problems in the real world typically don't rephrase themselves for the benefit of the person trying to fix them.

    Doing so in a test does a dis-service to the student.

  35. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    I also once met an idiot, worked with an idiot, went to school with an idiot, and am an idiot!

  36. Which one is the serial killer? by Ferocitus · · Score: 1

    In Figure 1 of the paper, which one is the drummer?

    --
    USB, USB, USB!
  37. Re:Glueing things together is how I teach OO desig by Darinbob · · Score: 1

    But the usefulness of OO comes from modifying the behavior of objects not just replicating them.

  38. the triumph of perl by doom · · Score: 1

    I've heard it argued that perl programmer's tend to understand object-oriented programming better than programmer's from other languages, because they have to think about it harder... there are a lot of different ways of doing perl objects with different pluses and minuses, and you have to decide what aspects of OOP you really care about.

    1. Re:the triumph of perl by Anonymous Coward · · Score: 0

      Every OOP education should involve using OO to design a program in an non OO language.
      If you can't write OO in C or assembly you don't know OO.

  39. Re:Glueing things together is how I teach OO desig by Darinbob · · Score: 2, Interesting

    I knew someone in late 90s who was upset that we weren't using Java for a highly complex embedded system used for medical work, and instead used something archaic like C++ (seriously, he thought it was archaic in its heyday). We'd explain to him that we can't throw out all the work and start from scratch without spending years, that Java at the time was terribly slow, that there were no distinct advantages of changing or reductions in complexity, etc. But it was his first job after his master's. Later on he started a (tiny) company and gave a keynote address at a Java conference where I heard third hand that he had put down his former employer for being such a dinosaur. It wasn't even that this guy was an academic idealist but that he merely was caught up in fandom.

  40. Re:Glueing things together is how I teach OO desig by Darinbob · · Score: 1

    CS is a large academic area. It covers a range from CS academics who use C, assembler, as well as functional language purists, and even those who don't even use computer languages.

    I had a TA ask me once why I had spend so much effort making my Lisp program completely recursive instead of using PROG or PROGN, and I said I thought that's how it was supposed to be done. It was a good academic exercise though to think about how to program in a different way from normal procedural programming.

  41. Re:Glueing things together is how I teach OO desig by Darinbob · · Score: 1

    Or in C, "x = ++x++ + ++x++;"

  42. Re:Glueing things together is how I teach OO desig by Darinbob · · Score: 1

    The KISS principle always applies and has not become obsolete.

  43. Or maybe there was a culling by EmperorOfCanada · · Score: 2

    If something is made hard enough then only the most capable will survive the selection process. Can you imagine the quality of programmer that would exist if we only did everything in ASM? While the understanding that ASM programming might induce would be beneficial the reality is that maybe only 1 programmer in 20 would continue the process. Also productivity would be shot in the face.

    For instance I really hate APIs where you have to have this huge pile of boilerplate with all kinds of factory classes pooping out this and that that you assemble into something that every other person using the API will do. Maybe it gives you a better peek into the internals but I would rather some kind of Init or Create function that gives me the end product that I and every other programmer wants. All that boilerplate might make my code look intimidating and keep the weak minded away but it didn't make me a better programmer by any amount to be worth the wasted time.

  44. Re:Glueing things together is how I teach OO desig by mrchaotica · · Score: 1

    Say what? I don't know too many (computer science) academics who'd touch C with a ten foot pole.

    Holy shit, that's scary! Doesn't the school you're thinking of teach compilers, embedded computing, or high-performance computing?

    --

    "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

  45. Re:Glueing things together is how I teach OO desig by Kjella · · Score: 1

    But C++ does have some weirdness in places that can pose hazards. For example, from a more beginner-perspective, what percentage of users have at one point been frustrated by trying to understand why a pointer in one of their classes is getting freed unexpectedly, due to not realizing the dangers of the implicit copy constructor/assignment operator when it comes to pointers? I bet that's bit almost everyone at some point in their career. Sure, you can "reason out" that that would happen, but most people learn it by being bitten once or twice.

    This is why I vastly prefer Qt with QObjects that disable the copy constructor, structuring the application like a hierarchy with managers that act as resource owners. Consider the pot at a poker table, you could model it as players pushing money into the pot and the winner grabbing it. Screw up your winning logic and two players might try to grab the pot (double free). But if you model it with a dealer collecting the bets and handing it out to the winner you have a single resource owner controlling the resource. Sure, your logic may still be faulty but the result is far more likely to just be incorrect, not a crash. Same way I'd have a seat manager to make sure two players don't grab the same seat. If this is a big tournament, maybe I have a table manager and a player manager too, each holding their collection of objects. It is a lot, lot easier to see the logic - or flaws in it - from a bird's eye perspective.

    --
    Live today, because you never know what tomorrow brings
  46. Re:Glueing things together is how I teach OO desig by mrchaotica · · Score: 3, Interesting

    There's a lot of things like this in C++ that can slip past a person for years before it actually bites them. Don't get me wrong, I love C++ and think C is a rather dangerous language (from a memory safety standpoint) that requires that its authors reinvent the wheel over and over again. But C++ does have some weirdness in places that can pose hazards.

    C++ doesn't have "weirdness," C++ has bad design. Literally anything that you might think C++ would be good for is better solved by either C#, C, or a combination of both.

    --

    "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

  47. Amjad Asshat by Anonymous Coward · · Score: 0

    Sure this guy can do the needful.

  48. Civilization by Anonymous Coward · · Score: 0

    Civilization advances by extending the number of important operations which we can perform without thinking about them.
    -- Alfred North Whitehead

  49. OMG! The Conservatives Are Right! by tinkerton · · Score: 1

    Researchers found that if they made a test deliberately hard to understand, those taking the test would exhibit greater understanding after solving it than those who were presented with a more intuitive wording of the same problem.

    Right, be tough on them, makes them perform better. Except, maybe just in a statistical significant manner. And maybe a lot less people solved it if you made it deliberately hard. And maybe they understood it better because they spent more time on it.

  50. Belief by Anonymous Coward · · Score: 0

    ... "careful to not enable the belief that programming should be as easy as gluing things together."

    The fact that you believe gluing things together is easy tells me you've never glued things other than paper together.
    Identifying information which is of importance to underlying goals is the essence of (software) systems programming.
    We encourage you to re-engage your primary role as aesthetically complementary to your environment.

    Thank you,

    The management

  51. Re:Odd title [over-abstraction] by Tablizer · · Score: 1

    he couldn't maintain or debug because he'd abstracted things so much it was impossible for him to follow his own code, or know where to look when things went wrong. A small enhancement request left him squealing how the code wasn't designed to do that and he'd have to rebuild it. Meanwhile the rest of us went "so, all of that is in here, and if I just nudge this a little it's all done".

    I've sometimes been accused of doing something similar. Good abstractions allow one to be productive by not having to micro-manage details; snapping together high-level modules like Logo's. But, they indeed can also entrap you when new requirements don't fit their design grain, or grow too confusing for new developers to figure out.

    I've since been leaning toward abstractions that you "date instead of marry". The "test" is that one should be able to toss the abstraction if needed without too much code rework. It should be considered a "helper", not an "API kingdom".

    A helper function can save you a dozen lines of code, but you shouldn't be obligated to use if you want to take advantage of the rest of the framework or helper utilities.

    For example, it's nice to have a compact function or object to draw and validate form fields. However, it should also be possible to hand-draw the form field (raw markup) and/or do the validation separate without the drawing part. One shouldn't be forced to use it for all form fields or all validation to have the form work smoothly.

    You may end using the shortcut function on say 80% of the fields, but can still do 20% outside the function/framework. Plus, it can simplify the helper functions/objects by not having to put every possible feature in there. Forceful frameworks often have to include every bell in whistle because one "should not" have to go outside the framework; making the framework have to handle every contingency. A function/object that only has to cover 80% of the cases is usually far simpler than one that has to cover 100%.

    (That's one thing I don't like about Microsoft's API's and frameworks: you are either forced to be all in or all out; they don't make the middle ground very easy. I suspect this is to lock you into their world so that you have to buy more MS in the future.)

  52. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    Have you read what some people think about C here on Slashdot? They have to come from somewhere.

  53. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    A competent compiler should complain about that last postincrement.

    If you want to make things really confusing you should use decrements instead since those can be interpreted as negation.

  54. Re:Odd title [over-abstraction][corrections] by Tablizer · · Score: 1

    Corrections and clarifications:

    Re: "...snapping together high-level modules like Logo's"

    Should be "Lego's".

    Re: "...often have to include every bell in whistle"

    Should be "...bell and whistle".

    Re: "One shouldn't be forced to use it for all form fields or all validation to have the form work smoothly."

    Clarified: "One shouldn't be forced to use it for all form fields or all validation in order that the form work smoothly or properly."

  55. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    Say what? I don't know too many (computer science) academics who'd touch C with a ten foot pole.

    Holy shit, that's scary! Doesn't the school you're thinking of teach compilers, embedded computing, or high-performance computing?

    You can make compilers, and do embedded and high-performance computing with modern programming languages. If you are still writing your software in C, you are wasting a lot of time and effort in developing, testing, and debugging. C is simply a language of lowest common denominator that is well known and suitable for churning out programs that leak memory like a sieve and are remote code exploits.

  56. Re:Specialization = BS by Anonymous Coward · · Score: 1

    Software systems are not physical things. End of.

    I really wish people would stop with physical systems/software systems analogies. It's facile and wrong. Where this came from, I don't know but it's been around for years.

    Software systems are abstract entities. They do not suffer from wear and tear. They are not built by armies of drones on an assembly line. A small amount of software can power an entire company or nation. A large amount of software can be needed to perform a seemingly "simple" task, sometimes necessarily and sometimes unnecessarily. There is little correlation between software size and "work done". Efficiency is an envelope. Software can be arbitrarily layered and combined to form highly complex systems unhindered by physical world constraints, often in ways completely unimagined by the designers. Software can be replicated or copied trivially. Software allows itself to be deployed and running "instantly" (in meatbag terms) anywhere and all at once all over the planet. And in fact, people go to great lengths to constraint software's abstract lack of physical limitations. Components can be reused but this requires both care of design and adaptation in use. Or sometimes not, just creative abuse. A piece of metal can only be bent as much as the laws of physics allow. A piece of software can be bent only as far as your imagination will allow.

    Try doing that with a car or a bridge or a house.

  57. Turn in your type-ball! by jtara · · Score: 1

    I really don't mourn APL's passing.

    Harumph! If that's the way you feel, so be it. But please turn in your type-ball to the TA.

    1. Re:Turn in your type-ball! by Crashmarik · · Score: 1

      If I do that what am I going to use in my Selectric ?

  58. Re:Glueing things together is how I teach OO desig by mrchaotica · · Score: 2, Informative

    If your C code leaks memory, you don't know WTF you're doing -- which is exactly why a department of CS professors who don't use C is so damn scary.

    And I don't give a shit if you think you don't need to use pointers; that's fine. You still need to understand them so that -- if for no other reason -- you understand why in Java or C# not every IEnumerable should be a List.

    Also, if you think a high-level language will save you from remote code exploits, I've got a bridge to sell you.

    --

    "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

  59. Code everything in assembly by OrangeTide · · Score: 1

    If you need a port, hire me to write it for your different CPU because it's already in my head as I had to have a deep understanding of the problem before I could write a solution in assembler.

    --
    “Common sense is not so common.” — Voltaire
  60. Re:Glueing things together is how I teach OO desig by phantomfive · · Score: 1

    Say what? I don't know too many (computer science) academics who'd touch C with a ten foot pole

    Donald Knuth, for one (albeit with a literate programming pre-processor).

    --
    "First they came for the slanderers and i said nothing."
  61. Re:Glueing things together is how I teach OO desig by helixcode123 · · Score: 2

    I remember having a TA once challenge me - I had written an algorithm to operate iteratively, rather than recursively, because I had noticed the program would run out of memory if I did it the other way when fed large data sets - because to him, recursion was theoretically perfect and not using it was a personal affront. The fact that my code worked and his crashed after 4-5 minutes didn't matter.

    Tail recursion optimization usually takes care of problems like that, assuming the problem was running out of stack.

    --

    In a band? Use WheresTheGig for free.

  62. Re:Odd title [over-abstraction][corrections] by Anonymous Coward · · Score: 0

    Please tell me you don't write code that controls something important.

  63. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 1

    What if I want the compiler to enforce resource and exception safety for me without using garbage collection (which only works on memory, anyway)?
    What if I want to pass an anonymous function to a function without using a function pointer?
    What if I want to tell the compiler that I want a particular function to be evaluated at compile-time?

    Show me how to do those things with C alone, C# alone, or C# and C combined.

  64. Cut-and-paste science? by srijon · · Score: 1

    Masad is perhaps guilty of the very problem he identifies. He reads a science paper, latches onto the word "intuitive", misapplies it, and so misses a key point in the paper.

    In the original study, the authors present the same cognitive test to two different groups, one time using Myriad 12pt, the other gray italicized Myriad 10pt. In another experiment they changed the masthead of a document to introduce nonsense characters like @$Ã. In a third experiment, they had one group furrow eyebrows while doing a test. In each case, they found that the group with the "disfluent" condition (small gray font, @$ characters in the masthead, furrowed eyebrows) performed better than the control condition. From this they conclude that their experiments support the cognitive theory that we have two distinct reasoning systems, a rapid "intuitive" reasoning system and a slow "analytical" reasoning system, and something about disfluency prompts us to switch from our rapid to slow reasoning, leading to improved scores.

    Masad summarizes: "The theory behind this is that people will default to relying on the automatic, effortless, and primitive system for reasoning. But if things are counter-intuitive or harder to understand we switch to the deeper, deliberate and analytical mode of thinking." Note how "intuitive" has jumped ship. In the original paper, "intuitive" was a label for our fast reasoning system, contrasted with our slow analytical reasoning system. For Masad, "intuitive" refers not to one of our cognitive reasoning systems but rather to the -input-, he suggests that if the input (e.g. the software framework) is counter-intuitive or harder to understand then we use our more analytical reasoning. There is nothing to support that conclusion in this study ... there is nothing counter-intuitive about using a gray 10 point font. The conditions with higher scores weren't harder to understand or more counter-intuitive, they were less legible and more difficult to read. If we translate this study to programming, as Masad proposes, it suggests that if you change your IDE to Myriad 10 pt gray italic, then all of a sudden your code will get better. Hey, go ahead, try it!

    Ok, sure, what Masad is actually doing is using a science paper as a prompt, a poetic license for thinking about frameworks and coding. But the kinds of shortcuts he makes are informative - so I'm going to take some poetic license of my own...

    First, I think Masad overlooks the importance of reading. The science paper suggests that something about how we read changes how we think. One thing I've noticed about beginner programmers is that they tend to be poor/lazy readers of code. They skim, treating a library or framework function as if it is are magic black box, never to be questioned or investigated. I've had many experiences where I've sat down with a programmer, cracked open a source browser, read the actual source of the library function they are relying on, and heard a gasp, as they realize their assumptions that the framework code is perfect/threadsafe/performant etc. fall away. "You mean every time I do this, it does a linear search through my entire dataset. OMG" "Well, yes, its just code. All you have to do is read it." Promoting code reading has nothing to do with whether or not the framework is intuitive or hard to understand or has "negative space". Its much more about business management priorities and deadlines and culture.

    Second, its significant that Masad took a paper from one context and used it to think imaginatively about a very different problem space. Bouncing ideas around freely like that is precisely what the fast/intuitive (if potentially incorrect) style of reasoning is good for. His claim that we need to "overcome intuition" is wrong, in my opinion - its exactly how we stimulate new ideas and debate. His own thought-provoking post proves it.

  65. Re:Glueing things together is how I teach OO desig by angel'o'sphere · · Score: 1

    I did not use C since 30 years, and C++ on,y sporadicly since 1999.
    The companies I worked for make billions, yes, billions in earnings, with my Java code. (E.g. EnBW.com)

    No idea what your 'real work' is supposed to mean.

    --
    Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
  66. Re:Glueing things together is how I teach OO desig by Rei · · Score: 1

    The thing is, iterators are presented as the preferred alternative to container indices or pointer incrementation over a container. Both of which are modification safe. So you either need to have them match the capabilities, or accept that they're not an alternative.

    --
    Shiny New Australia.
  67. Re:Glueing things together is how I teach OO desig by thinkwaitfast · · Score: 1

    that leak memory like a sieve

    I've worked on a number of very large software projects in C and have never had to do dynamic memory allocation. In fact, it's never been allowed.

  68. Re:Glueing things together is how I teach OO desig by thinkwaitfast · · Score: 1

    Follow MISRA. Avoid weirdness.

  69. True by PineGreen · · Score: 1

    I do find that easy interpreted languages that mostly do right thing tend to make you lazy in understanding.
    Try for example the following two in python

    a=[1,2]; b=a; b=b+b; print a,b
    vs
    a=[1,2]; b=a; b+=b; print a,b

    Results are actually different, even if they should "intuitively" be the same. I found that after spending 3 years of hard coding in C++ made me appreciate what exactly is going on under the hood much better, even for python.

  70. Re:Odd title [over-abstraction][corrections] by Tablizer · · Score: 1

    Is this a complaint about typo's, or light/leaky abstractions? If the second, I do agree that certain kinds of applications require "tighter" or bigger frameworks. For accounting or medical applications, for example, time-saving abstractions are less important than reliable software, at the expense of requiring more coding time. Large, overarching frameworks are common and expected for such.

    But if say it's a tracking system for internal restroom supplies, then nobody's going to want to spend the resources for ultra-reliable software to prevent toilet paper from occasionally getting lost. I'm not saying such is good or bad, only that by experience I know that time-saving "light" abstractions are more welcome and/or expected for such by management and/or owners. They don't want enterprise bills for non-enterprise stuff.

  71. Re:Glueing things together is how I teach OO desig by slimjim8094 · · Score: 1

    There's a lot of things like this in C++ that can slip past a person for years before it actually bites them

    This, times 1000. I love C++ and use it professionally, and prefer it to a lot of languages - but if someone tells me they're a C++ expert I'll laugh in their face unless they're Stroustrup or Herb Sutter or someone like that.

    I've been using C++ seriously for more than 5 years, and the more I learn about C++ the less I know. A few of my favorite are "what's the correct way to call swap" (and ADL in general) and reference lifetime extension. Gotta love stuff that seems like it obviously works when you don't understand it, until you realize what you're actually doing, and then it shouldn't work - but there's a special case that makes it work. Then you wonder "why did they support this?" and realize that this tiny little insane corner is crucial to making the language make sense. Just don't think about it too hard. For argument-dependent lookup, it's why you can print strings. For reference lifetime extension, it's why a ranged-for over a temporary container works (among a few other things).f

    --
    I have developed a truly marvelous proof of this comment, which this signature is too narrow to contain.
  72. Re:Glueing things together is how I teach OO desig by Tablizer · · Score: 1

    In practice, abstractions leak.

    Indeed, and the documentation is not always clear or accurate. One often has to fiddle to experiment, adjust, and find work-arounds for glitches.

    That's where skill comes in such that it's often not as simple and sticking parts together and filling in parameters: that's the easy part.

    Lego's with personality quirks is probably a better metaphor. The long blue Lego may not like being connected to the short yellow Lego on Tuesdays for reasons only known to Microsoft, Oracle, Google, or God.

  73. Re:Glueing things together is how I teach OO desig by Pseudonym · · Score: 2

    Literally anything that you might think C++ would be good for is better solved by either C#, C, or a combination of both.

    This makes literally no sense. With minor caveats, C++ is C with more stuff. Even if you only use (say) namespaces or a modest amount of ad-hoc overloading, C++ is a better C.

    The main cause of problems with C++ is using it as an object-oriented language, but you'd have the same problem in C#. What Alex Stepanov rightly said about Java equally applies to C#: "I spent several months programming in Java. Contrary to its authors prediction, it did not grow on me. I did not find any new insights - for the first time in my life programming in a new language did not bring me new insights. It keeps all the stuff that I never use in C++ - inheritance, virtuals - OO gook - and removes the stuff that I find useful."

    --
    sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
  74. Re:Glueing things together is how I teach OO desig by Pseudonym · · Score: 1

    I love C++ and use it professionally, and prefer it to a lot of languages - but if someone tells me they're a C++ expert I'll laugh in their face unless they're Stroustrup or Herb Sutter or someone like that.

    I consider myself a C++ expert. (I actually refer to myself as a "language paralegal" as opposed to "language lawyer"; I used to have a desk next to someone on the standards committee.) The main reason why I think I can confidently call myself this is that I know enough to know where the limits of my knowledge are. You really don't have to be Myers or Sutter to get past the Dunning-Kruger barrier.

    It's interesting that you mention ADL. Anyone who used C++ templates in a non-trivial way before two-phase lookup was standardised had to learn the new rules because they almost certainly had to port their code to the new standard. As breaking changes go, it wasn't too bad, since the effect was to make some previously legal code illegal and the fix was just to qualify some identifiers. Still, many C++ programmers of a certain age know the ADL rules for that reason alone.

    --
    sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
  75. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    The companies I worked for make billions, yes, billions in earnings, with my Java code.

    But they obviously don't rely on your reading comprehension.

  76. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    Everyone is always trying to grab the pot.

  77. Re:Glueing things together is how I teach OO desig by toddestan · · Score: 3, Insightful

    Even if you only use (say) namespaces or a modest amount of ad-hoc overloading, C++ is a better C.

    That's fine for your own projects, but the problem comes in with dealing with other's code. Everyone seems to have their own subset of C++ they like to use. The problem is that everyone's subset is a bit different. So you have to be at least aware of everything in C++, just so you know it when you run across it. (once again, this doesn't apply for your own projects)

  78. Re:Glueing things together is how I teach OO desig by RightwingNutjob · · Score: 1

    Or you're using it wrong because you don't understand how it works when it's translated into procedural instructions.
    int foo(int bar){ return 1+foo(bar); }
    may not be the same as
    int foo(int bar){ return foo(bar)+1; }
    which may not be the same as
    int foo(int bar){ return foo(bar+1); }

  79. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    If you're working in embedded systems, you shouldn't even be doing any memory allocations once the program has initialized. There are not many languages other than C that allows you to NOT make any allocations during runtime.

  80. Re:Odd title [over-abstraction][corrections] by dave420 · · Score: 1

    He's probably referring to you attempting to correct someone's mistakes with your own mistakes. Your misuse of apostrophes does not make you seem particularly careful, which is rarely (never?) a good quality in a developer.

  81. Re:Glueing things together is how I teach OO desig by KGIII · · Score: 2

    Let me preface this by saying that I'm a horrible programmer but I wrote many lines (many of which were not needed) in C back in the day.

    Eventually, I reached the point where maintaining and improving that code was simply beyond my time limits and my ability. I am not a programmer. I learned because I had to. So, I hired professionals. They taught me a lot but, alas, I am still not a programmer.

    If we go back to my initial comment, we see that I wrote many lines of code, many of which were not needed. So, we started a project where these kindly programmers had had enough and wanted to rewrite all of my code. They wanted to use this language called C++. As tempting as it was to deny such requests, I let them write it in C++. Why?

    Well, I hired them because I code for shit. They were better than I - that's why I paid them money. If they wanted a tool then, it seemed to me, that they know better than I how to do their job. If I knew better then they, I'd not have had to hire them - I could have just hired monkeys and told them how to do it.

    Point is, what's the point of getting in the way of letting the people you hired do the job you hired them to do? If you ask them to complete a task and trust them to complete the task them give them the tools they ask for, shut the hell up, and get out of the way. If your program worked while his broke after some minutes then I don't want him working for me unless he's able to make his program behave like your program.

    I may not be the brightest bulb but I've learned a few things and one of them is that if you shut the hell up and get out of the way - you get pretty good results if you have good people. Don't get me wrong, I tried the micromanaging thing. Yeah... Don't do that. Fortunately, I'd hired people who had the brains and balls enough to tell me to shut up and get out of the way. I imagine most people would have fired them for doing so but programmers were a bit different back then so, eventually, I learned to get the hell out of the way and just give them the tools they asked for. Strangely enough, it worked.

    --
    "So long and thanks for all the fish."
  82. Re:Glueing things together is how I teach OO desig by KGIII · · Score: 1

    One of my favorites:
    https://xkcd.com/163/

    --
    "So long and thanks for all the fish."
  83. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    There is no such thing as a Lego. There is such a thing as an idiot, and you're one.

  84. Re:Glueing things together is how I teach OO desig by KGIII · · Score: 1

    My brain is turning to mush as I've been a passive consumer for far too long. I'm delving back into programming and, don't hate me, getting back into some PHP and going to learn some Python. I'll probably pick up Perl 6 just to say I can.

    That said, I used to program in C. A lot... Like a whole bunch - except I am actually not a programmer. Well, not a good one at any rate. Oh, things worked, eventually. The many hours spent sleepless and hoping someone would help me out via USENET were plentiful and, eventually, we had enough contracts completed to actually hire competent people. Yay! Go me! Anyhow, that was a lot of years ago...

    I don't like this mushy brain feeling and I'm getting older and the mush is getting more resilient. It may sound odd, if you're young, but you can actually sense it when it is happening. They say the brain becomes more plasticine (or is it less?) and that things get more difficult as the brain, literally, undergoes a physiological change due to aging.

    So, I've always preferred good answers - innate selfishness, I presume. You, being an expert and I, having seen enough of your replies to have no doubts as to the validity of your claim means you're likely to be a good source of my preferred answer type. (In common vernacular, you're smart and I have the stupid.)

    Where's a good place to get into C++? I've some, vague, familiarity with the language and have even actually learned some - years ago, as that was what my C was ported to by the afore mentioned hired programmers. I'm very much able to pay for instruction but I do not wish to return to academia. I can afford any/all resources but am not so interested as to hire a private tutor, at least not one locally. I'm not needing a full, deep, instruction but just enough to code a few things. I don't even have any specific problems that need solving.

    Anything that you'd recommend? Any works of your own making, in book form perhaps, to look into?

    --
    "So long and thanks for all the fish."
  85. Re:Glueing things together is how I teach OO desig by goose-incarnated · · Score: 1

    Or in C, "x = ++x++ + ++x++;"

    I'm pretty certain that that is undefined behaviour. It might work, it might crash, it might give you the "correct" answer the first 10000 times and then give you a different answer. In short - what that does is not predictable, which is different from 'weird'.

    --
    I'm a minority race. Save your vitriol for white people.
  86. Re:Glueing things together is how I teach OO desig by goose-incarnated · · Score: 1

    To be honest I prefer faulty logic to produce a crash and not inaccurate results.

    --
    I'm a minority race. Save your vitriol for white people.
  87. Re:Odd title [over-abstraction][corrections] by Baron_Yam · · Score: 1

    "Legos" in common usage and "Lego bricks" according to the company that makes them.

    "Lego's" makes me wonder "Lego's what?" because the apostrophe indicates the possessive.

  88. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    Neckbeard Lego Kit for you

  89. Re:Odd title [over-abstraction][corrections] by Anonymous Coward · · Score: 0

    He's probably referring to you attempting to correct someone's mistakes with your own mistakes

    Speaking of correcting mistakes with mistakes...

    (hint: check the usernames)

  90. Re: Glueing things together is how I teach OO desi by Fwipp · · Score: 1

    Oh hi Johnny, I didn't know it was you.

  91. Re:Glueing things together is how I teach OO desig by mrchaotica · · Score: 1

    With minor caveats, C++ is C with more stuff.

    More is not necessarily better. Although a few features of C++ might be "nice to have" in C, the fact that all the other shit is also available means there's too much unnecessary complexity, especially in code written by other people (who might have a different opinion of which subset of C++ is valuable).

    The main cause of problems with C++ is using it as an object-oriented language, but you'd have the same problem in C#.

    I spent the last two years programming professionally in C#, and recently changed jobs to a C++ shop. You clearly have no idea how much nicer C# is to use than C++, especially due to the facts that C# has real generics instead of preprocessor templates, that Visual Studio's debugger works much better with C# code (by showing the actual hierarchical members of your objects instead of vtable pointers everywhere, for example), and that LINQ exists. Also, having private members be actually private (rather than being exposed in the header file) is nice, if for no other reason than that you don't have to recompile everything that uses the class just because you added a new private method. (And those are just a few things off the top of my head; C# has lots of other advantages.)

    Also, the article you cited is based on an archaic version of Java; what applied then does not apply now. (He talks about AWT, which as far as I know nobody's used in decades, and the question he's answering was about Java's lack of generics, which it has had for quite a while.)

    --

    "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

  92. Re:Glueing things together is how I teach OO desig by Anonymuous+Coward · · Score: 1
    It's foolish to rely on tail-call elimination because most compilers treat it as an optimization; and there's no way to force a warning or an error if the compiler isn't able to optimize tail calls.

    Then there are the idiots that are ideologically prejudiced against CS, Scheme, functional programming, etc and will go out of their way to sabotage it because they find it 'confusing' or because it 'makes debugging harder'.

    The only thing you could do is to transform the tail-recursive algorithm into an iterative one by hand, and nicely document it into a big comment & warnings above it. That's almost like writing in assembly.

  93. Re:Odd title [over-abstraction][corrections] by Tablizer · · Score: 1

    I won't get into an argument about whether and when to "be careful" about such. (If you pay me, generally I'm more careful about such and look up rules as needed.)

    But I would point out that there are a fair number of coders who are not native English speakers and otherwise write pretty solid code, if you ignore their comment and documentation grammar.

    I can always find something to complain about in other people's comments and documentation if I wanted to. A lot of it is not "formal" mistakes, but otherwise poor decisions such as unnecessary words. It's easy to find crap to complain about in writing.

  94. Re:Glueing things together is how I teach OO desig by Anonymous Coward · · Score: 0

    In a course on theory one should not spend 90% of the time for a task on reorganizing the instructions. Software engineering, sure. Operating system design? No.

  95. Re:Glueing things together is how I teach OO desig by Darinbob · · Score: 1

    True, but it's useful to know it is undefined, and useful to know possibly what was intended. Because some sorts of code might have that and you end up being asked to fix the bug. I see a lot of people in interviews or online who refuse to concern themselves with weird stuff like that because it's not how they write code, even though most of the job deals with reading and modifying other people's code.

  96. Re:Glueing things together is how I teach OO desig by david_thornley · · Score: 1

    If you have some sort of system that will expand arrays as needed to hold what you put in, in C you will have a test to see if the array is full, and realloc it when it is. That will invalidate all pointers. std::map does not invalidate iterators, but std::vector can.

    --
    "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
  97. Re:Glueing things together is how I teach OO desig by Pseudonym · · Score: 1

    You clearly have no idea how much nicer C# is to use than C++, especially due to the facts that C# has real generics instead of preprocessor templates, that Visual Studio's debugger works much better with C# code (by showing the actual hierarchical members of your objects instead of vtable pointers everywhere, for example), and that LINQ exists.

    I have used both C# and Haskell in anger. C# "generics" are more applicable than C++ templates, but C# generics are not a sweet spot. If you think of C++ templates as generative programming (as opposed to generic programming), they make a lot more sense. C# generics are comically clunky if you've experienced parametric polymorphism as you find in Hindley-Milner languages.

    Incidentally, debugging C++ can be done extremely well (Xcode is far superior to VS at this), but the state of debugging on Linux is terrible just in general.

    Also, the article you cited is based on an archaic version of Java; what applied then does not apply now.

    His main point still applies: Java keeps the "OO gook" of C++ and leaves the interesting stuff (e.g. compile-time code generation).

    --
    sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
  98. Re:Glueing things together is how I teach OO desig by Pseudonym · · Score: 1

    (In common vernacular, you're smart and I have the stupid.)

    It's probably more accurate that you have the ignorant. There's no shame in not knowing, right?

    Where's a good place to get into C++?

    I honestly don't know! The best I can suggest is borrow a Scott Myers book from a library (latest edition of Effective C++), have a copy of the FAQ at the ready and join a reasonably welcoming open source project.

    Why Scott Myers? Because one of his books will give you a sense of the difference between C and C++.

    --
    sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
  99. Re:Glueing things together is how I teach OO desig by Pseudonym · · Score: 1

    Oh, I should have said something about LINQ.

    LINQ is interesting. The idea of a 21st century language leveraging baroque 1970s SQL syntax is bizarre, but it works. I worked on (as in, partly wrote) an embedded language which had a very similar feature about 15 years ago, only it was much more flexible within its domain. It didn't link to SQL databases, but you could do almost all of XPATH in it.

    I've never used LINQ, but every time I see an example, I can't help thinking that its main purpose is to reuse SQL programmers, not to make querying collections easier. I've never liked SQL, and was always happier when Datalog or relational algebra was available.

    --
    sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
  100. Re:Glueing things together is how I teach OO desig by slimjim8094 · · Score: 1

    "Language paralegal" is awesome. And for the record, "sitting next to someone on the standards committee" is expert-level qualification in my book. (In any case, "laughing in faces" is too bombastic for my tastes.) It means you work at a shop that 100% gets the complexity of the language. I'm in awe of such people. I've met Stroustrup once and managed to find a few compiler bugs but there's a lot I don't pretend to understand. And everything I know I'm shaky on, I learned existed in the first place from working near the proper experts.

    What I mostly meant was there's a lot of people who put "C++ expert" on their resume - and it usually means they're an expert in the 30% of the language they know exists. Which doesn't mean they're not capable - that 30% is pretty much all you need for most things - it just means they've underestimated the language. I was one of those people after about 9 months of using C++. The problem is eventually you have to peek beneath the covers to interoperate with some template monstrosity or you otherwise get a bit too clever and blow your foot off (as the saying goes) so it pays to be a bit skeptical in general.

    --
    I have developed a truly marvelous proof of this comment, which this signature is too narrow to contain.
  101. Re:Glueing things together is how I teach OO desig by KGIII · · Score: 1

    Ah good. Oddly enough, I have that book. I ordered and received it not long ago. The site is added to my favorites. Thanks!

    --
    "So long and thanks for all the fish."
  102. Intuition? by Anonymous Coward · · Score: 0

    The validity of this whole argument depends on what you think you mean by 'intuition'. It was been defined as far back as the '80s as "arrival at valid conclusions without recourse to inference", whereas most people merely use the term as a loose synonym for wild guesswork. It is (roughly) the use of simultaneous as opposed to sequential thinking, so it's a process, not a result, and for it to work you have to be already in possession of the required knowledge.
    The use of 'intuitive' in the context of this article is therefore incorrect. Substitute 'simple', 'easily understood', or 'familiar' for 'intuitive' and it does make sense, but it's not talking about intuition.
    However intuition is a powerful mental mechanism that is insufficiently cultivated in our techno cultures, so the last thing we should be aiming for is to 'overcome' it - there's not enough of it around anyway.

  103. Re:Glueing things together is how I teach OO desig by Rei · · Score: 1

    What you describe is the C equivalent of std::vector, not std::map. std::map is built around a red-black tree, not an array.

    --
    Shiny New Australia.