Here's the thing about methodologies: anyone can use them. Any methodology that is popular enough for you to have heard about it was developed by one or more smart people and solved some real problem. Between now and then though, countless cargo-culters have jumped on the bandwagon and misapplied the methodology to the wrong problem in innumerable ways. Maybe they implemented it wrong, maybe they didn't have applicable problems, maybe they are as dumb as a box of rocks but have carved out a comfortable niche in a fat corporation somewhere. The point is, a methodology is meaningless out of context.
Hell, all ideas are meaningless out of context. In every day human life we tend to share a lot of context with those around us, in terms of software development—ie. the stuff of pure thought where the only limit is logic itself—we share considerably less so. When you're writing a web app you are living in a wholly different world from someone writing a Mars lander ROM, yet we call both of those things "software engineering". If you want to have good ideas and be competent you have to apply whatever ideas to the context you are in. Being smart is not about having the best ideas, but about evaluating how ideas apply to and interact with systems. The hardest thing about entrepreneurship isn't figuring out how to write software to do X, it's how to choose X such that a cascading chain of seemingly random events translate into market traction.
The horrifying thing about software development is the limited intelligence of the human brain to begin with. From a certain perspective we are hopelessly stupid and incapable of truly elegant software design, but on the other hand we are the only entities we know of with the capacity to write software at all! All this is to say you need to embrace ignorance and subjectivity, and simply pledge yourself to continual improvement. You do this not by latching onto ideas and filing them into good or bad buckets, but rather by processing a lot of them, applying them in practice, and seeing how those with more experience than you do the same.
If your curiosity outweighs your frustration over a period of decades, eventually I guarantee you will be at least a competent software developer, and maybe by then ageism in a tech will be something the kids laugh at like televisions with twisty knobs.
Once he gets older and a bit more mellow, he'll see that there are always people who are better - and you can recognize them. Also that it just makes sense to stick to some methodologies to find common ground, to keep your code readable by everyone in the team.
Having a desk job helps in understanding it is more important that you can understand your code 3 years down the road than squeeze the last 5% of productivity out right now.
that assumes you have the same desk looking at the same code in 3 years. otherwise writing code however you like may have its benefits. including giving you less other-humanly-end-points to have to consider at work. but this attitude may also force you into freelance work sooner than expected though.
I find that when it comes to optimizing code with an emphasis on readability, the improvement is rarely only 5%. Plus the improvement is not just the end result's performance, but also in writing.
I think I don't understand this readability thing. I have trouble keeping the structure of large programs in my head. So for me, the number one readability property of a program is it's length. The shorter, the quicker I can read it.
For other people it seems to be a lot more about code they don't understand. List and dict comprehensions are one such thing, especially the iterator-based ones. Using variable capture with in-line functions is another, and God forbid I pass around a function pointer to an inner function, because it often lets me avoid writing an entire pointless class that I have to remember exists. I use functional programming constructs constantly where they make sense, which tends to be a lot of places. Why is all this forbidden ? Is this because people don't know what they do/how powerful these constructs can be ? I feel that rewriting a nested list comprehension into a 20 line function does absolutely nothing to clarify matters for me, it makes things worse.
>On the note of software methodologies for teams, I think they are pointless, at least for me. [...] The problem I have with them is their meaning and significance vary between everyone.
This looks to be the crux of your argument and it's a weak one. Just because there are wide ranging opinions on definitions does not mean the ideas have no merit. The idea of "education" means something very different to many people. That doesn't mean that public school, college, or Cisco certification training is "pointless". There are thousands of ideas/words that don't meet 100% agreement. Just the other day, there was a thread on HN about what "mathematical proof" meant. Does that mean someone can legitimately dismiss math proofs as pointless because mathematicians disagree?
Alan Kay's idea of "object-oriented" is different from Bjarne Stroustrup's. Martin Odersky's idea of "functional language" is different from John McCarthy's. Regardless of the differences, there are still good ideas in both OOP and functional paradigms that can improve designs of software architectures.
>I don’t know if I should “love to hear your argument against this” but since this is a blog post from some obscure programmer on the internet, then I’m sure you’ll write it anyways.
I don't understand the conceit you wrote here. If this is how you truly felt, why did you post your blog to HN? I thought the idea was to invite commentary.
> If this is how you truly felt, why did you post your blog to HN?
Obviously so we could read something he thinks is a discovery.
On the rest of what you've said… Funny that however I obviously agree with the whole point of your post, I disagree with almost every single argument you made.
"Pointless" is pretty much about being opposite to "something that works". If it does work it's not pointless. If it doesn't — it very much might be. So everything depends on definition of "working", which is different in different situations, depending on what result we want to get from our activities.
Consequently, all of your "education-based" examples are bad, as somebody might claim Cisco certification, school and/or college are pointless and even be completely right. In the most philosophical sense nothing is really pointless of course, but if you are coming to me asking for advice you probably don't want the "most philosophical answer" and depending on your goals and personality (even in very broad sense) I could declare many popular things people are paying for as "pointless" for you. Because they "don't work", or the costs/profit ratio is too high compared to other options.
Your "math" example is also quite unfortunate (however I must warn you I haven't read the article you are referring to), as if there actually was disagreement on if something is or isn't a proof — it really could and should be "legitimately dismissed". It might not be actually wrong, but you either accept something as proof, or you don't.
Now, it's true that there isn't one good definition on what proof actually is. Actually, there are doubts that that definition is even possible. And it's nothing new, it's almost 100 years now that this is a problem for mathematical society.
So how my last two points go together? Perfectly fine, actually, because depending on your views on the problem of defining proof something can or can not be proof, and these views can differ drastically depending on whether you are a member of Bourbaki group or a layman. For example, Alexander Grothendieck dismissed (quite "legitimately", by the way) the famous proof of "4 color theorem" and he is completely fine mathematician, and that proof is something that you will probably claim to be proof.
The similar problems I see in your "different languages" example, but it would take a bit longer to explain, so whatever.
Methodologies and even many of quite arguable "best practices" aren't pointless, because they do work, not because "disagreement doesn't matter". Actually, I would claim that disagreement does matter, because there's a good chance that one side will be proven to be "more right" than the other over time. Yet even the "less right" one is often much better than nothing, especially because the one "absolutely right" opinion doesn't exist anyway.
> I've found that beginners don’t learn about this until it is far too late, and the teachers rarely emphasize it. Many of those who are learning programming through a school aren’t taught about the ethics of programming. They aren’t taught how to design library API’s, how to separate concerns, or how to write small cohesive modules.
I like to call this the 'fallacy of assumed competence'. We assume teachers are good at teaching, and teachers assume students are good at learning and understanding. As i've grown older i've come to believe that most teachers suck really hard at teaching, and that most students suck really hard at knowing how to ask the teacher what they need to know.
In terms of programmer methodologies: nobody in the real world cares all that much. Nobody quits their job because their bosses wouldn't enforce using their preferred methodology. If you're all tasked with developing some giant framework or application and you all have to work together, at some point you learn it's a lot less painful to put your ego aside and just get work done.
Allow me to play doubles advocate here for a moment. For all intensive purposes I think you are wrong. In an age where false morals are a diamond dozen, true virtues are a blessing in the skies. We often put our false morality on a petal stool like a bunch of pre-Madonnas, but you all seem to be taking something very valuable for granite. So I ask of you to mustard up all the strength you can because it is a doggy dog world out there. Although there is some merit to what you are saying it seems like you have a huge ship on your shoulder. In your argument you seem to throw everything in but the kids Nsync, and even though you are having a feel day with this I am here to bring you back into reality. I have a sick sense when it comes to these types of things. It is almost spooky, because I cannot turn a blonde eye to these glaring flaws in your rhetoric. I have zero taller ants when it comes to people spouting out hate in the name of moral righteousness. You just need to remember what comes around is all around, and when supply and command fails you will be the first to go.
Make my words, when you get down to brass stacks it doesn't take rocket appliances to get two birds stoned at once. It's clear who makes the pants in this relationship, and sometimes you just have to swallow your prize and accept the facts. You might have to come to this conclusion through denial and error but I swear on my mother's mating name that when you put the petal to the medal you will pass with flying carpets like it’s a peach of cake.
dasil003|11 years ago
Here's the thing about methodologies: anyone can use them. Any methodology that is popular enough for you to have heard about it was developed by one or more smart people and solved some real problem. Between now and then though, countless cargo-culters have jumped on the bandwagon and misapplied the methodology to the wrong problem in innumerable ways. Maybe they implemented it wrong, maybe they didn't have applicable problems, maybe they are as dumb as a box of rocks but have carved out a comfortable niche in a fat corporation somewhere. The point is, a methodology is meaningless out of context.
Hell, all ideas are meaningless out of context. In every day human life we tend to share a lot of context with those around us, in terms of software development—ie. the stuff of pure thought where the only limit is logic itself—we share considerably less so. When you're writing a web app you are living in a wholly different world from someone writing a Mars lander ROM, yet we call both of those things "software engineering". If you want to have good ideas and be competent you have to apply whatever ideas to the context you are in. Being smart is not about having the best ideas, but about evaluating how ideas apply to and interact with systems. The hardest thing about entrepreneurship isn't figuring out how to write software to do X, it's how to choose X such that a cascading chain of seemingly random events translate into market traction.
The horrifying thing about software development is the limited intelligence of the human brain to begin with. From a certain perspective we are hopelessly stupid and incapable of truly elegant software design, but on the other hand we are the only entities we know of with the capacity to write software at all! All this is to say you need to embrace ignorance and subjectivity, and simply pledge yourself to continual improvement. You do this not by latching onto ideas and filing them into good or bad buckets, but rather by processing a lot of them, applying them in practice, and seeing how those with more experience than you do the same.
If your curiosity outweighs your frustration over a period of decades, eventually I guarantee you will be at least a competent software developer, and maybe by then ageism in a tech will be something the kids laugh at like televisions with twisty knobs.
unknown|11 years ago
[deleted]
iSnow|11 years ago
Having a desk job helps in understanding it is more important that you can understand your code 3 years down the road than squeeze the last 5% of productivity out right now.
cyphunk|11 years ago
waps|11 years ago
I think I don't understand this readability thing. I have trouble keeping the structure of large programs in my head. So for me, the number one readability property of a program is it's length. The shorter, the quicker I can read it.
For other people it seems to be a lot more about code they don't understand. List and dict comprehensions are one such thing, especially the iterator-based ones. Using variable capture with in-line functions is another, and God forbid I pass around a function pointer to an inner function, because it often lets me avoid writing an entire pointless class that I have to remember exists. I use functional programming constructs constantly where they make sense, which tends to be a lot of places. Why is all this forbidden ? Is this because people don't know what they do/how powerful these constructs can be ? I feel that rewriting a nested list comprehension into a 20 line function does absolutely nothing to clarify matters for me, it makes things worse.
jasode|11 years ago
This looks to be the crux of your argument and it's a weak one. Just because there are wide ranging opinions on definitions does not mean the ideas have no merit. The idea of "education" means something very different to many people. That doesn't mean that public school, college, or Cisco certification training is "pointless". There are thousands of ideas/words that don't meet 100% agreement. Just the other day, there was a thread on HN about what "mathematical proof" meant. Does that mean someone can legitimately dismiss math proofs as pointless because mathematicians disagree?
Alan Kay's idea of "object-oriented" is different from Bjarne Stroustrup's. Martin Odersky's idea of "functional language" is different from John McCarthy's. Regardless of the differences, there are still good ideas in both OOP and functional paradigms that can improve designs of software architectures.
>I don’t know if I should “love to hear your argument against this” but since this is a blog post from some obscure programmer on the internet, then I’m sure you’ll write it anyways.
I don't understand the conceit you wrote here. If this is how you truly felt, why did you post your blog to HN? I thought the idea was to invite commentary.
krick|11 years ago
Obviously so we could read something he thinks is a discovery.
On the rest of what you've said… Funny that however I obviously agree with the whole point of your post, I disagree with almost every single argument you made.
"Pointless" is pretty much about being opposite to "something that works". If it does work it's not pointless. If it doesn't — it very much might be. So everything depends on definition of "working", which is different in different situations, depending on what result we want to get from our activities.
Consequently, all of your "education-based" examples are bad, as somebody might claim Cisco certification, school and/or college are pointless and even be completely right. In the most philosophical sense nothing is really pointless of course, but if you are coming to me asking for advice you probably don't want the "most philosophical answer" and depending on your goals and personality (even in very broad sense) I could declare many popular things people are paying for as "pointless" for you. Because they "don't work", or the costs/profit ratio is too high compared to other options.
Your "math" example is also quite unfortunate (however I must warn you I haven't read the article you are referring to), as if there actually was disagreement on if something is or isn't a proof — it really could and should be "legitimately dismissed". It might not be actually wrong, but you either accept something as proof, or you don't.
Now, it's true that there isn't one good definition on what proof actually is. Actually, there are doubts that that definition is even possible. And it's nothing new, it's almost 100 years now that this is a problem for mathematical society.
So how my last two points go together? Perfectly fine, actually, because depending on your views on the problem of defining proof something can or can not be proof, and these views can differ drastically depending on whether you are a member of Bourbaki group or a layman. For example, Alexander Grothendieck dismissed (quite "legitimately", by the way) the famous proof of "4 color theorem" and he is completely fine mathematician, and that proof is something that you will probably claim to be proof.
The similar problems I see in your "different languages" example, but it would take a bit longer to explain, so whatever.
Methodologies and even many of quite arguable "best practices" aren't pointless, because they do work, not because "disagreement doesn't matter". Actually, I would claim that disagreement does matter, because there's a good chance that one side will be proven to be "more right" than the other over time. Yet even the "less right" one is often much better than nothing, especially because the one "absolutely right" opinion doesn't exist anyway.
L8D|11 years ago
Instead of trusting everything you read, you should question it an consider it in practice before you actually follow it.
peterwwillis|11 years ago
I like to call this the 'fallacy of assumed competence'. We assume teachers are good at teaching, and teachers assume students are good at learning and understanding. As i've grown older i've come to believe that most teachers suck really hard at teaching, and that most students suck really hard at knowing how to ask the teacher what they need to know.
In terms of programmer methodologies: nobody in the real world cares all that much. Nobody quits their job because their bosses wouldn't enforce using their preferred methodology. If you're all tasked with developing some giant framework or application and you all have to work together, at some point you learn it's a lot less painful to put your ego aside and just get work done.
lemoncucumber|11 years ago
ಠ_ಠ
imanaccount247|11 years ago
Make my words, when you get down to brass stacks it doesn't take rocket appliances to get two birds stoned at once. It's clear who makes the pants in this relationship, and sometimes you just have to swallow your prize and accept the facts. You might have to come to this conclusion through denial and error but I swear on my mother's mating name that when you put the petal to the medal you will pass with flying carpets like it’s a peach of cake.
thehoneybadger|11 years ago
ConfuciusSay|11 years ago
clubhi|11 years ago