Live data from Hacker News

Untitled topic

news.ycombinator.com

31–40 of 73 posts

Re: undefined

#31
> "I have always been a slow programmer"

I'll try to make this post as short as I can, so forgive me if it seems abrupt. I'm going to take the opportunity to explore the possibility that you have no talent for programming. You should still take the advice to check out sleeping patterns, fitness, health, etc.

First, take a look at this website: http://the-programmers-stone.com/the-original-talks/day-1-th...

It's the first one I came across years ago on the subject of "What is the difference in the way of thinking between talented programmers and non-talented programmers). I don't think it is exactly right, but it's on the right track.

Lately, I've been experimenting with the idea that programming is a linguistic skill -- just like speaking. I spent 5 years teaching English as a foreign language and studying language acquisition. What I discovered was that students of English have the same kind of distribution of skill sets that programmers do: Some have a knack for fluency and can speak freely even if they have little vocabulary or grammar. At the other end, are people who literally can't order a drink from MacDonald's in English, but can tell you anything you would ever like to know about English. In programming, we often call these people "language lawyers" (it's a derogatory term, so I would avoid using it ;-) )

In foreign language teaching, there are 2 forms of ability: fluency and proficiency. Fluency means being able to listen to or read a sentence and automatically (with no undue thinking) understand its meaning. Similarly, when faced with a task of speaking, appropriate sentences pop into your head without thinking about it.

Proficiency is the range of language that you know. So it's the amount of vocabulary and grammar. Often someone with good proficiency will be able to puzzle out the meaning of a sentence, but it will take them a lot of time. Similarly, they can construct grammatically correct sentences by recalling all the rules and painstakingly piecing it together.

The old way of teaching was that building proficiency is the most important thing and that by repetition you would naturally create fluency. My experience has been that this is false.

By now, I hope you see some parallels with programming and people who experience problems with programming fluency. On the one hand, you have someone with a lot of knowledge (perhaps they have literally memorized the specs for a language and know every detail about the standard libraries), but are painfully slow. On the other, there are people who seem to be able to simply write code and guess how the language is supposed to work. They might not know details, but they can spew out code like nobody's business.

At this point, I will offer to exchange the word "talent" with "fluency". So I think that you simply lack fluency. Part of the reason you lack fluency is because people recommend largely the same unsuccessful strategies for becoming good at programming as they do for learning foreign languages (i.e., learn details about the language, class libraries, new languages, etc, etc.) In other words they recommend that you increase proficiency in the hopes that it will magically lead to fluency.

When you get a chance to read the Packers vs Mappers description in my first link, you might start to realize that this will not be successful. Mappers already think differently. They reason from first principles. They do not memorize rules -- they generate rules from the available data. Packers memorize rules and then search for appropriate rules to apply. If you are a Mapper, then learning proficiency will create fluency because you are adding more data from which to generate rules. If you are a Packer, you are just making your list of things to search longer and making your life more difficult.

