Become a fan of Slashdot on Facebook


Forgot your password?
DEAL: For $25 - Add A Second Phone Number To Your Smartphone for life! Use promo code SLASHDOT25. Also, Slashdot's Facebook page has a chat bot now. Message it for stories and more. Check out the new SourceForge HTML5 internet speed test! ×

Comment Re:Holy Blinking Cursor, Batman! (Score 2) 235

Knowledge seems inversely related to understanding. /sarc

But really. In psychology, it is known that accessing memory while attempting to learn hampers your ability to learn. Internalizing a concept such that you no longer need to access memory, but instead "just think that way" frees up your memory. A typical person can only hold a hand full of concepts in their head at once. If you're dealing with a complex system, memorizing it is incredibly inefficient. Learning to think like the system allows you to effectively hold it all in your head without having to use your memory.

Like Minecraft, if you instead algorithmically generate your "memories" you can free up your actual memory. Minecraft manages to compress an entire map down to a small seed and only has to store the differences. This is how you deal with large complex system.

I literally have a memory disability, but I can manage hugely complex systems in my head by designing the system using simple patterns and making sure the patterns can express the complexity of the system. Like a fractal. I compensate for my disability by "regenerating" my memory in real time. I have difficulty telling the difference between something I just thought of or something that I remembered because thinking is nearly the same as remembering for me.

This breaks down outside of logical systems. Day-to-day activities give me issues. Sometimes I forget my own birthday. It took me nearly 6 months to remember my wife's name while we were dating, and I saw her almost every day. I had to give her a pet name. At first she didn't like it, but it grew on her. Most people who meet me think I'm fairly normal but slightly dunce. That is until they get me working on something that requires abstract reasoning.

I think anyone could do what I do, but I take a much longer time getting up to speed because it takes time for me to internalize a concept into my way of thinking. But once I integrate a concept, I no longer have to remember anything about it, it become natural for me to think that way. I am forced to do this because of my disability, but if people were not in such a hurry to crank out some code, they to could free up their limited memory for other more important things, like learning.

Comment Re:Holy Blinking Cursor, Batman! (Score 1) 235

"Tell me what a class invariant is."

I don't know most terms myself. I typically self discover nearly everything that I know by thinking about a problem for a little bit. I didn't know the term "race condition" when I was 8 years old when I theorized they would be an issue within a few minutes of learning that multi-core CPUs exist. I've been using "tiling" for years to optimize memory access without knowing what it was called. These things just seem blindly obvious when you see the problem.

Comment Re:Picking one at random (Score 1) 234

I wouldn't say you have to specialize. It would just mean you need to spend more of your time researching. In general, I find I can catch up to almost any specialist within a month, but that's a month of no production, just learning. That is a lot of down time. On the flip side, most projects that we have take 6 months to a year, and spending 1 month of it researching to catch up to what a specialist spent a life-time specializing is probably acceptable.

It really comes down to the size of your project. If it's really small and needs to be done quickly (less than several months) and well, go with a specialist.

Comment Re:Lots of links to articles, phfft (Score 1) 234

The "Clean Code" guy makes a lot of extremist devil's advocate assertions with the intention of making your think about clean code in a purist way. Of course it is up to you, the reader, to apply his wisdom in a practical manner. His most useful chapters are about code smells. They are the most practical. Kind of "If you see this, stop and think about why, and if it should be done this way or is there a cleaner way".

Comment Re:Deliberate Practice (Score 1) 234

Sometimes you can even get away with just knowing how the code should NOT work to fix a bug.

I wish I was so lucky. When ever I have to deal with other software engineers, they only define the overly simplistic happy paths. Failure paths? What are those? That really grinds my gears. I always rub their nose in it when I ask them if that is how it should work, only to find out they did not think of that situation. I just tell them it is undefined, so it is not a bug. "Fixing" the situation is now a feature request.

I should refine my statement. "You cannot know how your code does not work until you know how it is supposed to work, and you cannot know how your code is supposed to work until you know how it should not work." I work with very complex multi-threaded code. Every bug that I have not been able to explain has been a result of a bug in the framework or library that I used. I make sure my code has well defined failure paths and guaranteed state transitions handled by single points of responsibility.

Particularly when debugging legacy code where knowing how it works is not all that realistic.

I actually get pulled into helping people debug their code when I don't even have access to the code. I find the quickest way is to just keep asking "what all is responsible for handling this and how are they meant to work". Even when working at an abstract level, I can help them find the issue quickly with the above approach. And it always makes for a good time to slip in "imaging how much easier this would be if you only had to look in one place". SOLID is your friend.

Some times I don't even get the advantage of someone to ask, seeing the code, or knowing the architecture. Everything that I know is just what the customer reports and I have to infer the rest and make lots of educated guesses. And I still mange to figure out the problem faster than the ones who wrote it. But I've always had a strong intuition when it comes to computers. My co-worker is very intelligent, but he has little intuition. He has a math background and can quickly implement nearly any algorithm or protocol by reading an RFC. He needs empirical data. The problem is a lot of the hard issues we deal with, you only get to see the symptoms, which means all of your empirical data is not about the cause, but the effects created. Many times if you read too far into the data, it will send you in the wrong direction.

