13 ms·
Challenging projects every programmer should try (2019)
- codeTired 3y agoI wish every dev would try projects and things completely unrelated to computers. I enjoy being outside. These headlines “projects every dev should try” really annoy me. I try to put in enough effort at work, and that’s tough. But I have been messing with computers for over 20 years now.
- csdvrx 3y ago> I enjoy being outside. I don't. It's cold outside!
- codeTired 3y agoCaribbean is nice this time of year.
- deleted 3y ago[deleted]
- oakejp12 3y agoI just do both.
- photonbeam 3y agoI think it’s important that those who want a 9-5-only are able to get it, and those who want to make it their calling in life are also able to have that
- abhinavstarts 3y agoCan you please elaborate what do you mean by " completely unrelated to computers" ?
- soniczentropy 3y agoWoodworking, blacksmithing, gardening, etc Things that don't take computers to create
- brcmthrowaway 3y ago*makig music
- brcmthrowaway 3y agoAgreed. This site selects for people who have made computers their entire life. Consider this an unsolicited reminder to touch grass.
- johnnyanmac 3y ago>This site selects for people who have made computers their entire life isn't it the other way around? The site allows anyone to post on nearly any topic, but the longest standing audience veers tech. there still is quite a few topics on medicine, transportation, economics, and politics as well.
- wiseowise 3y ago> Consider this an unsolicited reminder to touch grass. Do you find yourself personally attacked by someone doing something that you don’t enjoy? Or is the notion of them having fun AND improving their direct skill?
- johnnyanmac 3y agoWe're on Hacker News. Do you go to a fitness community and say "I wish every gym bro would put down a dumbell and pick up a book?" But if you're curious, I hike, am learning Japanese, and want to eventually clean up and pick back up my saxophone once I can get the money to get it fixed. Tech is a big but not the only part of my life.
- ohdannyboy 3y agoA strange sentiment for someone who's wasting time heckling articles on HN. Of course nobody said don't go outside or pursue non tech interests.
- Underphil 3y agoI don't really understand how this comment relates to anyone but you. Nerding on a computer and doing outdoor things are not mutually exclusive. They may be for you, but that's... well... you.
- exe34 3y agoYou could always pull a Wolfram [1]. [1] https://content.wolfram.com/sites/43/2019/02/07-popcorn-rig1.png https://content.wolfram.com/sites/43/2019/02/07-popcorn-rig1...
- MBCook 3y agoI’m surprised an emulator (especially Game Boy) is considered harder than a little operating system. I guess that would make sense if you’re not familiar with ASM but an OS will force you to learn that too.
- bombcar 3y agoYou can make a surprisingly usable OS with (relative) ease - because you can control all the features you choose to support (or not). An emulator already has a "spec" you have to operate to.
- MBCook 3y agoI guess you could do something ultra-simple (no loadable programs or me port allocation for example) but that doesn’t feel like an OS to me. You can sort of do that with an emulator too. For example on the GB you could do just the CPU/memory at first, skipping some rare/tough/quirky ones. Graphics aren’t that bad, you can avoid emulating some bugs/ultra-tight timing. Controls are quite easy. Honestly none of it is that tough as long as you’ve skip sound. Sound is the worst part, and what’s next on my plan for my Swift based emulator. Of course if you wanted to keep going you could add on color Game Boy support, Game Boy advanced support, cheat codes, save states, stuff like that. It’s turned in to a pretty great little project.
- grishka 3y agoA GameBoy emulator has a lot of edge cases to cover. Yes, it's straightforward to get most games running in a playable state, but there are several games (Prehistorik Man) and demos that rely on precise timing of the PPU relative to the CPU and those are notoriously hard to get right. Here's the emulator I made not so long ago: https://github.com/grishka/miscellaneous/tree/master/GBEmulator https://github.com/grishka/miscellaneous/tree/master/GBEmula...
- qingcharles 3y agoHaving checked off most of the list, I would agree the Game Boy emulator is far easier than the OS. I guess with the emulator it depends how much you want to do. You'd be foolish to write a console emulator and not import someone else's CPU code. When I wrote a Game Gear emulator 26 years ago I used off-the-shelf CPU code and just mapped all the in/out and did the graphics bits. Took me and a friend a single evening to get it happily playing games. And OS is harder. Well, it was last time I wrote one, again about 26 or 27 years ago. Getting something to boot at all was tricky. I used this book as my main source of inspiration: https://www.amazon.com/Developing-32-Bit-Operating-System-Cd-Rom/dp/0672306557 https://www.amazon.com/Developing-32-Bit-Operating-System-Cd...
- sqs 3y agoAwesome list. A few more I’d add: - search engine - web crawler
- gregjor 3y agoGreat, have fun experimenting and learning. Just please don't release your hobby projects as innovations or npm modules.
- wiseowise 3y agoWhy?
- adamnemecek 3y agoI will also add a CAS, computer algebra system to the list.
- ThrowawayR2 3y agoI've never seen an explanation of Gröbner bases that's accessible enough to the average non-mathematician developer to make that practical. Any pointers?
- adamnemecek 3y ago"Modern Computer Algebra" by Joachim von zur Gathen, Jürgen Gerhard is decent.
- kristianpaul 3y agoThere should be also, implement a Net Cat clone
- jaggederest 3y agoI think a little toy raytracer is another great thing to try out. Just something that outputs bitmap graphics of spheres and does diffuse and specular reflection, couple light sources. Should be a relatively self-limited project if you don't go too crazy with it.
- azhenley 3y agoThat is in the sequel! “More challenging projects every programmer should try” https://austinhenley.com/blog/morechallengingprojects.html https://austinhenley.com/blog/morechallengingprojects.html
- nine_k 3y agoHey, putting a ray tracer and a web browser in the same category of "more challenging projects" seems a bit weird. A ray tracer is a weekend project. A web browser is a multiple man-years project, unless you use a third-party HTML+CSS engine and a third-party JS engine.
- stevage 3y agoTheir definition of web browser is basically the UI and renderer for a text based browser.
- azhenley 3y agoA fully featured, commercial ray tracer takes many years, much like a fully featured, commercial web browser.
- nine_k 3y agoMy point is that a barebones ray tracer (spheres, planes, metal vs plastic) is much, much simpler than a barebones web browser (a minimal HTML parser + a minimal CSS parser and cascading + a minimal JS implementation + a miimal layout engine + a minimal renderer). A text-only browser without scripting support, like lynx, could be a more reasonable project, but still larger than a basic ray tracer, or even a ray tracer + a basic material system.
- kazinator 3y agoIf 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.
- deleted 3y ago[deleted]
- Tomis02 3y agoIt'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.
- wkjagt 3y agoNot 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.
- mvdtnz 3y agoAt no point does the author say or even imply that you need the factory pattern to implement Space Invaders. Are we reading a different article?
- Flux159 3y agoFor a more UI / Web based slant, I would recommend these (beyond a Spreadsheet - which is incredibly helpful for understanding data flow systems): * Simple video game using Unity or Unreal (understanding perf limitations in a game where 30-60 fps is critical helps make performant interfaces elsewhere - even on Web) * A simple Javascript framework similar to React (again, will help understand data flow & handling events) * An http library wrapper around XMLHTTPRequest (fetch exists now, but understanding how to send & read HTTP requests from scratch will help in debugging any problems down the line like CORS issues, OPTIONS requests, etc.).
- kragen 3y agomaybe godot would be a better alternative to unity and unreal for this? because, quite aside from not having to wallow in proprietary licensing, you can find out what's going on
- p-e-w 3y agoWhile 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 engineering, are almost never discussed and even more rarely practiced: - Deciding what to write yourself and what to take from a library - Identifying high-quality libraries and frameworks that meet your project needs - Deciding where optimization is worth the effort and where it is not - Writing code that will still be readable to you (and others) a few years from now - Thinking about the project as a large-scale, complex system with software and non-software dependencies In that spirit, I offer the following alternative challenge: Create a web search engine. Don't bother with string matching algorithms etc., others have already done that for you. "Just" make a search engine (and crawler) that can actually work, even if it only supports a subset of the web and a single concurrent user at the beginning.
- whateveracct 3y ago[flagged]
- deleted 3y ago[deleted]
- p-e-w 3y agoI strongly disagree. Software engineering is simply the next higher abstraction level above programming. Just like programming is the level of abstraction above writing machine code, and writing machine code is the level above hardware manipulation. Almost all "programming" problems have been solved. Today's software is laughably inefficient not because we need better implementations of data structures, but because putting all those existing pieces together properly is a neglected discipline. The best place to see this is in Machine Learning. The vast majority of ML/AI software that is published (which often implements revolutionary techniques!) is of incredibly poor quality from a software engineering standpoint. As a result, practical AI applications are orders of magnitude slower than they could be.
- dmitrygr 3y agoThose are all good easy projects to do. Good intermediate-level follow-ons would be a JIT binary translator from any architecture to any other and expanding that simple OS to support SMP scheduling.
- umvi 3y agoFor a fun challenge, implement space invaders in Verilog (i.e. purely in hardware)
- MBCook 3y agoHow would you suggest going about the display? Driving an LCD or generating an NTSC/PAL signal? Or maybe a giant array of LEDs? Is there a good tool to simulate Verilog so you can test without hardware?
- programjames 3y agoYou can hook it up to a monitor and stream the graphics over HDMI. And yes, there are ways to simulate Verilog
- umvi 3y agoWhen I did it, I drove VGA
- CatchSwitch 3y agoFun fact: The original Pong had no CPU and had all the logic built into the hardware
- cardiffspaceman 3y agoIronically, some EEs called that design paradigm “random logic”.
- omgtehlion 3y agoCouple of years ago I implemented a snake game in 74-series logic ICs, and 8x8 led indicator, it was fun )
- BeefySwain 3y agoIf you would like to contribute to a Python Text Editor / IDE, I would suggest https://github.com/Akuli/porcupine https://github.com/Akuli/porcupine It has a great (but very small) community and the maintainer is phenomenal as well.
- z3phyr 3y agoI would really love to try my hands on something much more physical, like a robot; or a drone with autopilot; maybe accurate simulation of flight dynamics of a spaceplane with programmable GNC parameters? I have a copy of "Fundamentals of Astrodynamics" by Bate, Mueller et al and I would love to do something with it this holiday season. I say simulation because all the rest of the stuff seems to cost a lot. I am really interested in the GNC aspect of robots, and would love some good pointers on the topic!
- krallja 3y agohttps://ksp-kos.github.io/KOS/ https://ksp-kos.github.io/KOS/ Kerbal Space Program might not simulate aerodynamics quite to the realism level you prefer, but a lot of people seem to enjoy writing GNC software for it.
- sowbug 3y agoI bet a self-balancing two-wheeled robot would be a fun (and relatively safe) project. I mean a Segway-like thing that can just stand in one place without falling over or yeeting itself off the table. You'd need a microcontroller, an IMU, a stepper motor controller, a motor, some LEGO wheels, and maybe a block of wood. I haven't tried this, so my guesses are probably way off.
- diracs_stache 3y agoSounds like a good project to me (we did this for a couple of labs in an undergraduate [sophomore maybe junior year] control systems class). The "inverted pendulum" problem and its subsequent derivations should be a good model for this. When the object is nearly upright (or at small angles from the vertical axis) a nice linear control loop should suffice but if you leave that region the control solution becomes more difficult (would make a good target for improvement after initially getting it going).
- daemonologist 3y agoI feel the same way - almost all my personal projects have a hardware component. After spending all day on software I very much appreciate working towards a physical object.
- MichaelNolan 3y agoI would add in a security or network related project. Overflow attack, (sql) injection attack, and maybe something like using wireshark to see what a http request actually looks like. I took two capture the flag classes which changed how I look at some of my day to day dev work.
- cvhashim04 3y agoInteresting, I will look into this for learning, thanks for the inspiration
- carom 3y agopwn.college
- anjanb 3y ago"I took two capture the flag classes" Can you share links for the same ?
- MichaelNolan 3y agoThe two I took were a part of my masters program, so they aren’t publicly available. But there are tons of Capture the Flag (CTF) resources. https://picoctf.org/ https://picoctf.org/ Is a good one for beginners, and you can find more from this list - https://old.reddit.com/r/securityCTF/comments/ewpdt8/top_10_ctf_capture_the_flag_websites/ https://old.reddit.com/r/securityCTF/comments/ewpdt8/top_10_...
- whazor 3y agoA 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.
- p-e-w 3y agoAnd 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.
- Flam 3y agoYou must not have used Eclipse back in the day
- steve_taylor 3y agoor Atom
- PH95VuimJjqBqy 3y agooh man, this one hurts. the original Eclipse was so godawful slow, this was back in the days where you would install Textpad after installing Java because it would pick up your classpath during installation and configure it for you. Java 1.4 I think.
- wiseowise 3y ago> I have never once thought "man, that thing is slow". You’re either lying or incapable to detect typing latency. Try typing while CLion indexes stuff in background or open couple hundred thousand line file in VS Code with Vim plugin and let me know how it goes.
- Waterluvian 3y agoDoing some 2D game dev without an engine was the most humbling experience that showed me just how ridiculously fast computers have become. You do things that you swear are far too slow to work, and yet it works even on a Game Boy because it’ll do a million operations in a second and a million is apparently a big number. “Wait… so I’m looking up and drawing every sprite every time? There’s no clever diffing happening to know which ones to change? There’s no second buffer to reference the previous frame and steal work from?!” And then you find the much more complex games that do start using these tricks and it’s ridiculous.
- johnnyanmac 3y agowell, there ARE some very interesting tricks back in the old days on both the application and hardware side to help out with these exact problems (for one thing, this is exactly how a SpriteAtlas as a data structure is utilized. Why waste time uploading a dozen sprites that usually render in a predictable way when you can upload one big image and sample parts of the image?). But in terms of today, yes. You can certainly brute force render 99% of anything from 15+ years ago on modest commercial hardware (i.e. not even gaming PCs) by drawing and re-drawing a scene.
- RaftPeople 3y agoI got my start doing 2D games on the TRS80 color computer and it really gave me a good foundational understanding of computers. Because it was just bare hardware and assembly, you had to do everything manually, graphics, sound, input, memory mgmt, etc. I think an ideal intro for programming would be if there was an environment where a new programmer could handle all of these things to create a 2D game, but in a simplified way, so they could get the idea without having too much excess baggage just to make it work.
- Sparkyte 3y agoWriting a tool that can do large template conversions are particularly fun. Like handling Jinja into markdown. You can use this for future projects to build out documents without relying on too much effort if the documentation for things you work on follows a formula.
- anta40 3y ago+1 for mini operating system. Us, application developers, rely on many OS features: memory management, filesystem, etc. I'm sure eventually we'll ask "how such things are done behind the scene?" That's why I tinker with xv6 (https://github.com/mit-pdos/xv6-public https://github.com/mit-pdos/xv6-public) during sparetime. Learning various process scheduling algorithms from textbook is a thing. Implementing it is another thing. I learn a lot. And it's definitely fun, even though there's almost zero chance the knowledge gained is relevant for my job (I'm a mobile app dev).
- dang 3y agoDiscussed at the time: Challenging projects every programmer should try - https://news.ycombinator.com/item?id=21790779 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 https://news.ycombinator.com/item?id=25489879 - Dec 2020 (223 comments)
- narag 3y agoThe external link for the second story 404's.
- underdeserver 3y agohttps://archive.is/3Nbu8 https://archive.is/3Nbu8
- azhenley 3y agohttps://austinhenley.com/blog/morechallengingprojects.html https://austinhenley.com/blog/morechallengingprojects.html
- deleted 3y ago[deleted]
- DeathArrow 3y ago>So whenever I don't know what to build or I want to learn a new programming language or framework While the mentioned have some merits if you learn how to program, doing them once might be enough. Not sure how implementing a text editor the nth time will help you learn language X. If I am learning a new language, I try to implement what interests me at that time, from small to big. It might be a small game, it might be an AI algorithm, it might be an authentication system, it might be an ORM. Doing thing that I like or need helps. So unless you fancy text editors, I wouldn't churn one after another.
- petabyt 3y agoWhen I was 17 I gave myself the challenge of making a profitable and useful app. The discipline and real market skills I learned made the 6 month development processes worth it, even though the app ended up being scrapped.
- deadbabe 3y agoTry coding a massive multiplayer game if you really want to send shivers down a spine. From scratch of course.
- kylegalbraith 3y agoTotal long shot. But does anyone have any good side projects that would center around simulating fluid dynamics? I’ve always been interested in aerodynamics and I’ve wanted to see if there is a way to learn more about it with my programming skills.
- knutzui 3y agoSebastian Lague recently did a video on simulating fluids, which may be interesting. As always, he takes a "from scratch" approach to it. https://youtu.be/rSKMYc1CQHE?si=pXdsHlQSCpw8nY8m https://youtu.be/rSKMYc1CQHE?si=pXdsHlQSCpw8nY8m The GitHub repository also contains links to some of the research papers used to implement the simulation. https://github.com/SebLague/Fluid-Sim https://github.com/SebLague/Fluid-Sim
- vedosity 3y agoI recently went this route. I didn’t want to set up or use Unity so I wrote my own 2D fluid simulator based on some of the same papers using Metal compute shaders (though I’d love to try again using webgpu). Sebastian’s video is great and the implementation is good. But this was a great (and fun) opportunity to look for ways to improve on it. For starters, the way he’s doing the spatial lookup has poor cache performance, each neighbor lookup is another scattered read. Instead of rearranging an array of indices when doing the sort, just rearrange the particle values themselves. That way you're doing sequential reads for each grid cell you look for neighbors in, instead of a series of scattered reads. The performance improvement I got was about 2x, which was pretty impressive for such a simple change. The sorting algorithm used isn’t the fastest, counting sort had much better performance for me and was simpler for me to conceptualize. It involves doing a prefix sum though, which is easy to do sequentially on the CPU but more of a challenge if you want to try keeping it on the GPU. "Fast Fixed-Radius Nearest Neighbors: Interactive Million-Particle Fluids", by Hoetzlein et al [0]. Or, if you want to keep using bitonic sort, you can take advantage of threadgroup memory to act as a sort of workspace during bitonic merge steps that are working on small enough chunks of memory. The threadgroup memory is located on the GPU die, so it has better read/write performance. I ended up converting his pure SPH implementation to use PBF ("Position Based Fluids", Macklin et al, [1]), which is still SPH-based but maintains constant density using a density constraint solver instead of a pressure force. It seems to squeeze more stability out of each “iteration” (for SPH that’s breaking up a single frame into multiple substeps, but with PBF you can also run more iterations of the constraint solver). It’s also a whole lot less “bouncy”. One note: I had to multiply the position updates by a stiffness factor (about 0.1 in my case) to get stability, the paper doesn’t talk about this so maybe I’m doing something wrong. The PBF paper talks about doing vorticity confinement. It’s implemented exactly as stated in the paper but I struggled for a bit to realize I could still do this in 2D. You just have to recognize that while the first cross product produces the signed magnitude of a vector pointing out of the screen, the second cross product will produce a 2D vector in the same plane as the screen. So there’s no funny business in 2D like I had originally thought. Though, you can skip vorticity confinement, the changes aren't very significant. There’s a better (maybe a bit more expensive) method of doing surface tension/avoiding particle clustering. It behaves a lot more like fluids in real life do and avoids the “tendril-y” behavior he mentions in the video. "Versatile surface tension and adhesion for SPH fluids" by Akinci et al [2]. One of the comments on Sebastian's video mentions that doing density kernel corrections using Shepard interpolation should improve the fluid surface. I searched and found this method in a bunch of papers, including "Consistent Shepard Interpolation for SPH-Based Fluid Animation" by Reinhardt et al, [3] (I never implemented the full solution that paper proposes, though). There's kernel corrections, and then there's kernel gradient corrections, which I never got working. With the kernel corrections alone, the surface of the fluid seems to "bunch up" less when it moves, and it was pretty simple to implement. Otherwise, the surface looks a bit like a slinky or crinkling paper with particles being pushed out from the surface boundary. I found [0] and [1] on my own but I found [2] through a thesis, "Real-time Interactive Simulation of Diverse Particle-Based Fluids" by Niall Tessier-Lavigne [4]. I also use the 2nd order integration step formula from that paper. It has some other excellent ideas that are worth trying. Many years ago I used a paper (that is in fact one referenced by Sebastian’s video) and some C sample code I found to write an SPH simulator in OpenCL. I had been wanting to write one again but this time get a real understanding of the underlying mathematics now that I have some more tools under my belt. I owe it to Sebastian that I finally started on my implementation and I understand SPH a lot more now. [0]: https://on-demand.gputechconf.com/gtc/2014/presentations/S4117-fast-fixed-radius-nearest-neighbor-gpu.pdf https://on-demand.gputechconf.com/gtc/2014/presentations/S41... [1]: https://mmacklin.com/pbf_sig_preprint.pdf https://mmacklin.com/pbf_sig_preprint.pdf [2]: https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=32d9ff4469f61473d37c27cf93508014a7fb93af https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&d... [3]: https://www.hdm-stuttgart.de/hochschule/forschung/forschungsschwerpunkte/digital_media/publikationen/Consist_Sh_Mat/Consistent_Shepard.pdf https://www.hdm-stuttgart.de/hochschule/forschung/forschungs... [4]: https://project-archive.inf.ed.ac.uk/ug4/20181074/ug4_proj.pdf https://project-archive.inf.ed.ac.uk/ug4/20181074/ug4_proj.p...
- MaxMoney 3y ago[dead]
- paganel 3y agoWhat’s with many programmers’ obsession with writing their own text editors? In part a rhetorical question, but it still boggles me. Not that many people that are obsessed with manufacturing their own hammers and nails, for example, hence why I’m asking.
- cryogenicfire 3y agoWell you would normally use hammers and nails for woodworking but you wouldn't be able to use woodworking to make hammers and nails... But I guess with a text editor it's a weird recursive thing where the programming tool is itself a programming project. I think people just do it for fun and because they can. You'll probably never make something you can productionize but maybe you will learn some cool things along the way.
- cinntaile 3y agoThe same reason as all the other projects mentioned, because it teaches you many useful concepts that show up elsewhere when writing code. A carpenter likely won't learn much by manufacturing their own hammer that they can apply in their own workflow, a blacksmith on the other hand might.
- gushogg-blake 3y agoIt's a nice self-contained project that's relatively easy to make fast progress on, while also being challenging. Plus it's something that programmers have to use every day so we're bound to have pain points with existing options.
- beretguy 3y agoYeah, I don’t have time for any of this.
- deleted 3y ago[deleted]
- 0raymond0 3y agoThank you for this idea, I was inspired by it years ago and wrote a delay queue using Golang. But it is dependent on the Redis, recently I want to remove the Redis and write a Key-value store by myself. Welcome to contribute your code to it: https://github.com/raymondmars/go-delayqueue https://github.com/raymondmars/go-delayqueue
- slmjkdbtl 3y agosoftware renderer programing language
- narag 3y agoInteresting list, I guess it depends on your personal inclinations and circumstances, but if you're looking for ideas, it's a good start. I won't go to far as to tell what every programmer should try, just what were my personal choices. Using the Sinclair ZX Spectrum: - Music staff editor and tracker (very crude) - 2D game - Space Invaders (only one invader) That computer wasn't even mine. With my first computer (386): - Huffman compressor - B-Tree indexes (outperformed DBase/Clipper) - OOP form generator - Several DOS background programs, one of them was later used by a big company for installations Years later: - Email checker for dial-up - Manual parser for syntax highlighting - Spreadsheet (something like that, I'm on it now) Sure I forget someting.
- bkovacic 3y agoIt's a great list. Would be a good to keep it as some live list so we can help evolve it over time. I'd add two ideas: Build lightweight memcached - it requires mixture of basic algorithms as well as good system design practices - it's a "simple" problem, but requires to think well from multiple angles - invalidation, concurrency, memory management... Build your own docker - it's not as complex as it might sound - gives opportunity to understand basics of OS programming, which most engineers nowadays don't really use in day to day jobs
- brlebtag 3y agoHe forgot to mention to build a small database (DBMS). For me, the big 3 projects are: 1. computer language (I already did), 2. Small operation system and 3. a small database (DBMS).
- gushogg-blake 3y agoOn the text editor one: > The biggest challenge is figuring out how to store the text document in memory. My first thought was to use an array, but that has horrible performance if the user inserts text anywhere other than the end of the document. I guess this is only an issue in low level languages, as I just used a JavaScript string and I don't think it's been a perf issue in 2+ years using my editor full time. Plenty of other things have been, of course - rendering long horizontal lines comes to mind, as my approach to optimisation assumed rendering a single line would be cheap and expanding the logic to render partial lines would add another whole dimension of complexity. (By "long" I mean an entire minified file, for example.)
- deleted 3y ago[deleted]
- ryloric 3y agoIt's one of those things that show up at very large file sizes isn't it? Most programmers work with tiny text files 99% of the time.
- Sharlin 3y agoIf everything else is even less efficient than string management, then string management does not turn up as a bottleneck.
- _gabe_ 3y agoAnd here I was thinking the author must have been using a higher level language. I remembered reading this blog[0] where the author stated that the worst case scenario for an insertion at the beginning of a 2mb file only took 2ms on an old laptop while using an array as the data structure. I believe the author was using Zig here. [0]: https://www.scattered-thoughts.net/writing/focus-text/ https://www.scattered-thoughts.net/writing/focus-text/
- orenlindsey 3y agoAll of these are fairly easy to make in languages like Scratch but hard to make in lower-level ones. I don't know enough about coding theory and such to understand why, though.
- nso95 3y agoThe only one of these that Scratch might make easier is the Space Invaders game
- cardiffspaceman 3y agoI feel the profession has layers. I had a dream in which I had a seat next to Bill Gates on a commercial flight (bear with me!). I asked him how he pursued software development now that he was running the world’s largest software company, and he said, by running the world’s largest software company. Of course that wasn’t necessarily his actual opinion, more like my own brain laundering my own opinion.
- nabbed 3y agoAnother interesting and challenging project: design and implement a file system. I only assume it is interesting and challenging, having not done it myself.