Live data from Hacker News

Challenging projects every programmer should try (2019)

austinhenley.com

221–230 of 346 posts

Re: Challenging projects every programmer should try (2019)

#221
post #86

If you think you need a "factory pattern" to write Space Invaders, there is something wrong. I'm close to absolutely certain no such design concept was involved in the original.

It's the result of 30 years of OOP and design patterns. When your brain gets infected with them you start looking for ways to spread the infection.

Not sure if you’re joking, but in a way this feels very true to me. After a decade or so of doing OOP, I started doing a lot of 6502 assembly (for a home brew computer) and not applying OOP principles felt dirty at first. Same as not having 100% (or any for that matter) test coverage. I felt like I was cheating by doing things a simpler way. But then I started to really enjoy it and it felt liberating.

Re: Challenging projects every programmer should try (2019)

#222
post #206
post #76

Discussed at the time: Challenging projects every programmer should try - https://news.ycombinator.com/item?id=21790779 - Dec 2019 (297 comments) Also related: More challenging projects every programmer should try - https://news.ycombinator.com/item?id=25489879 - Dec 2020 (223 comments)

The external link for the second story 404's.

https://archive.is/3Nbu8

Re: Challenging projects every programmer should try (2019)

#223
post #216

Earlier quoted context omitted.

Software engineering is whatever definition that allows me to procrastinate and sleep at night knowing I don’t need to learn more.

If you don't want to learn you chose the wrong profession.

To expand, the software industry moves fast, and you have to keep learning to stay afloat, or risk stagnating and ending your career early. look at where software was at 5 or 10 or even 20 years ago. There was no react and no rust 20 years ago, nor was there even git! Whatever you know now is going to be out of date in a matter of years. good luck getting a job if that's all you ever want to learn.

Re: Challenging projects every programmer should try (2019)

#224
post #62
post #57

A text editor can use an array as data structure. You only need it to be fast during the typing, where you are only changing one line. But for entering new lines, the extra latency needed for rebuilding the array after pressing enter is not noticeable for several million lines. The more challenging part of a text editor is making sure you only render what the user sees.

And the most challenging part is making a text editor that actually works well from a usability perspective. Which has almost nothing to do with data structures and optimization. I've used dozens of text editors. I have never once thought "man, that thing is slow". But I have thought "man, that thing is a bug-ridden, unintuitive piece of garbage" many, many times.

Try re-indenting a large xml file, or something else that will result in a very large number of small deletions and insertions throughout a file. Even on a modern computer the underlying data structures will make the difference between something near instantaneous and the user giving up in despair after a few minutes. A simple array does not cut it.

Re: Challenging projects every programmer should try (2019)

#225

Earlier quoted context omitted.

This is also the reason a computer with 4GB of RAM can't run Gmail and Spotify at the same time.

> This is also the reason a computer with 4GB of RAM can't run Gmail and Spotify at the same time. That’s demands for faster delivery of software and ridiculous demands on user experience. Does looking down on higher level devs make you feel superior or something like that?

> That’s demands for faster delivery of software and ridiculous demands on user experience.

Absolutely not. It's about bloat. Many times people "just want to code" or eschew optimizing repeating the mantra that "premature optimization is the root of all evil" that you often end up with bloated software.

Re: Challenging projects every programmer should try (2019)

#226

Earlier quoted context omitted.

I guess it all depends on your definition of low-level. High-level can also be low-level, just with different building blocks, if the building blocks are based on well-specified abstractions. I am actually currently writing a novel text editor, and I can guarantee you, my requirements mean that an AI cannot help me with that directly, because the underlying mechanisms I need don't exist yet. The AI is still helpful t…

Existing libraries for writing CRUD apps are anything but crap. If we can’t create special libraries that work well for common tasks then as a species we are too dumb.

Which ones are your favourite libraries, let's say for a TypeScript only code base?

Re: Challenging projects every programmer should try (2019)

