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: How did you become a “good enough” programmer?

21 pointsby optbuildover 2 years ago
By &quot;good enough&quot; programmer I mean someone who can get the job done in a not so messy way i.e. the programmer knows what their code does and how to decompose a problem.<p>To reach the above mentioned stage what did you do? And what kind of mental model helped in achieving this state?

17 comments

topkai22over 2 years ago
Get used to writing your code twice. If you were writing prose, almost any methodology recommends that you revise and edit your first draft, often multiple times. My first pass at an implementation is for me to understand it and solve it. If it’s a throwaway tool, that may be where it stops. If it’s committing to a common repo, I’m probably going to significantly rewrite and enhance the code at least once. If it’s the basis for a new technique&#x2F;sample code, it’s going to be multiple times with feedback.<p>Seek feedback on your code. Fresh eyes provide fresh perspective. You’ll learn a lot about yourself from others commenting on your code.
评论 #34396555 未加载
评论 #34393468 未加载
x86x87over 2 years ago
1. Try to build something. Anything. Start with a problem you have and try to build a solution. It doesn&#x27;t have to be fast, it doesn&#x27;t have to be beautiful, it needs to solve this 1 problem<p>2. Read other code. Get good at reading other code. Develop curiosity around understanding how the code works. Every time you hear about something you don&#x27;t know research it superficially and make a note to try to understand it in depth if it seems important<p>3. Hang out&#x2F;Work with people that are good at this. Seriously. Sometimes a person that understands the subject, a practice, one specific area can ELI5 to you in under 10 minutes saving you literally weeks of struggling to understand. Once you figure out who these people are, watch what they are doing (watch the PRs) and actively seek out opportunities to work with them<p>4. Aim to continuously learn and grow. Be proud of your work but continue to push your limit. If you learn OR teach one thing per day you&#x27;ll be in the the top 5% in no time (an by no time I mean a few years but it&#x27;s still nothing compared to doing this all your life and not being good at it).
japhyrover 2 years ago
I was a hobbyist programmer for a long, long time before I ever got paid for anything related to programming. For me, the biggest leap was learning about testing.<p>I had heard about tests for a long time, but they were always presented as tedious and dry. In my experience, that&#x27;s completely inaccurate. Even as a solo programmer, tests are amazing. They let you stay in the &quot;if it works, it&#x27;s good enough&quot; camp as long as you need. &quot;Okay, it works. Write a test that proves that it works. Now write some more specific tests that prove it works in specific ways, under specific questions.&quot;<p>Having tests in place lets you start to experiment with your code in provable ways. The only other thing that comes close to the impact of testing is learning to properly profile a codebase. But if I had to choose one, I&#x27;d choose testing to focus on.
svennekover 2 years ago
Regardless of which language you write in, it is my humble opinion that watching the Structure and Interpretation of Computer Programs (SICP) from MIT in the 80&#x27;es* is gonna make you a vastly better programmer.<p>Yes, it is cheeky in a uniquely 80&#x27;s way<p>Yes, it is an ancient lisp that nobody uses anymore, but that is just syntax. The composition and data structure lessons of that video series is timeless.<p>And yes chapter 7 (and maybe others) most likely requires a few rewatches... even for a proficient programmer.<p>An no, don&#x27;t try to read the book instead. Start with the videos, so that you can get the Big Ideas instead of fiddling with Lisp code, that you will not use ever again...<p>* = <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;playlist?list=PLE18841CABEA24090">https:&#x2F;&#x2F;www.youtube.com&#x2F;playlist?list=PLE18841CABEA24090</a>
sibeliussover 2 years ago
For me, I had a true programmer enlightenment moment after reading &quot;Functional JavaScript&quot; by Michael Fogus. Seriously, my whole career changed after that and I was in much greater control over my code and everything got simpler. People always talk about books changing their lives and this really changed mine!<p>The other one for me was when I started reading OSS codebases on Github. Meaning, if I needed to use a library, I would read the source first. That brought me a lot of confidence and allowed me to see how others put things together.
karmakazeover 2 years ago
I started early writing games and utilities on an 8-bit home computer. The best thing was that you did everything yourself, there were no libraries. To make it faster you sprinkled in some machine&#x2F;assembly language and interfaced it.<p>The closest modern example might be using &quot;View source&quot; and making your own complete web pages&#x2F;sites. The benefit of this approach is that you don&#x27;t get value in micro-optimization of a single function and have to balance effort over the whole.<p>What I do nowadays is lots of code reviews. For my own PRs, I review them myself first with the mindset of someone who starts with near zero context. During development, I&#x27;ll prototype something that just works (git commit and push to branch), then revise some parts that may have bad expected performance or low coding standards. Difficulties in naming or describing the work in a PR description may mean that you don&#x27;t understand the problem&#x2F;solution well or decomposed it in arbitrary rather than meaningfully stable ways.<p>One thing that&#x27;s not often mentioned is working on old&#x2F;large&#x2F;legacy codebases--in particular ones you&#x27;ve written. It really gives you humility and a long-term view of what was actually needed and what didn&#x27;t age well (YAGNI).<p>This will put you above &quot;good enough&quot; into &#x27;should be good enough for anyone&#x27; territory.
评论 #34396584 未加载
contingenciesover 2 years ago
Like other design disciplines with multi-faceted outcomes and a plethora of metrics, it&#x27;s probably not useful to think of programming as a linear progression of wisdom or capability.<p>That said, IMHO one of the more important epiphanies comes with maintenance of a complex system against evolving requirements over time. Until you&#x27;ve done that, your designs will never be maintainable and your documentation will never be adequate, and a design-for-others &#x2F; design-for-future-selves mentality is arguably the best definition of &#x27;good enough&#x27;. Put everything in version control, and document your requirements, reasoning and failures.<p><i>If you are designing anything that is intended to last longer than 6 months, documentation is a critical part of the system. Meetings are great for communicating with people here and now, but only writing can communicate with people from the future. When you meet with your current colleagues, spare a thought for your future colleagues who haven&#x27;t yet joined, and do them a favor by writing things down. Ability to use written communication is a major differentiator between junior and senior engineers.</i> - @jl6<p>Another good epiphany is small is beautiful. Do one thing and do it right. Use collections of scripts instead of integrated monoliths. Don&#x27;t be afraid to throw them away and rewrite them. Interfaces are far more important than code.<p><i>The cheapest, fastest and most reliable components of a system are those that aren&#x27;t there.</i> - Gordon Bell<p><i>Decrease fear of failure. Experiment constantly, fail early and often, remember and document those failures, and learn as much as possible in the process.</i><p>You can read more wisdom at <a href="https:&#x2F;&#x2F;github.com&#x2F;globalcitizen&#x2F;taoup">https:&#x2F;&#x2F;github.com&#x2F;globalcitizen&#x2F;taoup</a>
mkl95over 2 years ago
I&#x27;m way worse than when I wasn&#x27;t considered &quot;good enough&quot;. I just worked on a bunch of projects with cool-sounding tech for a few years and was consistent at delivering them.<p>&gt; what kind of mental model helped in achieving this state?<p>Something like stoicism. You are surfing a big ball of mud called &quot;the industry&quot; and there&#x27;s not much you can do about it.
limitedsupplyover 2 years ago
Sounds to me like this is primarily a self-esteem issue. What helped me in the past is looking at code written by others, figuring out how they solved complex problems. Follow their implementations end to end, try to apply their thinking to your area.<p>The bad thing is that there are no shortcuts to becoming a confident engineer. The good thing is that everyone has to go through this process.<p>So don’t feel intimidated, just focus on practice, find tech that really engages you vs tech that someone else thinks is good&#x2F;complex.
评论 #34392450 未加载
orzigover 2 years ago
There must be a good enough programmer at your work, try to get as many pole requests reviewed by them as possible, and make clear that you are eager to learn. Unless they are totally burned out, I bet they will be thrilled to pass on their wisdom(even if it is only relative). Even the same information that you could find in a book will feel much more compelling to act on if you hear it from a person.<p>Obviously, you should write down all of their generalized advice, and make sure that every poll request in the future incorporates it. Within six months you will probably be getting very few comments as you have 80&#x2F;20 internalized their experience
omgmajkover 2 years ago
When I started doing more low level concepts, over the years, things just clicked. But honestly it&#x27;s just practice and a curious mental model.
gardenhedgeover 2 years ago
By reading and following my teams standards and aligning my code to the teams code. By using frameworks. By using best practices. By experience.
heresjohnnyover 2 years ago
I was fortunate enough to learn on the job from not only extremely talented, but also really friendly people. And of course some theory also helped – but the books pale in comparison.
digianarchistover 2 years ago
I got my ass handed to me in code reviews with senior developers. I took the feedback on my skills as an opportunity to get better.<p>Now I&#x27;m the one often giving feedback to others.
giantg2over 2 years ago
&#x27;How did you become a “good enough” programmer?&#x27;<p>I haven&#x27;t.
dustedover 2 years ago
I wrote enough code.
syntheweaveover 2 years ago
The basic strategy I use now in writing new code is this:<p>1. Write out requirements in a form following RFC guidelines: the keywords like MUST, CANNOT, etc. are very, very important because they can be broken out into a spec for a single codepath or function: when your spec says &quot;it always has to do this, and it can never do that&quot;, you can make simplifying assumptions.<p>2. Skeleton code: Your first run at the problem should be to attempt to return answers statically: if &quot;a&quot;, return 1, if &quot;b&quot;, return 2, and so forth. Many practical engineering problems are effectively &quot;lookup table code&quot; with routine answers and do not need a solution more complex than this. This can help even if your spec implies that a non-linear solution with some kind of algorithm is called for, because it immediately gets you to a point where you are filling out enough of the spec to see if you need to revise requirements, and you can build tests in tandem with this process. Often a run at the problem fails not because you can&#x27;t keep going, but because you realize that you can define it in a more simple way. You want to iterate towards the simple because the alternative is to heap up requirements that are more incidental in nature(e.g. a feature that exists because of two other features that produce edge cases when used together - a very, very common outcome in complex systems).<p>3. Algorithmic strategies. OK, you&#x27;ve filled out enough to know that you need an algorithm. What class of algorithm will it be? In the majority of cases it&#x27;ll be one of these:<p>&quot;I have an analytic problem using a standard math formula&quot; (therefore you implement the formula)<p>&quot;I have a sequence of symbols that needs to be mapped into a different sequence of symbols&quot; (this describes most parsing problems)<p>&quot;I have a data collection or an answer set resulting from a prior event that needs to be searched, ranked or ordered&quot; (list processing, constraint solving, AI; if the data needs persistence, serialization formats, databases etc may come into play.)<p>Master application of just those strategies, and you&#x27;ve covered many domains of programming entirely. A lot of the literal aspects of coding appear in setting up and tearing down the environment needed to apply that core algorithm, and then in providing enough of a user interface to configure the environment(whether it&#x27;s an application user or another developer interacting with the code later).<p>At scale, code is building on other code, but in the sense of &quot;communicating with a ghost&quot;. You don&#x27;t get to dictate how older systems and APIs that you&#x27;re building on behave. Often you can abstract them, but that only means you&#x27;re talking with your abstraction, which in due course turns into another ghost if it actually gets put into production.