I always strive to have a theory why something works the way it does. If my theory does not match, I try to create predictions with my theory and see if the are true. My co-worker doesn't really have a theory, he just has a bunch of data and reads it too literally. The thing is, I cannot argue against his logic, he has flawless logic, what I argue against are the hidden variables that cannot be directly measured. My theories predict these and make clean predictions. He has learned to humor me with my thoughts.

A simple example is perhaps he looks at the memory profiler and sees some objects getting promoted to Gen2 and causing lots of GC. Then I argue that in theory, those objects should be used momentarily and the root issue is something is blocking the release of those objects. Look around, and see a stack variable that references those objects well past when they're needed, but the resulting work caused by those objects is taking some time, keeping the stack reference in scope. Just null the stack reference to the objects after they're needed, and the problem goes away.

Comment Re:Deliberate Practice (Score 1) 234

You know that you're going to throw away most of the code. Most people don't see a prototype meant as a learning experience, they instead see "working" code. All working code is equal in their mind. Except they don't actually know how it works, it only seemingly works. You can tell they don't know how it works when something finally goes wrong and they can't even guess as to why it's not working.

One of my rules of thumb is "You can't know why your code doesn't work unless you first know how it works.". 80%+ of the time, in the rare case that someone finds a bug in my code, I can typically tell them where the bug is and under which situations it will occur without ever looking at the code or using a debugger. I can many times do the same thing to other's people code for which I have never seen. I can infer much of how their program is designed based on how the characteristics of the bug. I purposefully try to write well-factored code with single-responsibility to make it easy for me to reason about. When I get dragged into helping someone debug their code because they're lost in their own maze.

Many times I've had programmers tell me they think there is a bug in .Net or SQL because their program is not working correctly. They can't even understand their own code, why are they so willing to blame someone else's?

Comment Re: Zeno's Paradox (Score 1) 210

but V = 5

is wrong. V is 4.

0.999... = I (I = 1)
IV = 4 (1*4 = 4) (V = 4)
V = 4/I (4 = 4/1)
V = IR (4 = 1 * R) (R = 4)
I = V/R (1 = 4/4)
V = 4R/V (4 = 4*4/4)
R = V^2/4 (4 = 4^2/4)
but V = 5 (WRONG, it was defined as 4 by the second line)

But "Mr.Z of the LotFC" points out "IV=4 & V=5 as Roman numerals (as is 0.999...=I)...the derivation appears to be a math pun of sorts."

Comment Deliberate Practice (Score 1) 234

Do Lots of Deliberate Practice ... "It takes elite performers a minimum of 10,000 hours of deliberate focused practice to become experts."

The quote about deliberate practice is taken out of context.
1) It is said it typically takes 10,000 of deliberate practice to become "elite", but it can take as few as 100 hours for those "naturally" good at something
2) This mostly applies to professions where practice matters, like playing an instrument. As a profession becomes less about muscle memory and more about thinking, practice becomes less useful.

Becoming an elite in a purely intellectual profession can require virtually zero practice. Some people are able to learn by thinking. They can reason through to the conclusion without having to actually practice/experience. Of course nothing is purely intellectual. Even with programming, we have to deal with other humans and need to deal with the fact that we are also human and can make mistakes. You must learn to write clear and defensive code, and be able to communicate with others.

Rule of thumb, don't write any code until you understand the problem and have thought of a good solution. If you were wrong at any point, figure out what was wrong with your reasoning that lead to the mistake and don't make that same logical mistake again. It really comes down to having strong fluid intelligence. This is how someone realizes what they don't know and if what they do know will work for the situation at hand. If you suffer from Dunning–Kruger effect, have a golden hammer, or don't realize you're doing something wrong, you probably need to exercising your fluid intelligence.

Comment Re: expose them to man-in-the-middle attacks (Score 1) 102

There is absolutely ZERO expectation of privacy when using an asset that is provided by your employer.

Is that so? The only way I can access some of my medical information is via my work computer. Are you saying I have zero expectations of privacy to access my private medical data? I'm sure my company is not the only one that has many benefits that are only accessible via intranet services. IT has no right viewing any of that data.

Comment Re:A vast black hole? (Score 1) 124

They're at least 1 cubic plank-length. Not to mention the notion of a true singularity is probably wrong. There's a lot of magic hand-waving to think of a blackhole as a true singularity. Some how the blackhole can grow, yet nothing can fall past the event horizon in any frame of reference, and all of the information is at the "center"? What? How does the information get to the center if by definition it can not?

The more recent idea that a blackhole is just the highest density of information with the information being stored on the surface, just above the theoretical event horizon, is much simpler and agrees or at least does not create a bunch of paradoxes.

Slashdot Top Deals

"In matters of principle, stand like a rock; in matters of taste, swim with the current." -- Thomas Jefferson