#227
post #139

Earlier quoted context omitted.

Most of the time, big O is not relevant if you're not writing new algorithm. For the usual CRUD app? Not so much. Heck even for more involved work, you will not touch them because your solution will be called or will call some external tools. The good news is that, while still valuable, you won't have to lose time creating a new broken wheel. The bad news is that this part of CompSci is now mostly fundamental researc…

This is just wrong. Understanding the difference between O(1), O(n) etc is essential for literally everyone who writes code. Every single programmer is better with this understanding than without it. You should know the complexity of the code you write - and most of the time that doesn't even require actively thinking about it. If you know the basics of complexity analysis it's just intuitive.

> Understanding the difference between O(1), O(n) etc is essential for literally everyone who writes code.

No it isn’t.

It’s a great thing to learn and understand, and essential for designing and maintaining data-intensive systems, but your statement simply isn’t true.

Re: Challenging projects every programmer should try (2019)

#228
post #216

Earlier quoted context omitted.

If you don't want to learn you chose the wrong profession.

To expand, the software industry moves fast, and you have to keep learning to stay afloat, or risk stagnating and ending your career early. look at where software was at 5 or 10 or even 20 years ago. There was no react and no rust 20 years ago, nor was there even git! Whatever you know now is going to be out of date in a matter of years. good luck getting a job if that's all you ever want to learn.

Conversely, 10 years ago we also had Grunt, Gulp, etc, which were poor implementations of build systems we had ~40 years ago.

It’s not all progress.

Re: Challenging projects every programmer should try (2019)

#229
post #183

Earlier quoted context omitted.

I enjoy reading your discussion and just wanted to add that some people write a big scale software from scratch nowadays - for instance Marginalia for web search and Andreas Kling and team for operating system and web browser

Marginalia, which I'm a big fan of, is not "written from scratch" (it would be stupid to do so). Check the project on GitHub, it has lots of third-party dependencies.

I definitely lean more toward NIH than what's conventionally considered wise, but most of the time it's not NIH for the sake of NIH.

I do pull a lot of libraries, but an enormous amount of what the search engine does is very much built from scratch. The libraries generally deal with parsing common formats, compression, serialization, and various service glue like dependency injection. I think the number of explicit dependencies is a bit inflated by the choice to not use a framework like springboot, which pulls many of the same (or equivalent ones) implicitly.

What makes the search engine a search engine, the indexing software (all the way down to database primitives like btrees etc.), a large chunk of the language processing, and so forth; that's all bespoke. I think it needs to be. A lot of existing code just doesn't scale, or has too many customizations that would add unnecessary glue and complexity to my own code.

I'm going to echo SerenityOS Andreas and suggest that it's a skill like any other. If you shy away from building custom solutions to hard problems, you will never be good at it; and it will become a self-fulfilling prophecy that these NIH solutions are too hard to build.

At the same time, there's a time and a place and you should indeed be judicious as to when to roll your own solutions, but maybe that time and place is exactly in a hobby project like the ones suggested in this thread (and is how my search engine started out; a place to dick around with difficult problems).

I'd also add that being able to tackle problems yourself, rather than needing a library to do all the heavy lifting at all times, is a great enabler. Sometimes there is no adequate library, but that doesn't mean the conclusion has to be "welp, I guess we can't do that yet..."

Re: Challenging projects every programmer should try (2019)

#230
post #24

While writing a text editor, a compiler, an operating system, or a raytracer might make you a better programmer, it won't make you a better software engineer. In fact, it might make you worse at software engineering, because it embodies the disastrous "Not Invented Here" doctrine. Hackers like to obsess about Big-O, data structures, HoTT, and other high-theory stuff, yet the following skills, essential for software e…

> Identifying high-quality libraries and frameworks that meet your project needs

This is a really important skill that I find difficult and frustrating. Does anyone have good advice or resources?

Post reply on HN