As I said, the Mappers vs Packers analogy is useful, but flawed. I don't think that's actually how the brain works. Instead, I recommend reading about language acquisition, and in particular the work of Stephen Krashen. (Unfortunately, a comment is not the right place to discuss a topic of this size, but let me preface this by saying that Krashen's work is impressive, but that he is rather more confident about it than he should be based on the studies that have been conducted. However, it is the closest thing I have seen to something that will help you get the "pill for slowness").

Take a look at: https://en.wikipedia.org/wiki/Input_hypothesis

It's not the best description in my opinion. Krashen makes his book on the subject available online: http://www.sdkrashen.com/content/books/principles_and_practi... (I believe that's the one I'm looking for, but he has other resources available ad sdkrashen.com, so if you have boat loads of time, you can spend it reading his research ;-) )

So that's my theory. Now for practical advice. I'm afraid I don't have space/time to justify all the advice properly, but I will try my best.

- First and foremost is to start a large personal project and spend a little time every day on it (ideally 1 hour a day). More frequent updates are vastly more important than more time spent! The idea here is that at work, if you are slow, you spend a large amount of your time swimming in other people's thoughts. Because I assume that you are already proficient, the most important thing is to give you "comprehensible input" on a regular basis. It's not ideal (because it is your own output that will form the input), but working in an area where you have completely control, you will have less things to puzzle out.

- Throw out any notes that you might have that tell you how to do something (unless it is of the form "this is how you fix the server when it is on fire"). You need to be able to generate these things yourself on the fly in real time. If you have such notes (and I bet you do, because everyone I have ever seen that has your problem is almost buried in such notes), they are robbing you of the opportunity to repeatedly form understanding for how they are generated. You must form those understandings again and again and again or else you will not reach fluency.

- Every time you read code, you must understand it to at least 95%. It is hard to judge whether or not you understand it to 95%, so the rule is really, "you must understand 100% of everything you read". Many studies have found that when free reading, if the reader can understand 95% of the input, they can infer the other 5%. Less than that and you might think you understand, but you will be mistaken most often. This is massively important. If you think "I pretty much get this", "I think I understand what's going on here", "I've got a pretty good grasp of this, but don't understand some details" -- I'm going to suggest that you don't understand it well enough.

- To form understanding, the easiest way is to form a hypothesis and then test the hypothesis. If you have nice TDD code to work with, then it is easy. Look at the code, make some guesses about the code and then verify them with the tests. If you do not have such facilities, then you should still be thinking, "OK, if this method is here, then that means that there is an object X that calls it and sends the output to another method". Go and check.

- Occasionally, when you think you understand some code (say 20-50 lines), open up an editor and rewrite it without looking at it. This is expose the times when you think you understand what it is doing, but are wrong. I'm going to guess that when you first start this will happen more often than not.

-Read everybody else's changes to the system at work. Read every single line. Understand every single line. If you do not understand something, then get someone to explain it. Pair reviewing is a good way to have someone at hand to explain things. Comprehensible input is the only way to acquire ability. Writing your own code (output) is a secondary method (you are getting your own output as input). Read code every day.

- Time management... Sigh... this post is already massive, but this is super important, so I will try to explain it in as small space as I can...

Very likely, you have picked up "Packer" habits because it is easier than "Mapper" habits. Concentrating every minute of every day is hard. It's much easier to have a note, or memorize some formula and just whack it in without thinking about it. Over a lifetime, if you get into this habit, you end up not being able to build fluency because you are avoiding the hard work of understanding.

When you try to change that behaviour, your body will not be accustomed to it. Programming is a marathon, not a sprint. Not only that, but it is really a marathon. You can't stop to rest every 5 minutes. You have to tap out a rhythm for hours (sometimes expending more effort and sometimes less, but always engaged).

Just like you can't just go out and run a marathon, you won't be successful in staying focussed all day -- the whole day right away.

Some tips:

- Pair programming can help immensely. If you start drifting, you must ask for the keyboard, though.

- No social websites, news sites, distractions, etc, etc. No exceptions.

- If you do pomodoro, resist the urge to browse websites, talk about politics, etc, etc, in your rests. Keep a low level focus, while still recovering.

- Start with a 1 hour commitment. Take a rest and do another hour. Keep working at it until you can flow for 3-4 hours at a time.

- At the end of the day you should be mentally exhausted. If you are not, then you have allowed yourself to get distracted. Keep practicing.

Well, that's enough to get you started. Hopefully it will be helpful and you can use it to start an effective training program.

Re: undefined

#32

I am exactly like you. I have been doing this thing from about couple of years, and I also think I am not getting anywhere. I have lost most of the interest that I once had for programming, and I just sleep and take meds for my ADHD now. I don't program a lot these days. So, thanks for asking.

[deleted]

Re: undefined

#33

I think another question to ask yourself is, why do you feel this isn't normal? If others claim they could do the task faster, consider that programmers chronically underestimate. If you've seen others do it faster, it's possible that they are taking shortcuts, making quicker decisions that will involve more work later. From your example, you've carefully picked a library and thought through how to integrate it prope…

I had the same question. Is taking a whole day to set up an authentication system for a web application unreasonable? That's a pretty critical component and not necessarily simple. At my, erm, last company, it took multiple developers three months to set one up and we're still tweaking it. I'm with @funkysquid. A few extra hours to properly implement and test code that is going to see months if not year of critical f…

Agreed here too. I graduated first in my class of 200-odd engineering students, then completed a Master's degree with a perfect GPA and a couple papers published (on top of my thesis). A couple years later I started web programming, eventually building a relatively successful web-based business. Nothing in the OP sounds like a symptom of slow thinking to me. Doing something reasonably complex with unfamiliar tools should take a bit of time. In fact, being able to keep focused and get something like that done in a single day sounds pretty impressive.

Sure, if you already know the library you're using inside and out and have built such a thing before, maybe you could whip it out in a couple hours - maybe - but a day really isn't that long.

Re: undefined

#34
I program slower so that I am more productive. The cheap hack can be fast but it quickly becomes technical debt. The fix is already in, so don't fix anything -- maybe refactor. How do you eat an elephant? One byte at a time.

I am still building the authentication system for a web application. It took me half a day and there are bugs, many bugs -- they don't show up, but I know they are there. It should have taken me AT LEAST four days. Speed is relative. I bet you do some things incredibly fast without realizing.

On the other hand, we have yet to build the hundred year language. Some say it will take a hundred years! Others say it is JavaScript and it will be around for a hundred years. I am building my own one hundred year language. It is a programming language/tool/paradigm to allow me to still program when I am one hundred years old -- I call it the hundred year language.

Re: undefined

#35
Slow is fine. Don't worry about it. Nicotine, and cholinergenic smart drugs like the racetam family and substances like centrophenoxine can boost focus memory and learning temporarily but really you likely only have a perceived deficit. We're not super human - none of us. A few might seem smarter or better or faster or whatever but interest and careful slow observation will almost always win out, and they're likely that way because they've already gone through the period of being slow to understand the details, and are now fast. Don't move so much - stick around at a role for a while and you'll likely then be the alpha giving noobs a hard time for being slow.

I used to think the same thing. Now I'm not sure if I'm insanely smart and fast or stupid and slow. I'm working on a contract at google and it flip flops back and forth about 20 times a day. My friend once said "being a developer means feeling like a genius and a complete idiot at the same time all the time"

But really, only an objective medical advisor can tell you. Even then, it's pretty subjective what you're asking and analyzing. Believing it may in fact be a cause - maybe you're obsessing and worrying about being slow and that belief and anxiety itself is hampering you. Who knows? Nobody will be able to tell you if you're faster or slower than your peers. Even you and your peers side by side would have a hard time saying that because you'll know one little section better than them and be faster there for sure.

Beware your own attitudes! Have you ever heard of this? https://en.wikipedia.org/wiki/Impostor_syndrome

Impostor syndrome[1] is a psychological phenomenon in which people are unable to internalize their accomplishments. Despite external evidence of their competence, those with the syndrome remain convinced that they are frauds and do not deserve the success they have achieved. Proof of success is dismissed as luck, timing, or as a result of deceiving others into thinking they are more intelligent and competent than they believe themselves to be. Notably, impostor syndrome is particularly common among high-achieving women.[2]

Re: undefined

#36

> "I have always been a slow programmer" I'll try to make this post as short as I can, so forgive me if it seems abrupt. I'm going to take the opportunity to explore the possibility that you have no talent for programming. You should still take the advice to check out sleeping patterns, fitness, health, etc. First, take a look at this website: http://the-programmers-stone.com/the-original-talks/day-1-th... It's the f…

A lot of this rings true. Especially where you touched on following notes rather than deeply understanding a problem to the point where the solution can be generated by looking at the problem. I'm guilty of clinging to DDD-style application development and I don't even dare to think what my old code looked like before I discovered that.

Thank you for the in-depth links for more information.

Re: undefined

#37
1. You might be having something known as Sluggish Cognitive Tempo. https://en.wikipedia.org/wiki/Sluggish_cognitive_tempo For which there is no known treatment, I think.

2. Or you might be of ADHD-PI type. Either way, you need to consult a doctor and get his opinion.

3. A third possibility is that you might be having a hypothyroidism issue or even 4. vitamin deficiency. http://www.medscape.com/viewarticle/723663_7

Strenuous aerobic exercise is something that might help. Mindfulness Meditation will definitely help but its not very easy and you have to invest time, energy before you see results. Also you need to learn it from an expert (preferably) and not from youtube.

Other than these; obsessive repetition could be the key as well. Keep repeating every small thing 100 times till it becomes a second nature.

tldr; Go visit a doctor and take this issue very seriously and debug it by filtering out the possibilities.

Re: undefined

#38
May not be helpful at all, but if you haven't done so in a while, get full blood work done by a doctor and see if you might be deficient in anything.

Re: undefined

#39

>They don't make a pill for slowness They do make a pill for slowness. Several, in fact. In subjective order of strength, modafinil, methylphenidate (Ritalin), and amphetamines (e.g. Adderall aka speed). Not that I'm suggesting these, but it's not called speed for no reason, yeah? It is not just for ADD people; the benefits to everyone else are immense (well except potential heart problems and psychosis.) You should…

I have been on Ritalin since last 3 weeks when I got diagnosed with ADHD. I used to be a dysfunctional developer before this, and things are not very different now. Earlier I used to be able to write some stuff up, but I now I just let it slip up and ADHD seems like a good excuse.

Talk to your doctor. You may need to increase your dose, or you may need to try Adderall or Dexedrine instead.
Post reply on HN