6 ms·
Challenging software projects some programmers should try
- poulpy123 2y agoNot directly related but the author writes: > However, it’s important to note that most of these ideas may not be relevant to today’s job market Then advise to clone the frontend/backend of well known site. What other project HN would advise to do that could increase attractability for the job market, especially in python (the language I know) or C# (the language I would like to learn). I'm not looking for a job currently or in the foreseeable future, but I'm not against having a step in advance in case things go wrong
- eeue56 2y agoWhen I taught web development at university, we made sure to focus on hireable skills. Back then, that involved making a website based on a Photoshop export. That proved to be very successful, and we hired a bunch of those students over the summer since they had skills we could actually use. That said, I think a lot of theoretical practice tasks are good for stretching knowledge and skills, so they have value too.
- avandekleut 2y agoLearn typescript. You can do backend and frontend (and even IaC) in typescript. First-class VS code support and sprawling toolchain support.
- sevagh 2y ago>What other project HN would advise to do that could increase attractability for the job market Leetcode. Anything on your public portfolio that "opens a door" usually only opens a door to being whiteboard interviewed.
- deaddodo 2y agoI got to the "lesser known data structures" section and was already questioning the rest of the article: > B-Tree > Circular Buffer Are either of these "lesser known"? Maybe if all you ever program in is higher-level languages. B-trees are damn near ubiquitous in OSdev, file systems, databases, or pretty much any indexing system. Ringbuffers are a hard requirement for pretty much any modern hardware interfacing. All Nvidia, AMD, etc graphics commands are issued via constructed ringbuffers. They're also pretty common in network programming, editor/IDE development, gamedev, and certainly OSdev (outside of drivers). > Cuckoo Hash Table, Open-Addressing Hash Tables These have the opposite status to the previous ones. They're not ubiquitous because the alternatives are better. Cuckoo Hash Tables exist almost singularly as a teaching paradigm about what not to do, because it's overly complex for little benefit. Open-Addressing Hash Tables are avoided (but definitely in use out there) because they require a very good hashing algorithm to avoid clustering+collisions and a large static address space. That all being said, it picks up and the later sections are much better.
- williamcotton 2y agoB-trees are damn near ubiquitous in OSdev, file systems, databases, or pretty much any indexing system. Most software developers are not working in any of these domains!
- joshuamorton 2y agoI believe most of the most efficient hash table impls in cpp use open addressing (swisstables and similar). The ones in std:: don't mostly because of pointer stability.
- deaddodo 2y agoThus the: > (but definitely in use out there) Additionally, I didn't say they were less efficient. I said they require more logical complexity and upfront storage to be efficient.
- fynfhd 2y ago> Are either of these "lesser known"? Are any of these? It's odd, I have done a number of the things listed throughout my development as a developer, and for many, I would attribute a great deal of my knowledge to working on them, but, in each instance I came to those projects by my own necessity or transient interest. Something about seeing these all lazily listed here together frustrates me, and leaves me wanting to just say to anyone who questions their interest in programming because they are unable to see themself as someone who does all or even any of the things listed, "forget that, follow your passion".
- poulsbohemian 2y agoWe did many of these in the course of a CS degree 25 years ago, IE: scientific calculator, a server, interpreter, a VM… I would expect people working in industry who have completed a degree have done most of this list in the course of their studies?
- devwastaken 2y agoMost universities have defaulted to standardized materials to one of the big publishers and have largely removed most of the difficult parts because uni's want students to have a "broad knowledge" of other subjects as well as large amounts of faculty turnover. Often with the intent that those students complete politically motivated coursework, some is now a requirement to graduate. These project types are generic and avoided because students will just copy+paste others work. It provides no signal to the quality of students without digging into work and figuring out if they actually built it. Seemingly nobody has time for that, it's easier to pawn it on Title IX leetcode and nepotism because there isn't any shortage of candidates.
- eddd-ddde 2y agoMeh, I'm almost graduating from my CS degree. It was... underwhelming... to say the least. We did have data structures and algorithms at some point, also learnt a bit about assembly and a /tiny/ bit of processor architecture. But ultimately, my courses felt, like so little for how much I paid and the supposed "level" of my university. The last 4 semesters or so could be summarised as, role playing agile development while making awful websites for awful companies (we work with real companies which is kinda cool except it sucks so much). I don't know if it's just my uni, or my country, or my campus, or whatever, but I /wish/ I had the fortune of getting to actually build this stuff for class, instead of boring web development every single day.
- lispisok 2y agoCS programs have been moving away from computer science education and moving towards teaching how to make webapps because students are more interested in resume development to get a job than getting an education and universities want their tuition dollars. Given the cost of college and the realities of the job market I cant blame the students either.
- sevagh 2y agoSave your time: work on stuff you _like_, or work on Leetcode for employability. Don't work on things you don't like for employability (unless it's Leetcode).
- slothtrop 2y agoMostly agree, but will say that there doesn't seem to be a silver bullet. Small project weekend stuff doesn't seem to phase employers as they read like dime-a-dozen undergraduate projects, while ambitious projects can require an incredible amount of time and breadth of knowledge, time that someone on the market wants to spend efficiently. Exceptions (for small projects) might be highly sought-after skills (devops/ML/Cloud/security), but you can also get certification in any one of these. Maybe trying different stacks for web counts for something.
- nurettin 2y agoI know a couple of jobless people stuck in the Leetcode tar pit fetish. It is heartbreaking to watch someone struggle so much just to get 5% of the skill they need in a real programming job.
- light_triad 2y agoInstead of cloning well known sites I would talk to people and try to solve their problems. There's a big difference between people telling you they'll use your product and people actually using it. The bar is extremely high since your product has to solve their problem, it has to be better than the alternative, they have to remember to use it (or you have to remind them) etc. You will learn a ton and might produce something useful. Wish I had done that more especially as a student!
- deleted 2y ago[deleted]
- hulitu 2y agoBuild a GUI program with clearly visible and easy to interact with, GUI elements: text input, labels, buttons, menus, scrollbars, visible titlebar. I know: i'm old.
- bosch_mind 2y agoTo add onto this list (unless I missed it), I would recommend interpreter, compiler and assembler. An interpreter is a fun way to learn a new language and can be done creatively and artistically which allows you to exercise the art of programming in expressive ways. Lexing for optimal string manipulation and parsing, AST construction for fun ways of building and creating the grammar and interpretation which can be done any number of ways. Also, it’s not as hard as it seems if compilers in college was your last attempt in this area. - crafting interpreters - writing and interpreter/compiler in Go Both good books on the domain for an amateur compiler writer. For lower level assembler and chip design stuff/logic gates etc. obviously I recommend Nand2Tetris
- throw1234651234 2y agoYea! And for the same amount of effort and difficulty I can recommend a couple as well! - build your own kit car. Maybe start with something easy like a Ford GT with a V8 from a donor Mustang! - build a kit airplane! Make it a jet for a little bit of extra challenge! - make a rotary engine from scratch! Make your own materials! - now a figure 8 propeller piston engine! - create your own chip fab facility! These articles are weird, delusional flexes.
- superb_dev 2y agoAll of these ideas sound really fun
- Bjartr 2y agoAs far as writing an interpreter or compiler are concerned, what you're describing is more like making one for an existing production grade language that's compatible with it's wider ecosystem. These exercises are more like building a rubber band powered toy car. Useless (but not worthless), fun to build (if building things is something you enjoy), and something you can learn fundamentals of the domain from. Also, I wish I could take a swing at any of what you mentioned for as little up front investment in money or space as giving these software exercises a shot, it'd be an incredible learning experience and awesome fun!