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 Do I Become A 'Good' Programmer... Like Everyone Else Here

74 pointsby zxlk21ealmost 11 years ago
I&#x27;ve been developing for about 4 years now, &#x27;seriously&#x27; building fairly complex web and mobile apps for about 2. Yet, every day I run across articles here and comments that make me feel incredibly useless and inexperienced.<p>How do I bridge that gap between where I am now, and being able to spend time browsing through modern php, ios, (whatever language I know) articles and not feel under water and under the average knowledge bar?

30 comments

mindcrimealmost 11 years ago
FWIW, I&#x27;m 40 and have been programming professionally for 15 years, and programming as a hobby for probably 8 years before that.<p>I still run across stuff I don&#x27;t understand, all the time.<p>And I&#x27;m not one of those people who have &quot;1 year of experience 15 times&quot; instead of &quot;15 years of experience&quot;. I&#x27;m pretty aggressive about learning new stuff and expanding my horizons. And yet the pace of change is so fast, there&#x27;s always new stuff coming out, or areas of tech I&#x27;m discovering for the first time.<p>The moral of this little diatribe? Don&#x27;t sweat it. Be curious, explore, learn, hack, and don&#x27;t worry too much about comparing yourself to others. And don&#x27;t assume everybody on HN is some uber-genius, super-brilliant &quot;10x&quot; programmer. I mean, sure, there probably are people like that here, but I&#x27;m pretty sure they are a small minority.<p>For another take, you might find esr&#x27;s &quot;How to become a hacker&quot; essay useful:<p><a href="http://www.catb.org/esr/faqs/hacker-howto.html" rel="nofollow">http:&#x2F;&#x2F;www.catb.org&#x2F;esr&#x2F;faqs&#x2F;hacker-howto.html</a><p>Other than that, my only advice would be to start a project (open-source or not, whatever you think) that gives you a venue to challenge yourself. That is, start a project that you don&#x27;t believe you&#x27;re really competent to complete, and then go do it.<p>Also, &quot;read a lot&quot;.
评论 #7940572 未加载
评论 #7940269 未加载
评论 #7940443 未加载
IgorPartolaalmost 11 years ago
I will give you slightly different advice than most people here (that advice being &quot;just keep programming, and experience will come on its own). First, figure out what it means to actually be a good programmer. For example, do you want to be a JavaScript ninja? Or do you want to know everything there is to know about how your OS works? Or do you want to be able to put together a mobile app that is cleanly architected and maintainable all by yourself? Or do you want to be a full stack developer, able to develop a backend service and a front-end UI all at the same time? Or do you want to be a good computer scientist and solve theoretical CS problems and reason about complex algorithms?<p>Once you have picked your definition of &quot;good programmer&quot; (your goal), write out a map of stuff you do and do not know. For example, I am a full stack developer, but I don&#x27;t yet know CoffeeScript. It would probably be a good addition to my toolset as I do a fair amount of JavaScript programming for the frontend. Having this map will help you fill in the blanks of technologies and concepts you are missing. Take your time and learn these slowly, usually as a part of a project, and not just an exercise. As you learn, adjust your map. You will inevitably come across stuff you did not know existed or was important.<p>Remember, it&#x27;s easy to run in many directions at once with this approach. Don&#x27;t do that. If you already know Ruby, don&#x27;t go learning Python (and vice versa). They fulfill a very similar role. Instead go learn how HTTP works. Or how to work with a different data store you haven&#x27;t used before. Or how to use a frontend JavaScript framework. Or go learn C.<p>Here&#x27;s my recommendation learning technologies to become a full stack developer (in order, when starting from scratch): HTML&#x2F;CSS, Python, Django, PostgreSQL, JavaScript + jQuery, AngularJS, HTTP, networks&#x2F;socket programming, C + data structures and basic algorithms, functioning of operating systems (libraries vs syscalls, toy operating systems), compilers (build a toy one), Lisp, Haskell, Erlang, networking again but this time thinking about distributed systems.<p>Good luck!
评论 #7940857 未加载
zedshawalmost 11 years ago
Like everyone else here? I hate to burst your bubble but the vast majority of the programmers here are not nearly even close to as good as you think they are. Mostly they&#x27;re good at talking like they are and memorizing obscure facts about computer science. The reality is that everyone who codes pretty much sucks at it or they get lucky a couple times and do something significant.<p>The same goes for painters, musicians, poets, writers, anyone that you think is &quot;good&quot; is actually just someone who found their thing and hammered the hell out of it until they squeezed out a handful of really good works if they&#x27;re lucky. What you don&#x27;t see is the massive pile of absolute garbage most of these people produce and keep from the public&#x27;s eye. I think the defining characteristic of someone who&#x27;s actually good at a creative activity is whether they can admit this and get past it as just part of creating.<p>So, instead of saying how can you be like all of these guys, how about how can <i>you</i> just improve your own skills? Since everyone sucks at this to some degree or another, all that really matters is how you improve what you do and get better at it. Ultimately, that just takes hard work, study, and trying to find any tricks and hacks that are being kept from you.<p>As an example, I&#x27;m teaching myself to paint and I suck at it, but I don&#x27;t give a shit if I suck at it, I enjoy it. So for the last almost month I have been painting the walls of a box over and over again until I learn how to do it right. It&#x27;s fun, I like it, and I don&#x27;t care if other people are better at it than me because I&#x27;m finding my thing and I keep improving because I keep working at it and failing until I get it right.
评论 #7941074 未加载
评论 #7940939 未加载
评论 #7941015 未加载
评论 #7960943 未加载
评论 #7960945 未加载
jaegerpickeralmost 11 years ago
If you&#x27;ll allow me the arrogance of saying that I&#x27;m pretty good in my genres (web-app, mobile, and I&#x27;m starting to come into my own in game programming but really I have a shit-ton to learn in these fields I know enough to sound smart but I&#x27;m FAR from a genius), I&#x27;ll say that most of what you are seeing is a bunch of subject matter experts answering questions. For example I might be able to tell you the in depth ins and outs of using RabbitMQ as a messaging queue for async processing in a web application but I know next to nothing about how to write an audio driver for Linux, or the math principles behind the best cryptography algorithms. So to answer your question I&#x27;d need to rephrase it a bit and say how do I become really good at a subject. Here&#x27;s what I did: - I have 15 years of professional experience, sorry I don&#x27;t think there is any shortcut on this one. 15 years teaches you things and processes that you will never learn in 2. THIS DOES NOT MEAN that all programmers with 15 years are better than anyone less experienced just that there certain things that the years drill into your head that&#x27;s impossible to give to someone with less experience. - I read A LOT. Like 3-4 technical books a month. Immersing myself in the my area of study helps my think naturally in those techs. - I write a lot of experimental code. - I go to meetups and talk to other good developers - I constantly try to learn something that I think is over my head.<p>Never stop learning and never stop pushing yourself. I&#x27;m driven to know everything I possibly can about my areas.
评论 #7942115 未加载
acemarkealmost 11 years ago
After my first quarter of procedural C++ in college, I thought I knew so much about programming. I was, obviously, under the influence of the Dunning-Kruger effect at the time (in other words, I was a clueless n00b).<p>Thirteen years later, I know vastly more than I did then. I&#x27;ve worked with a wide variety of languages, applications, and frameworks. I&#x27;ve spent untold hours reading blog posts, articles, code, and Reddit&#x2F;HN discussions. Today, I still feel like I know a pretty good amount about programming, except now I also know (and accept) that there&#x27;s effectively an infinite amount of possible programming-related knowledge out there, and I will only ever know a fraction of it.<p>Like you, I routinely see articles posted that make me once again feel clueless and inexperienced (such as raganwald&#x27;s recent post on JS multiple dispatch, or anything involving Haskell &#x2F; Lisp &#x2F; assembly &#x2F; cryptography). I sometimes worry about dealing with technical interviews if I ever move on from my current job. Ultimately, though, I know that I can get stuff done, and that while there&#x27;s lots I don&#x27;t know, I have the ability to research and learn.<p>The other posts give some pretty good advice. For me, it comes down to:<p>1) Learn by doing. No better incentive to learn how to do something than when you need that to make a project work right.<p>2) Keep reading technical discussions on sites like Reddit, HN, and tech blogs<p>3) Never be afraid to say &quot;I don&#x27;t know&quot;, and go research the subject.
csallenalmost 11 years ago
Realize that programming is an <i>incredibly</i> broad field, so you&#x27;re absolutely guaranteed to run into many areas in which you have no experience yet others have achieved expert status. Feeling inadequate is normal. As mindcrime said, don&#x27;t sweat it. Nobody knows everything about every area of programming.<p>IMO you should decide what you want to do in more concrete terms. Being a &quot;good&quot; programmer can mean a lot of things. Do you want to become an expert in some specific area of computer science, i.e. machine learning? Do you want to design your own language? Or an OS? Or your own framework? Do you want to be the ideal super-productive jack-of-all-trades startup first-hire&#x2F;tech founder? Do you want to strive for the broad knowledge, wealth of experience, and leadership + mentorship abilities of an effective CTO? The list goes on.<p>You can&#x27;t have it all. Pick one, or pick a few. Then spend years challenging yourself, ideally working on real projects that are meaningful to you, alongside other great programmers who give you something to aspire to.
yodsanklaialmost 11 years ago
&gt; like everyone else here<p>You need to realize that there are a lot of people commenting on hacker news (or for instance Stack Overflow). On any given topic, specialists of that field will show up and share their insight. For instance, on an article on technology X, it&#x27;s not uncommon that someone that helped developing X shows up.<p>You also need to remember it&#x27;s not the same person that knows everything :) it may be the case for instance that the distributed algorithms expert is clueless about PHP for instance.
评论 #7940779 未加载
10098almost 11 years ago
I noticed that when at work, I usually end up doing one of the following three things:<p><pre><code> 1. Explain things - either to my co-workers or to the computer. 2. Explore - navigate the codebase figuring out how different pieces connect to each other, building an adequate mental model of the system. 3. Debug - search for the root cause of a problem by examining the state of a system in between steps. </code></pre> Sometimes my mental model ends up being insufficient and I have to do 2 and 3 together to &quot;update&quot; it.<p>Thus, I think that to become a better programmer, you need to get better at these three things.<p>&quot;Explanation&quot;, I think, is the most difficult one. I have found that studying math has improved my explanation skills dramatically, and it helps not only when talking to computers, but also when talking to people. Of course, not everyone has the opportunity or desire to study things like calculus or differential equations, but I think that reading computer science books is a nice way to exercise that math&#x2F;logic muscle.<p>To get better at things like debugging, I had to tear down some mental barriers. Sometimes you&#x27;ll have to go out of your comfort zone. Never think &quot;oh, this is too hard for me&quot;. For example, if you&#x27;re writing something in Python, you must be mentally prepared to dive into the internals of a 3rd party C module. The key is to approach it with a &quot;we must get to the bottom of this!&quot; mentality.<p>Don&#x27;t worry too much about technology. Your &quot;goodness&quot; as a programmer isn&#x27;t defined by how many languages you know. It&#x27;s better to know a few very different languages than a lot of similar ones. For example, I think that knowing Java and Lisp is better than knowing Java and C#, because you can quickly pick up C# using your previous knowledge of Java, but knowing Lisp may teach you something you wouldn&#x27;t know if you decided to stick only to enterprisey languages that give you higher employability.
评论 #7940815 未加载
jarrettalmost 11 years ago
Do you feel like your skills are steadily improving? Do you critically examine your code from a year ago, and have the urge to rewrite it because you could now do better? When you&#x27;re coding, do you think &quot;What&#x27;s the best possible way to do this,&quot; instead of just &quot;How can I get this code to run?&quot;<p>If you answered yes to all of the above, then you&#x27;re probably already a &quot;good&quot; programmer, and you&#x27;ll only get better. If not, then let&#x27;s maybe discuss why not. E.g. is there something about your job that&#x27;s getting in the way of you improving as a coder?
评论 #7940401 未加载
nostrademonsalmost 11 years ago
The best thing you can do is read &amp; write a lot of programs, and pick them based on what is new and unfamiliar to you. Try writing programs from different domains (compilers, parsers, network protocols, distributed systems, data structure libraries, desktop GUIs, web GUIs, mobile GUIs, graphical visualizations, machine-learning, data storage engines, geo data, command-line scripts, testing, automation). Try writing programs in different languages (Haskell, C, Javascript, Erlang, Prolog, Go, Common Lisp, Python, etc.). Try writing programs of different scales (weekend hobby projects vs. Google Search), and try entering them at different points in their lifecycle (starting with a blank editor window vs. parachuting in when the company already has a million lines written and the original authors have long since left).<p>I&#x27;ll second what mindcrime said about never really feeling like you know everything. The rate at which new CS knowledge is being created is far faster than the rate at which I can learn, so I&#x27;ve long since given up being able to learn it all. But what I can do is see patterns. I can see that the new single-page Javascript MVC frameworks are reinventing patterns that were common in desktop GUIs a decade ago, or that what Chrome&#x27;s rendering engine is doing when it schedules JS execution isn&#x27;t all that different from the Win32 message pump, or that Guice&#x2F;Dagger are basically introducing data-flow programming to Java, or that Go&#x27;s channels &amp; goroutines are basically the same as Erlang messages and processes. Then I can apply what I already know about those other programming paradigms to the new technology, and only focus on learning the differences. That&#x27;s a lot easier than picking up a new concept from scratch.
davidgerardalmost 11 years ago
Imposter syndrome: you&#x27;re clearly good enough to pay money, but you can see just how vast the area of stuff you don&#x27;t know is.<p>Imposter syndrome is a good sign! It means you have some understanding what &quot;good&quot; actually is. It&#x27;s the opposite of Dunning-Kruger. You can go forth and slowly learn the stuff you&#x27;re missing.<p>Stay humble, but don&#x27;t forget that you are some good.
评论 #7944067 未加载
ambiatealmost 11 years ago
Whether you spend three years in continuous integration and test suites, service oriented design, embedded assembly, high&#x2F;low level network stack, Javascript, Python, or even a PaaS, you just have to keep challenging yourself. Never settle and keep expanding your views. Bridge the gap by learning and engaging in things that interest <i>you</i>.<p>Just the amount of understanding required to comprehend the keyboard press to the letter appearing on the monitor is insane.<p>Remember, you&#x27;re not useless and inexperienced. The stigma from those words alone are holding you back. I have a feeling you are bored. You have a thirst!<p>Also, recall that articles and comments are much like Facebook, a peek into someone&#x27;s good life that makes you feel bad about yourself. The good always seems great, and the bad goes untold. I&#x27;m on revision 744 of a 10 page website&#x2F;service layer right now with only 30% of the requirements met.
Mzalmost 11 years ago
I suggest you learn a bit about perspective and human psychology, starting with The Imposter Syndrome: <a href="http://en.wikipedia.org/wiki/Impostor_syndrome" rel="nofollow">http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Impostor_syndrome</a><p>Sometimes, folks who think they know everything just don&#x27;t know how little they know. Some of your smartest people sound not terribly confident because they know the limits of what they know and how many things are unanswered. Sometimes, really talented, amazing people feel like shams and really mediocre people feel like they have conquered everything and are The Bomb.<p>After that, you also need to find out some kind of objective measure of &quot;good&quot; for x thing. I don&#x27;t know enough about programming to suggest what that might be for that domain.
dccoolgaialmost 11 years ago
Pick better things to read... HN is super awesome for general interest stuff, but it will never make you better at anything. Google some deeper terms from whatever you are learning, and find 5 people that are good at it... read their stuff, try it yourself and get in touch with them if you get confused. You learn by failing as a developer...even some really smart people who did great coloring between the lines at school drop out because they can&#x27;t handle that dynamic. That&#x27;s how you go from &quot;novice&quot; to &quot;good&quot;. The jump from &quot;good&quot; to &quot;great&quot; invloves some deeper understanding of architecture and algos&#x2F;systems that comes with time, reading, education, etc..
评论 #7942610 未加载
BornInTheUSSRalmost 11 years ago
I&#x27;m sure if you wrote a technical post about something you have deep experience with in mobile or web dev, many people would probably feel the same way reading your article. There&#x27;s too much for any one person to know.<p>Read those articles and take the time to research the parts you don&#x27;t understand until you really grok it. Read and try to understand good code, take every opportunity to go a little bit deeper into the tools you use (web frameworks, libraries, etc) if they are open-source. Getting better sometimes means knowing more, but mostly it&#x27;s about not being afraid to dive in.
_random_almost 11 years ago
Change jobs every 1-2 years (not just a salary bump, but a varied experience as well). Get a long-running side project, where you allow yourself to refactor <i>as much as you want</i>.
codegeekalmost 11 years ago
&quot; &#x27;seriously&#x27; building fairly complex web and mobile apps&quot;<p>You may already be &quot;good&quot;. The thing is that there is something or someone better out there than you and this applies a lot more when it comes to HN. I feel like a loser when I browse HN because well, a lot of ppl are faaaar better than me at the things that I want to be good at. It is all relative. Stop sweating it and focus on what you want to achieve. If you get what you want, who cares whether you are good or xyz.
thoughtsimplealmost 11 years ago
Being a programmer will definitely humble most people. It is probably impossible to know even a significant part of what makes up Computer Science. Add to that the requirements for knowing Software Engineering which generally bears little overlap with CS and you&#x27;re probably always going to be behind.<p>The important thing is to keep learning hard things unrelated to your current development stack and methodologies. Don&#x27;t get stuck on only doing tasks where you are already an expert.
enterxalmost 11 years ago
It&#x27;s simple... for any software you run into ask yourself:<p>How can it work? How does it work? How it should work?<p>And the most important thing:<p>Avoid involving yourself into code that is a mess before knowing how it should be written in the first place.<p>Also, if you&#x27;re into OOP, think about access modifiers as:<p>private - if it&#x27;s called from somewhere it has to be only in this class... (or im gonna slap someone!)<p>protected - only this class and its child classes...<p>public - does this really has to be part of an interface?<p>Once you start thinking this way you know you&#x27;re on the right track.<p>...and read a lot. :)
pyfishalmost 11 years ago
First define what &quot;good programmer&quot; means to you. Good programmer could mean having the skills to lead and code a functioning start up venture that can scale. For others &quot;good programmer&quot; could mean being an amazing architect - building products that are complex, yet in simple concise code and in a way that is easy to extend down the road. Yet for another person it can mean becoming a great hacker. What does &quot;good programmer&quot; mean to you?
mixmastamykalmost 11 years ago
It&#x27;s simply gained through study and experience.<p>However, the idea that you can keep up with the output of the computing industry (that employs tens&#x2F;hundreds? of thousands of people) is an impossibly lost cause.<p>Instead specialize, while keeping an eye open for large shifts such as GUI, Web, and mobile have been in the past. I would avoid technologies such as php, that do not sufficiently encourage you to do the right thing.
WalterSearalmost 11 years ago
Pick something and get good at it.<p>If you aren&#x27;t familiar with something that you see, look it up. If it looks useful to you, build something with it.<p>A group of people will always look smarter, more knowledgeable and more accomplished because you will see the acomplishments collectively, and compare them to your own, individual work.<p>tl;dr - Don&#x27;t let it get to you, carve out your own niche.
评论 #7940292 未加载
azurelogicalmost 11 years ago
Reading other people&#x27;s code can be hard, especially if you are used to a different coding standard. There&#x27;s no promise that someone&#x27;s article contains good clean code either.<p>Also, don&#x27;t sell yourself short. Impostor syndrome is real. Just because everyone in the room is smart doesn&#x27;t mean that you are not smart. Intellect is not zero sum.
_cbb1almost 11 years ago
Computer science is such a huge topic. It will humble the most experienced programmers.<p>It&#x27;s possible that you right now today may know somethings that the person who made you feel like your underwater has no idea about.<p>I always feel like I don&#x27;t know anything and that&#x27;s a good thing, it keeps this subject interesting.
opendaisalmost 11 years ago
FWIW, I suggest: Do hard things you don&#x27;t know how to do until you know how to do them. ;)<p>Personally, I just am happy dicking around with programming and never being better than an average programmer. I&#x27;m more interested in money and other things. :&#x2F;
andrewstuartalmost 11 years ago
Do extensive work within a code base that is recognised as being well written and design and architected. Try to be mentored by great programmers, ask their advice on specific questions about your code.
justanotheralmost 11 years ago
&quot;Yet, every day I run across articles here and comments that make me feel incredibly useless and inexperienced.&quot;<p>You&#x27;re &#x27;Good&#x27; now. When you stop getting that feeling, you&#x27;re no longer good.
评论 #7940380 未加载
ta56565almost 11 years ago
[Teach Yourself Programming in Ten Years - Peter Norvig](<a href="http://norvig.com/21-days.html" rel="nofollow">http:&#x2F;&#x2F;norvig.com&#x2F;21-days.html</a>)
gte910halmost 11 years ago
1&gt; Do you have a &quot;Real&quot; CS degree?<p>If not, doing a good portion of the exercises in some books on [compilers](<a href="http://www.amazon.com/Compilers-Principles-Techniques-Tools-Edition/dp/0321486811" rel="nofollow">http:&#x2F;&#x2F;www.amazon.com&#x2F;Compilers-Principles-Techniques-Tools-...</a>), [DFAs&#x2F;State Machines](<a href="http://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser-ebook/dp/B00B63LSA6/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1403655616&amp;sr=1-1" rel="nofollow">http:&#x2F;&#x2F;www.amazon.com&#x2F;Introduction-Theory-Computation-Michae...</a>), Algorithms (<a href="http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen-ebook/dp/B007CNRCAO/ref=sr_1_2s=books&amp;ie=UTF8&amp;qid=1403653248&amp;sr=1-2&amp;keywords=Introduction+to+computing+and+algorithms" rel="nofollow">http:&#x2F;&#x2F;www.amazon.com&#x2F;Introduction-Algorithms-Thomas-H-Corme...</a>) and theoretical programming (<a href="https://mitpress.mit.edu/sicp/full-text/book/book.html" rel="nofollow">https:&#x2F;&#x2F;mitpress.mit.edu&#x2F;sicp&#x2F;full-text&#x2F;book&#x2F;book.html</a>) can give you some common foundational lenses with which to see these articles<p>2&gt; Learning the history of your field<p>Nothing informs the current state of the field more than how we got here! Learn the foundation of your field from people who lived it. The podcast [Debug](<a href="http://www.imore.com/debug" rel="nofollow">http:&#x2F;&#x2F;www.imore.com&#x2F;debug</a>) is Guy English (Creator of Napkin and other apps) along with Rene Ritchie interviewing people about the history of Cocoa and CocoaTouch<p>I found [this episode about AutoLayout and Key Ferry illuminating](<a href="http://www.imore.com/debug-33-ken-ferry-auto-layout-passbook-and-understudy" rel="nofollow">http:&#x2F;&#x2F;www.imore.com&#x2F;debug-33-ken-ferry-auto-layout-passbook...</a>).<p>3&gt; Go through early versions. Few systems START complex. Look at OLD books for EARLY versions of systems, and why old php made such silly choices is obvious (hint, they weren&#x27;t that silly for what it was doing). Read books and commentary through the timeline. Understand the history of what&#x27;s happening to the language, then you&#x27;ll understand why you are where you are.<p>4&gt; Go DOWN the stack. Understand the bottom of Objective C by reading [the open source implementation of Core Foundation and more](<a href="http://www.gnustep.org/" rel="nofollow">http:&#x2F;&#x2F;www.gnustep.org&#x2F;</a>). Also available elsewhere (and I think somewhere on Apple&#x27;s Site still).<p>5&gt; Do what you shouldn&#x27;t! Don&#x27;t ship it, but really use those implementation details to do something awesome and amazing. You&#x27;ll learn tons about what&#x27;s happening.<p>PS: To the mods, those aren&#x27;t affiliate links
aosmithalmost 11 years ago
Keep banging your head against a proverbial wall until there is no wall.