TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Ask HN: What projects did you build to get better as a programmer?

60 pointsby debanjan16about 2 years ago
What projects to start building after learning fundamentals of programming to get out of the tutorial and MOOC rabbit hole? It&#x27;s more like taking the training wheels off at some point while learning to ride a bicycle.<p>I know the suggestion is to build what I like. But what if I don&#x27;t have any problem at hand because I don&#x27;t know the space much. What projects can I start with? Things that can operate as standalone projects and can be used.<p>I find most university courses are also limiting in this aspect. They only ask to implement part of the project (only a few functionalities). Maybe I haven&#x27;t looked into many. I am not saying university courses or books are useless. They have their place. They can be very useful to fill in the gaps of our knowledge. But they are not all in all. We have to build tangible concrete things and get things done. They may be small projects. Atleast that&#x27;s what makes a great designer or in general engineer. They make things in their garage or workspace even if they are tiny projects.<p>What type of projects (guided or not) can I build so that I can get an idea of the space and they start getting ideas of my own to build. Along the way I have to read up stuff e.g: unknown datastructures or algorithms to fill in my knowledge bucket.<p>And also I have doubts regarding how far can I go with that rudimentary knowledge of programming? When do I start learning more about other things like systems, algorithms, databases, etc?

35 comments

jleyankabout 2 years ago
In ancient times, one had to do something interesting or perceived as difficult to build credibility. This involved taking something from blank paper to working program. Yeah, the work was usually overly large and inefficient but people who came out of such “approved” projects were considered (new) members of the community. This was totally separate from coursework and grades, of course, as creation was far more important.<p>This was usually a super Star Trek game, or an implementation of Life (which led to a fair number of language wars), or a 4x4x4 tictactoe or chess program. One hacker won his spurs making the best checkers program going. More complex projects were binary file editors, system utilities (magtapes pretending to be DECtapes!) or OS mods. Some were lucky to get to an hacking Mecca - these are the ancient heros. Acceptance could not be purchased, only earned and poseurs were ridiculed.<p>I assume things are similar now, with GitHub replacing card drawers and net based communities replacing f2f. “Because I could” was an amazing goad, particularly when you didn’t know the limitations. Cracking, while useful, wasn’t anywhere near as worthy or honourable. Hackers make neat things. It’s the making not the knowledge itself, and whether the thing is used is a secondary but satisfactory gain.<p>Decades on, I’ve written miles and miles of code, but very little of it was neat. Useful, commercially successful, yeah, but only a few things here and there made me sit back and smile - these things would have passed muster back then. I hope others get to experience such feelings a few times in life.
评论 #35233934 未加载
etermabout 2 years ago
I found the trick was to get a job in software development. That solved the problem of trying to find things to do, other people do that hard work and bring me requirements.<p>They even pay me for it too!<p>I don&#x27;t know what you&#x27;re after, but if your aim is to go into software development as a profession then read on. Otherwise skip the rest.<p>Honestly, if you have the fundamentals down you can probably find an entry level job and learn the rest on the job. No tutorials will prepare you for real experience in software development.<p>Programming is only about 20% of software development in my experience. It&#x27;s a critical 20% that you can&#x27;t do without, but the rest is hard to prepare for and best just to get real experience of.<p>There&#x27;s no point spending forever learning to be the best in the world at that 20% without discovering if you even enjoy the other 80%. There are even far too many who hate that 80% and often will not be scared to share this disdain freely.<p>The trick is to ignore them, fully engage with the whole job and you&#x27;ll quickly out pace them in career development, and you&#x27;ll likely enjoy your job a whole lot more too.
评论 #35242930 未加载
Cody_Cabout 2 years ago
One recommendation I don&#x27;t hear often is build something that will stick with you. Keeping with the apprenticeship&#x2F;tooling idea, I would build something that you will use over time.<p>You will be forced to keep backwards compatibility in mind, you will see what makes a process have friction, you will see odd bugs from a random edge case you will have to fix or discover. Treat yourself as the customer and build a tool you can use to help yourself out.<p>It is almost recursive in building tools to help yourself learn, and using those tools to learn.
评论 #35242325 未加载
whartungabout 2 years ago
I wrote games. Originally in BASIC, for the the common 8 bit machines (PET, TRS-80, Atari). But also (hand assembled) machine language.<p>My early ML adventures were terrible. My early Space Invaders clone was awful. For SI, I couldn’t figure out how to tell one alien from another. So I stuck a different character in the middle of each one. Just dreadful stuff.<p>Moving on to college, I moved from a lowly 8 bit to a multi user mainframe. And from BASIC to FORTRAN. This certainly alters one’s perspective on what a computer means.<p>Nevertheless my friend and I tried our several attempts to write a rogue clone. We wrote that at least 4 separate times, across different mainframes and time share systems. Arguably our most successful was in our second Pascal rewrite (our first stab in Pascal was also dreadful). But we kept running out of resources.<p>Write to your passion. Because when you write to your passion, you focus on making it work. And when you find you can’t make it work, now you can focus on making it better.<p>None of those projects over all those years were ever finished by any stretch of the definition. We were far to busy making stuff up and breaking things.
noudabout 2 years ago
I once build a machine learning library from scratch in rust. No external libraries allowed. It could do linear regression, lasso, and ridge. It also contained some statistical inference features, like p-values, AIC, feature selection. Basically chapter 3 of Hastie [1]. It&#x27;s more difficult than you might think, as you have to figure out how to do efficient matrix manipulations, deal with floating point overflows, multi-threading, unit testing, bench marking, etc.<p>[1] - <a href="https:&#x2F;&#x2F;hastie.su.domains&#x2F;Papers&#x2F;ESLII.pdf" rel="nofollow">https:&#x2F;&#x2F;hastie.su.domains&#x2F;Papers&#x2F;ESLII.pdf</a>
kaveh808about 2 years ago
My journey as a software developer began in the 80&#x27;s at MIT by writing 3D graphics code on a Symbolics Lisp Machine. Some fond memories:<p><a href="https:&#x2F;&#x2F;kaveh808.medium.com&#x2F;late-night-lisp-machine-hacking-d22a0e2d83fa" rel="nofollow">https:&#x2F;&#x2F;kaveh808.medium.com&#x2F;late-night-lisp-machine-hacking-...</a><p>One big difference between then and now was that back then you wrote mainly from scratch and were in charge of most parts of your software, whereas today it is mainly about gluing various toolkits and frameworks together.
评论 #35240221 未加载
strangelove026about 2 years ago
Could build a vue js SPA frontend that dynamically renders a table of things (fake pet food sales?) based on a call to AWS dynamodb.<p>Could use AWS Lambda to implement a server side auth layer.<p>Would get some decent AWS exposure (deploying vuejs with S3 and cloudfront, possible serverless lambda experience plus API Gateway), some nosql experience, would learn the request response lifecycle and how frontends actually work. Could do some terraform to deploy the AWS stuff.<p>Years ago my experience was that I knew AWS and devops stuff. I wanted to do something more substantial with golang, and I wanted to make a frontend for an API I had made (but had never done so before).<p>Starting with a simple idea (a dynamically rendered table) was simplistic enough that it was doable but still complicated enough that I needed to spend a couple hours for a few days after work to get it working. I had a great feeling once it was working and I really ended up learning quite a bit as a result.
评论 #35238473 未加载
brutus1213about 2 years ago
This is an excellent topic and I was hoping to find a set of great ideas here (really love the http server example). I was thinking of the concept of Katas in martial arts. What would be the Katas for programming I wonder.<p>Some thoughts:<p>1) Build your own database. Not a SQL db. Just something that takes records on a cli and enables retrieval. Persist the data. Support better queries&#x2F;<p>2) Maze solver.<p>3) Snake game<p>4) Helper&#x2F;Solver for something like Wordle.<p>5) Chat server (but I like the HTTP server idea. Annoying thing is newer HTTP versions have gotten complicated).<p>I think there are twenty to fifty of these little things we have all done in our career, and either forgotten them or it felt too natural to register. Wish someone compiles a list of such projects some day. It would bring back joy in some of the coder-at-heart folks lives.
评论 #35245444 未加载
JohnFenabout 2 years ago
The projects that made me a better programmer when I was new to the field were all games written for my own amusement.<p>If I had to single out a single project that I think advanced my understanding the most, it would have to be building a computer from scratch and writing the OS and a C compiler for it.
headlineabout 2 years ago
I believe you&#x27;re in the middle of two points, on one end, you don&#x27;t want to write something trivial. On the other, you don&#x27;t want to write something too new or cutting edge, as you&#x27;re solo. Finding great projects to work on somewhere in the middle can be difficult.<p>I&#x27;d suggest that while you&#x27;re finding your feet programming during this time, focus on software engineering, design patterns, and other SWE principles (SOLID for example).<p>As far as project ideas go, it really has to be something that aligns with your interest. I see you&#x27;re aware of the suggestion &quot;to build what (you) like.&quot; Your inexperience in this domain does not preclude you from building software adjacent to your personal hobbies.<p>I&#x27;ll use myself and my own interests for example. I am a fan of the highest level of the US&#x27; legal system, the supreme court. I regularly listen to oral arguments presented before the court, along with keeping up with the SCOTUS via blogs and such. I can check to see if there is any public data available for me to play with, which there is. From there it&#x27;s all about seeing what&#x27;s available for me to use and coming up with a project idea using this resource.<p>I use this example to try and express that &quot;what I like&quot; does not have to pertain the software development discipline itself.<p>What I actually started with was video game modding for games I liked to play, along with Discord compiler, a project that allows folks to compile code on Discord. Both followed my interests pretty closely, both required lots of extracurricular learning.
评论 #35240275 未加载
grepLeighabout 2 years ago
One thing that I&#x27;d suggest is no matter what you build, deploy it <i>for real</i> - don&#x27;t stop after running it locally. Buy a cheap domain for all of your projects, and give each project a subdomain. Put a version of what you build into &quot;production&quot;, so you can get a sense for what it takes to release software and update it.<p>Also, reflect on everything you build and think about what brought you joy. Specific trends ebb and fade, but understanding what you&#x27;re passionate about will allow you to always apply yourself to learning new skills (while also having fun). Enjoy!
daltontabout 2 years ago
I have some basic ideas that I have implemented in multiple languages. I think of them as &quot;Rosetta Stone&quot; projects:<p>- Bowling score - More of an exercise than a project.<p>- Sudoku solver - Also an exercise, but could be more with a UI.<p>- &quot;Setting Sun&quot; tile puzzle with UI. Saw one of these at a Cracker Barrel restaurant (<a href="https:&#x2F;&#x2F;www.siammandalay.com&#x2F;products&#x2F;setting-sun" rel="nofollow">https:&#x2F;&#x2F;www.siammandalay.com&#x2F;products&#x2F;setting-sun</a>)<p>- Wordle with UI - I&#x27;ve only done one in Rust&#x2F;WASM, but might do one in Dart&#x2F;Flutter.
alex-moonabout 2 years ago
My answer to this is different to others, so I&#x27;m not sure how useful it will be, but here goes:<p>When I approach a new creative coding project, it is invariably because I want to learn how to use a specific technology that I have heard of.<p>So, for example, I wanted to build a &quot;real time&quot; stack using RabbitMQ and websockets with Tornado. I also wanted to build a front-end with Backbone. These were all kind of new and cool at the time. So what kind of app would use this tech? How about an app where you can submit a &quot;currently playing&quot; where you are, e.g. in a nightclub or at a concert, and have people within a certain radius get live updates as they are pushed? This was a really fun project and it also gave me an excuse to dive a bit more into PostGIS and nginx than I had in the past.<p>Years later, I wanted to have a go with some of the cool machine vision tools I had been hearing about. I also wanted to have a go at building a front-end with Web Components. So I built an app that would let you build a specification with a nice UI and send it to a worker that would create a video using six ML models working together. This was a really fun project and also gave me an excuse to have a go building a lightweight Python JSON API backend I would later reuse quite a few times.<p>In both cases, the driving force was a perceived need that had arisen from my day job. Specifically, I was aware that there was tech out there that was rumoured to be able to solve problems I had or thought I would soon have, and I wanted to get a handle on what the &quot;unknown unknowns&quot; and &quot;gotchas&quot; were involved.<p>This was also what got me working with VueJS for the first time, a technology that does extraordinarily well at what it says it does, better even than I expected. (I think I built a vanity site for my music work at the time?). Vue became my go-to at my day job for the purposes, so much so that I found myself instigating a rewrite of an existing AngularJS front-end soon before I left the company. I feel very confident their AngularJS code has all been burnt since then.<p>I&#x27;m a Web developer so I don&#x27;t know if this approach translates to other fields of Software Engineering. Web is one of those things where new tools are cropping up and being hyped all the time, and staying abreast of developments in the tech is kind of part of the job.
st4lzabout 2 years ago
&gt; What projects can I start with?<p>It&#x27;s like asking people on the internet what you should eat for dinner or who you should marry. Unless you don&#x27;t learn programming just for the sake of it (assuming that&#x27;s true based on the question you are asking), you either haven&#x27;t learned enough yet to broaden your horizons to get ideas, or don&#x27;t have enough geeky hobbies to put your new skills in motion. Have fun finding out what it is.
ekrayabout 2 years ago
I think <a href="https:&#x2F;&#x2F;csprimer.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;csprimer.com&#x2F;</a> is exactly what you&#x27;re looking for.
_adambabout 2 years ago
The best way to learn is to build something for someone else. When someone else sets the requirements you have to engage in real problem solving and research the best tech to solve the problem. This keeps you from following just the easiest path as well as exposes you too new ideas.<p>You can do this at work, for a local non profit, for your friend&#x27;s weird startup idea, ...
评论 #35235590 未加载
ineedausernameabout 2 years ago
I have a suggestion. Instead of trying to figure out what to build, why don&#x27;t you start reading the source code of what others have built?<p>For example, interested in blockchain and know some Golang? Why not start reading the Ethereum main repo source code and documentation? This is just an example to make a point, but you get the idea.<p>Good luck :)
flappyeagleabout 2 years ago
The 2 projects that I learned the most from:<p>1. A crazy verilog based class at Berkeley (CS150 back in the day). Proably in the lab for at least 4hrs a day for a semester writing code with a 20min compilation time<p>2. Spectacularly failed attempt at building a shared calendar app at a big co for internal use. I was a junior programmer and got assigned huge portions of it with the instruction to make “work like outlook”. Learned a ton. Company got basically nothing of value in the end other than a much improved engineer<p>Theme for both was hugely ambitious project and an absolute ass-ton of reps
kyoobabout 2 years ago
I built automated tests and frameworks. You can get pretty far in a career in test automation while still learning and getting better because people perceive the code as important but the whole company doesn&#x27;t (usually) fall apart if you mess something up in your code.<p>More important, in my experience, is to find someone tough but super knowledgeable to review your code. Try to anticipate what kind of notes you&#x27;ll get if open you a PR with your code as it is, and then fix that stuff before you open the PR. Write a checklist of stuff that keeps getting picked on by better coders than yourself, print out the list, and tape it to your office wall.
GOATS-about 2 years ago
I personally find writing apps for myself to be a fun and practical way to learn. That way you might get introduced to a few libraries you&#x27;ve never used before - and get new codebases to dive into and learn from. I have friends who started programming with writing tools to mod games and IRC&#x2F;Discord bots.<p>I&#x27;ve benefited a lot from the apps I&#x27;ve written to improve my day-to-day life.<p>Just to give you an example: I wrote a tool to sync my uni timetable from the proprietary system they&#x27;re using to my Google Calendar - that way I have all my events in one place and I&#x27;m also notified of classes early enough so I can get to campus in time.
johncoltraneabout 2 years ago
&gt; When do I start learning more about other things like systems, algorithms, databases, etc?<p>At work.
gibb0nabout 2 years ago
I found building my own CMS covered every required aspect of web development
fnordpigletabout 2 years ago
Build an automated trading system. It doesn’t have to make you a fortune. But it should be automated, connect to other services, and risk your own money. This captures a lot of programming - consuming market data, making decisions, checking against risk levels and your stateful position, reconciling local and remote state, state machines, etc. But most importantly it puts your money at risk, so you better get it right. That’s the most important thing to learn in programming.
tiddlesabout 2 years ago
I wrote game engine after game engine with various languages and designs. Somehow I’m still motivated today to rewrite navigation in my 15th engine for the 3rd time.
austin-cheneyabout 2 years ago
Early in my career I built this language aware diff tool that some people used. I learned how to write language parsers and beautifiers for various kinds of languages.
xiaolingxiaoabout 2 years ago
Writing a full CRUD todo app on both web and iOS helped me understand things a lot better. The most important thing is to keep it simple, and by going across platforms you can see the importance of good data representation design.<p>The idea is to start off by making bad decisions, and slowly refactoring your way to good abstraction, this helps you intuit the reason for abstractions.
mcapodiciabout 2 years ago
Redis? <a href="https:&#x2F;&#x2F;build-your-own.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;build-your-own.org&#x2F;</a>
janpotabout 2 years ago
<a href="https:&#x2F;&#x2F;github.com&#x2F;kanaka&#x2F;mal">https:&#x2F;&#x2F;github.com&#x2F;kanaka&#x2F;mal</a>
abhinuvpitaleabout 2 years ago
If you&#x27;re learning a scripting language, building a web scraper is a great way to learn some fundamentals of a language by using the basic data structures, getting the data flow correct and solving regex, parsing and printing issues.<p>Protip: use an IDE and a debugger to turbocharge your lesson!
datavirtueabout 2 years ago
Better in what way? Building things, or learning to tip-toe around your pedantic, histrionic colleagues?
felipellrochaabout 2 years ago
I found things that people told me were too difficult for a singular person to tackle and tackled those.
ipunchghostsabout 2 years ago
Anytime i learn a new language, I write and http server.
partyguyabout 2 years ago
I rebuilt MySpace... and it got quite popular
revskillabout 2 years ago
Build a compiler.
rubenGitabout 2 years ago
gfd