7 ms·
Programming is Easy, Software Development is Hard
- erikstarck 16y agoYes. Writing one line of code that works is easy. Anyone can do it. Writing two lines of code that works is also easy. Anyone can do it. Writing ten thousands lines of codes, however, is complex and hard. A good software developer can manage, or tame, this complexity. Programming is deceivingly simple. That's what makes it so hard.
- sid0 16y agoThe way you put it really reminded me of the sorites paradox.
- presidentender 16y agoBy induction, your first line says that writing ten thousand lines of code that work individually is easy. I accept that getting them to work together is the hard part.
- mdwrigh2 16y agoInduction doesn't actually hold like that when you start applying things that require finite resources, such as time. Is it easy for me to find a dollar? Sure, I could get it any number of ways. It's slightly more difficult for me to $10,000. Now apply "induction" to amounts > $100,000,000.
- deleted 16y ago[deleted]
- Locke1689 16y agoNo. If the inductive step is that n lines of code is n! difficulty his base cases are still valid. There is no induction with no inductive hypothesis.
- presidentender 16y agoYou write one line of code, say "printf("Hello, World!");" ten thousand times. It's easy. Making it work together introduces the complexity.
- nadam 16y agoEverything is hard on a world-class level. Even programming and Math is hard on a world-class level. Writing 3D engines like John Carmack does is hard. Solving million dollar math problems, or coming up with unexpected theories is very-very hard. Creating a natural language translation system, a speech recognition system is hard. Winning the Netflix prize is hard. Programming the same kind of relatively simple webapp over and over again is probably easy; and I agree that compared to that understanding what the customer wants is usually much harder.
- mduerksen 16y agoYour customer tells you: "Yeah, the game is really fun, but a bit slow. It should run smoothly for the player, even though the internet connection is unreliable." A well-defined problem. But which one was hard: Stating or solving it? The attempt of artificially separating the "crafting skill" programming from the rest of software development (which is blurry enough) is an ongoing effort since decades, and still annoying.
- kscaldef 16y agoI would not say that that's a well-defined problem. What does "run smoothly" mean? Do you mean frame rate? Do you mean lack of discontinuous motion of objects in the game? What does "unreliable connection" mean? How unreliable do you want to allow the connection to be and still have acceptable behavior? Are we talking about surviving continuous packet loss or about short-ish, bounded periods of no connection?
- mynameishere 16y agoThere's always that one guy at every job who talks about "high-level" "software engineering" topics but can't code for crap. It's so common I suspect causation. The idea that identifying problems is more difficult than solving them is as facile as suggesting play dates between children is more difficult than Beethoven.
- DrHankPym 16y agoYou're right about the people who always talk about the "high-level" topics and can't code for crap, but I also think that identifying problems is more difficult. Case in point: 42. Who knows how this number was processed? Programming and debugging with existing code is challenging, and it's easier to talk about common ideals than actual solutions.
- zb 16y agoYou're looking at it as one or the other, when it should be one or both. Identifying problems that are soluble and then solving them without creating too many new problems is a lot more difficult than just solving problems. And also a lot more difficult than just wandering around pointing out problems.
- bad_user 16y agoI have always been puzzled by people who say that math is hard. In my opinion, your understanding of most math that you need is directly proportional to the effort you put in, and less to do with your intelligence Some people have a natural gift for math and can simply learn it on-the-fly. Other people simply hate math, and as an analogy ... if something tastes like shit to you, you'll never be able to eat as much as someone who loves eating "math" AND you'll probably regurgitate whatever you force yourself to eat. This also dismisses the research done on the ways our brain works: some people think more with the left-side of their brain, which translates in better logical / rational / analytical / objective thinking, all traits that help at doing math. And other people are downright unable to think with their left brains, further than basic functioning. Also, consider how theorem-proving or problem-solving works: you've got knowledge of a set of theories you've learned thus far (that set can get pretty big btw) and the possibilities of combining those theories are increasing exponentially. This actually requires raw brain power (well, unless we're talking of applying really basic algorithms, like solving an ecuation of a known type, but that's not math). When speaking of math / computer-science / programming / whatever, I actually saw people sucking at it no matter how hard they tried.
- agentultra 16y agoProgramming isn't that easy. I've been trying to teach some friends who've expressed interest for years. It seems rote and simple to me, but even working with them one on one doesn't seem to work. I've tried analogies, metaphors, and diagrams; I've tried to start from the high-level over-view and from the nitty-gritty. Some of them make a little head-way, but most have given up. I think it has something to do with the cognitive load of assimilating language. A lot of what makes math hard is the language of math. Those that understand math find the language to be the easiest part and by far the most mechanical and simple to understand. Yet not everyone can pick up new languages. Most people as I understand it only have room in their heads for one or two. I would wager those that learn math or programming might have room for a little more. To learn a language is rote excercise, but not everyone can retain it for some reason afaik. I think most people can learn what a "variable" is and might understand assigning a number or a "string" of letters. Yet even understanding arrays, hashes, and such low-level primitives is difficult. Going beyond that into functions, operators, generators, classes, objects, closures, data structures, memory allocation, pointers, references, etc... forget it. It takes a certain kind of person to be able to assimilate all of that and use it effectively. Why else do we continue to invent languages "for people who cannot program?" It's hard for a master to think like a student.
- j-g-faustus 16y agoSome people find programming easy. I was well into my twenties when I started programming, but I found the logic very natural - if this do that, otherwise do something else. A friend of mine was skilled in natural languages (she spoke several languages reasonably well) and wanted to learn programming (it's just another form of language, right?), but she gave up after a semester - she found programming languages to be hopelessly nitpicky with nonsense rules and no relation whatsoever to languages used to communicate between humans. For some segment of the population the basic premises of programming come easy, and it's just a matter of spending time enough to learn the details. Others struggle mightily with the same basic premises, it seems like they can't really switch to the "extremely narrow minded one step at a time and you can't substitute uppercase letter O for numeric zero even though the look the same" frame of mind that is a prerequisite for doing any kind of programming in any language. It's possible that programming is learnable by everyone, but it certainly seems to come more natural to a few. I suspect that the difference is more deep seated than we normally give it credit for, possibly even somewhat analogous to the mix of "fast twitch" and "slow twitch" muscle fibre (http://sportsmedicine.about.com/od/anatomyandphysiology/a/MuscleFiberType.htm http://sportsmedicine.about.com/od/anatomyandphysiology/a/Mu... ) that can give someone a natural advantage in certain kinds of sports.
- kenjackson 16y agoI think David Brooks article, like the article on the Rhodes scholars, are very partisan ideological articles, although both disguised quite nicely. The conservative right has started a grassroots movement to make traditional measures of intellect and achievement worthy of less distinction. A PhD? Who cares? Nobel Prize in Chemistry? Chemistry isn't that big of a deal, anyone can do it. Plain talkin' people who struggle with things like math and science -- those are the real intellects. Because being an intellect is being someone who can just relate to the every day man. Everything else is just a "hobby" that is no more worthy of distinction than being good at Call of Duty. Over 2011 expect a full court press on this. Academia, scholarship, science, math, etc... will all be attacked as not particularly interesting. Plain spoken populism will be the new metric for brilliance and the best this country has to offer.
- tkahn6 16y agoI think you're reading too much into Brooks' ideology from that singular article and that singular excerpt. Based on my experience with other works from him and from listening to him speak on PBS news, it's disingenuous to lump him in with the "conservative right". He is anything but anti-intellectual. That said, his position is not that "plain talkin' people who struggle with math and science" should be lauded but that social skills are not skills that can be learned through formal education. His point is that group dynamics, being able to read people and lead people, is a very subtle art that is learned throughout childhood and adolescence and Chua denied her children the opportunities to learn these skills by refusing them sleepovers and plays and such.
- kenjackson 16y agoHe's certainly part of the conservative right. He's no Michelle Malkin, but he's considered the NYTimes right-wing opinion columnist. His point is actually slightly different than what you are saying, and this subtlety is important. Because while Brooks is on the right, is one of their more astute thinkers. Brooks is actually saying that formal education is easy. Not intellectually challenging, and largely a playground. Lets take some quotes: "I believe she’s coddling her children. She’s protecting them from the most intellectually demanding activities because she doesn’t understand what’s cognitively difficult and what isn’t." "these and other social tests impose cognitive demands that blow away any intense tutoring session or a class at Yale. " "Chua would do better to see the classroom as a cognitive break from the truly arduous tests of childhood" He's not simply saying that there exist other skills that aren't taught in the classroom and that these ar also important and difficult. He's saying something much stronger. He's saying the things that people like Chua value (math, science, arts, literacy, etc...) are the easy things -- the things not to be valued. They're the things you do when your child needs a break or to be coddled. These are the things of intellectual lightweights. The hard cognitive work is the stuff you see at the corner store in Smalltown USA. These people don't have college degrees, PhDs, Fields Medals, but they can do the actual intellectual demanding activities, not the stuff "you coddle your children" with.
- DjDarkman 16y agoPrograming IS hard. You define the problem, but how do you solve it? Especially if you already have some code you have to work with.
- ljordan 16y agoHow about, "in comparison to software development, 'programming' is easy"?