Hacker News new | past | comments | ask | show | jobs | submit login

A lot of people seem to believe that being strong on algoritms and data structures are important skills for a programmer. Maybe it has to do with the problem domain, but I have a hard time accepting that. I couldn't implement bubble sort from scratch if I tried - let alobe anything actually complicated. I could back in school, but in the 12 years since then, I have not once needed it. Understanding the finer details of coupling and coherence are much more importabt skills in my book. It's not as easy to messure though.



"Maybe it has to do with the problem domain, but I have a hard time accepting that."

Your profile says that you are a web application hacker. I think that explains why you may not feel that data structures or algorithms are important. I was the same way myself (started my programming life by building Perl cgi scripts, made a nice little cms, definitely didn't use any fancy stuff to do that).

You should take it from me though. You will suddenly develop a deep and profound appreciation for understanding algorithms when you have a problem that requires having to comb through over a hundred thousand records, perform some type of operation on them, and sort by the results of that operation - all within a fairly narrow time period.

I think that it actually is a question of problem domains. If you never encounter this type of problem, then not knowing about things like big o notation and the various sorting algorithms will never impact you. However, when you do, that knowledge quickly pays for the time invested in learning it.


Without algorithms, you are limited to solving problems that can be tackled with mere plumbing.

You are right that there are lots of such problems. But there are also many others who can solve them too.


I completely disagree. Algoritms are exactly the kind of things that don't require any creative thinking, besides identifying when they may be applicable. That's easily outsourced to whoever charges the least.


Algorithms as taught in university are like single letters. We yearn to write compelling essays and deep poetry, and you are advocate having an illiterate person select letters one at a time and outsource the writing of them to the lowest bidder.

From your user name I guess you are a troll. But the best part is, there many people who really think that way. I think its the dominant view in the industry. For example at least some (and probably most) groups in redmond.


No, you have to read my response in context (E.g. as a response to plumbing and many others who can solve them). I work with software that supports business processes, manage information and facilitates interaction between humans and machines. In that field (if it is even meaningful to speak of such a broad category as a single field), knowing how to write the most efficient sorting algoritm is fairly close to worthless.

I'm sure that if you work at Google, where crunching big data is key; or in a company like Microsoft or Apple, where applications are much closer to the hardware; then these things do matter. But I propose that a major part of software development happens in a space where such things are irrelevant or at least very rarely relevant.

Regarding my outsourcing remark, let me clarify a bit. What I mean to say is that while the stuff that is close to the hardware might take skilled workers, it does not require cultural skills. For example, I would suggest that it's a lot easier to outsource a hardware driver than it is to outsource a workflow engine for an order process. For the latter, you need to be close to your users and you need to understand the business you're modeling.

Mind you, I think it's fine that we teach this stuff in universities - it's good background knowledge to have. But as a practical skill, I question its value. And in a job interview, I would suggest to test the skills that are actually needed in the relevant job.

Oh, and I didn't choose my name; My parents did. It's traditional and somewhat common name in Scandinavia. You're not the first to get that wrong though.


From your user name I guess you are a troll. ... For example at least some (and probably most) groups in redmond.

Meta-troll?


You have to identify when they're applicable and adapt the algorithm to your problem in your code using the libraries you have available.

If you can outsource the problem and plug in a solution, that's great, but it's not always possible.


Couldn't agree more. Most of the crap I've seen in the various codebases I've worked on has nothing to do with poorly implemented or understood algorithms, and everything to do with bad designs and ill-conceived architecture. Lack of abstraction, unnecessary coupling, etc. But those skills are not only harder to measure but harder to teach -- you often don't see the problems with a particular design until you've seen it fail in production.


Disagree. It may be more common to see bad designs and architecture because language libraries already have good implementations of key algorithms. Strong, mature frameworks similarly go very far in making system design and architecture easy because someone else has already done the hard work. Therefore, both algorithms and design principles are important skills for a well-rounded programmer. Do you see why?


I'd say you need both. Coherence is important for the usability and maintainability of codebase as a whole, while algorithms often run key components of a system (eg A* pathfinding in a video game). Data structures are fundamental and if you don't know them your code is probably buggy.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: