6 ms·
Not only do I doubt that "anyone" can write these programs, most of them do not look particularly interesting or fun. Many if not all of the non-mathematical o
by mrsuprawsm 8y ago
Not only do I doubt that "anyone" can write these programs, most of them do not look particularly interesting or fun. Many if not all of the non-mathematical ones are simply replicating off-the-shelf utilities or tools; what is the point of reinventing the wheel?
Even if you are looking to hone your skills in a new language, creating something genuinely new seems like it would be more useful and motivational.
- a-saleh 8y agoCreating something genuinely new can be really tricky if you are learning at the same time. I.e. look at the TodoMVC as the comparison benchmark for various frontend frameworks.
- zabana 8y ago> what is the point of reinventing the wheel? The point of reinventing the wheel is to develop a more intimate familiarity with the tool or framework or utility you're trying to re-create. Yes the original ls program is perfectly functional but recreating it can be a good way to learn how to write C programs. This is applicable to any type of project really.
- djaychela 8y ago> what is the point of reinventing the wheel? For many of us (me included), it's not REinventing the wheel, it's inventing it. I've taken a quick look through here, and some of these are in the 'yeah, I can do that straight off' category, some are in the 'I -think- I could do that' and some are in the '...right.... I'm not sure how I'd approach that' category. Remember that not everyone is in the same boat as you, and at the same level. I'm sure I'm way behind 99% of the people on HN, so maybe this is the wrong audience. In addition, there's also the element of the development of the wheel - after all, they used to be wooden, and then gained a steel tyre, a proper bearing, etc... The code you create today may well be completely different (and hopefully better in every respect) than the code from yesteryear. >Even if you are looking to hone your skills in a new language, creating something genuinely new seems like it would be more useful and motivational. Maybe, but sometimes having the limitation of producing a specific thing can be useful - certainly when teaching music in the past, there has been room for both approaches, and I think that carries across into coding. There are also plenty of people who don't know -what- to create, and anything they look at is such a massive, difficult project combining multiple skills they may not have 100% down that it's probably better to do some simple 'test pieces' like I had to do when I was an engineering apprentice.
- LyndsySimon 8y ago> I'm sure I'm way behind 99% of the people on HN Two things about this: First, I seriously doubt you're in the bottom 1% of HN users when it comes to programming ability. Not only is it statistically very unlikely, but there are many people who read and participate here who aren't programmers at all. While I realize you probably didn't mean that statement literally, in my experience being self-deprecating is something of a self-fulfilling prophesy. You're almost certainly more skilled than you believe yourself to be. Second, speaking of skills as "ahead" or "behind" without context isn't very precise. I'm mostly a back-end web dev, but I have a little over a decade of experience. A brand new developer fresh out of a bootcamp that teaches modern React would be "ahead of me" if the task were to build a SPA front-end for an existent API. On the other hand, I would be far "ahead of them" if implementing the API itself was part of the task.
- dotancohen 8y ago> what is the point of reinventing the wheel? Making a wheel is pretty much the "Hello, world!" of engineering. It ensures that you know how to operate the equipment, procure materials, safely work them, and retrieve the finished product from the machinery. Just getting started with a lathe? Go make a wheel. Just got a 3D printer? Go make a wheel. Just getting started with a whittling knife? Go make a wheel.
- 80386 8y ago>Just getting started with a whittling knife? Go make a wheel. I used to go to primitive skills meetups, and at one of them I met a guy who taught woodworking. At the meetup, he carried around a few blocks of wood and some basic tools, and when he sat down to eat he'd bang out a wood spoon and eat with that. This was good advertising, but he said he did that sort of thing a lot for practice.
- SiVal 8y agoI think you're right for many people, especially those who haven't done much programming and aren't sure they really want to. But whenever I learn a new language (many times over many decades), I want to build lots of small projects of many different sorts in order to habituate myself to the new tools and patterns (using the tools in various combinations) as quickly as possible. My ideal is when I find a set of these small but diverse projects implemented by an expert in the language, so I can try it my way, see how a "native speaker" does it, get some explanation from him (again, ideally), adjust my approach to be more "native", and repeat, again, and again, and again. I can usually find the problems, but finding the "native" solutions is harder. I don't need the exercises to be "useful" in any way other than delivering the desired fluency efficiently, and I don't need them to be "motivational". If I want the skill, I'm motivated by anything that can help me get it, and if I don't want it, the problems don't matter. I have other things to do.
- narwally 8y agoI have a similar approach to learning a new language. The first thing I usually do is implement some sort of self-balancing binary search tree (usually AVL, Splay, or Red-Black). It's usually something that I can do in just a few hours in a new language, using just the core language features and maybe a couple of standard library functions. It's also just complex enough to force me to learn some of the language idioms so that the resulting code is sufficiently readable/elegant/small/performant. Once I've done this I'm usually much more comfortable reading other code in the language and navigating the language documentation. From there it's much easier to do things where I want to use external libraries, frameworks, build tools etc.
- dionidium 8y agoI was writing a chess app a while back and a non-programmer friend mocked me for re-making something that already ships for free on every computer in the world. This took me by surprise! Why do people complete crossword puzzles that millions of people have also completed? Why do people learn to play songs on the piano that millions before them have learned? Why do people learn math proofs that have been known to others for hundreds of years? I can't quite apprehend the kind of confusion required to provoke such questions.
- nathan_f77 8y agoWhen I'm working on a side project, I always prefer to do something that hasn't been done before, even if it's just a small improvement. I wouldn't criticize your chess app, and that sounds like a great learning experience. But even if the goal is to learn something new, I'd prefer to end up with a project that is useful or interesting, and might even make some money. In other words, I only want to build something if I can write a blog post about it and Hacker News might find it interesting. (And there's plenty of ways to make a chess app interesting - using a different programming paradigm, machine learning, AR, building a chess engine in VHDL for an FPGA, etc.) > Why do people learn to play songs on the piano that millions before them have learned? I honestly asked myself that same question when I was a teenager, and I decided to quit piano lessons. It felt like a waste of time and a useless skill now that we have MIDI and self-playing pianos. So I switched to jazz and improvisation, and tried to compose my own music (although I'm not very good.) But I enjoy the creativity a lot more than playing songs from sheet music.
- PavlovsCat 8y ago> Even in literature and art, no man who bothers about originality will ever be original: whereas if you simply try to tell the truth (without caring twopence how often it has been told before) you will, nine times out of ten, become original without ever having noticed it. -- C. S. Lewis Why wouldn't that hold for programming, at least if you make something you actually want and use? For me, it's about being able to make something exactly how I want it, without having all the stuff I don't need. For example, I started out with a simple CMS that was based on text files. The next iteration used MySQL, but each "type" of page (link, text, image, audio) was it's own thing. That sucked, so I did it a third time, this time everything was a node that could have a type and a parent and children, but could also nodes "inside" it, which in turn also can also be nested and have nodes inside themselves, initially just because I thought "why not", but it's so useful, I didn't realize how much so until after the fact. The commenting system is the same, imagine a tree like this discussion, but then every comment could have such a tree of comments inside it, as well as nested replies on the level it is on. I know it's dumb to do that for comments (but it's dumb in a way that makes me laugh so it stays in), but for content it's just awesome. Some node types like empty, text, links, etc., then let every node decides how subnodes and nodes inside it get displayed, and that's been all I need for over 6 years now. I don't worry about my setup being no longer supported, ever, because my setup is the developer setup. And the project will also by definition not be abandoned before I stop using it. Those are huge benefits actually. I keep checking out what's available on the "shelf", and I want none of it, while my CMS contains a lot of deal breakers for anyone who doesn't have my exact setup and needs. The point of not getting something off the shelf is not to remake the same thing, but to get something that's not "off-the-shelf", what you count as just a negative is actually also plus. You might say e.g. Drupal can do all that and much more, but Drupal is a huge, and trimming it down to exactly what I want would mean I have to do it again when it updates. Sure, it took years to get to a point where what I had was better for me than off-the-shelf, but I wouldn't have gotten there at all if I had just stuck with off-the-shelf. That also kinda limits the imagination to off-the-shelf.. how can I know I needed something that didn't exist before I made it, right? Speaking of imagination, that wheel analogy has to die, no offense. It's always more than just "the idea that a round thing rolls", apart from the ideas being more complex the implementation details do matter.
- 8y ago
- mcguire 8y ago"Why would you want to learn this stuff? We're never going to use it."
- craftyguy 8y agoIf people stopped 'reinventing the wheel', we'd still be using circular rocks (or whatever the first wheel was), no one would have cared to learn how to make it and then improve upon it. Recreating existing tools is a perfectly valid way to 1) learn or become proficient in a language, 2) learn how the tool works, and 3) position yourself to improve the tool if you wanted
- yen223 8y agoThat's the funny thing about that phrase. There's so many different types of wheels out there! And it's not the result of engineers being cute, but rather the reality that different requirements do call for different solutions. People who argue against reinventing the wheel are the same ones sticking bicycle wheels on jumbo jets, and wondering why it can't handle the load.
- zerkten 8y agoI'm not sure others have said this specifically when I started writing this. The point of reinventing the wheel is that you understand the domain and are focusing on the language, framework, or alternative approach. This is at the core of the programming Kata. Code retreats focus around things like Conway's Game of Life which participants have probably programmed many times before, but it lets them focus energy on learning in a specific way. To be fair, I think there can be some value to the approach where everything is new, but it probably shouldn't be the norm. Feeling out of control because you don't understand multiple elements can generate energy and growth at times, but it may require more time to progress. For people looking to demonstrate their skills for a job, having examples like these can be useful. They don't take time to for an interviewer to understand so the focus can be on how the interviewee built the solution.