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 master the art of programming?

31 pointsby shivajikobardanover 2 years ago
Who qualify to be a master programming?<p>Anyone who can create websites, games, from scratch with their own brain and google help without following tutorials line by line.<p>So, how did you mastered the art of programming? If it was practice, what did you practice?<p>I was talking to a guy and he said to me that he has finished a DSA book thrice(fcking thrice) and solved same 500 problems thrice. That&#x27;s how he mastered programming. Now he is able to solve any kinds of new programming problems He has built a game engine and physics engine of his own.<p>That too in c++.<p>I liked how honest he was about his journey. Most people seem to be telling &quot;well I am just good at it...&quot; and trying to hide their hard works.<p>What&#x27;s your secret sauce?

32 comments

butt___huggerover 2 years ago
Reading that book a million times won&#x27;t make you a master programmer. Reading it a few times will make you an intermediate (i.e. not a novice) programmer. But you become a master by solving many different problems many different ways, as opposed to solving the same problem the same way over and over.<p>I consider myself a master programmer because I have seen so many problems and solutions that there isn&#x27;t a 1:1 connection between them. A diversity of problems and solutions means that you will see what underlying principles are common or contrasted between each approach. Then you can apply those basic axioms to make your own algorithms that are custom-suited to each problem.<p>I think a master programmer should have knowledge of the following areas:<p>- Something like Python (primarily dynamic types, primarily imperative)<p>- Something like Haskell (static types, purely functional)<p>- Something like Scheme (dynamic types, minimalism, lambda calculus)<p>- Something like Rust (static types, imperative, lower-level)<p>- Something like Prolog (logic programming, constraint-based)<p>- Something like Forth (stack and concatenative programming)<p>I would compare this to learning to be a chef. You can learn a lot of recipes from the best cookbook, but that just means you can cook a meal. To be an expert, you understand each component of the recipe and can mix-and-match, create substitutions, to create exactly what you want.
评论 #34854504 未加载
评论 #34854964 未加载
JohnFenover 2 years ago
What do you mean by &quot;master&quot;?<p>I&#x27;m quite skilled, but I have a whole lot more to learn. I think that&#x27;s true of every expert programmer I&#x27;ve ever gotten to know.<p>I&#x27;ve been programming professionally for 30 years or so now, so the basic honest answer of how I gained the skills I have is that I&#x27;ve just done it a whole lot.<p>But I think that leaves out too much. I truly love programming and computers, and am curious about everything related. I would not be doing it any less if I weren&#x27;t being paid for it (and, in fact, I have never stopped programming recreationally).<p>So I&#x27;ve spent countless hours studying, reading, experimenting, and just generally doing, because all of that was play, not effort.<p>When people ask me how to learn to program well, my answer is basically &quot;just start programming&quot;. Pick a language, it doesn&#x27;t matter which, and start. Branch out from there, learn other languages (especially ones that use different paradigms -- learn object-oriented programming, learn procedural programming, learn parallel programming, etc. Once you have learned how to work in a given paradigm, the difference between the languages in it becomes mostly a matter of syntax, and so they&#x27;re easier to pick up).<p>Read constantly, and a wide variety of authors. Read programming-related things that are unrelated to the stuff you&#x27;re currently interested in. Read other programmer&#x27;s code. When you see something cool, take the time to look over how they did it -- even if it&#x27;s in a language you haven&#x27;t learned. You&#x27;ll understand more than you expect.<p>Be a generalist. You&#x27;ll probably have a favorite language, a favorite type of programming, a favorite type of problem, and so forth. Make yourself tinker with the stuff that isn&#x27;t your favorite, and especially the stuff that is new. Even if you never do more than tinker, you&#x27;ll learn new things and approaches that will improve the skills you&#x27;ve already honed.<p>Avoid ruts. Avoid doing the same thing over and over.<p>And realize that all programming is essentially an exercise in complexity management.
评论 #34857327 未加载
zwkrtover 2 years ago
If someone told me that they worked through a whole data structures and algorithms book I would be impressed but I would not be under the impression that they had &#x27;mastered programming&#x27; in the sense that I would not be comfortable working with them. I would rather work with someone who has large gaps in their knowledge but is curious and motivated.<p>I &#x27;mastered&#x27; programming by your definition by having a 2 year long internship at a hardware company where I was asked to make a website, write code that interfaced with non-standard networking protocols, and automate the company&#x27;s garden. I had a whole lot of help from some graduate students that were there working on hardware design and were kind enough to answer the 1000 questions I had.
评论 #34854520 未加载
评论 #34854482 未加载
评论 #34854445 未加载
airbreatherover 2 years ago
Programming isn&#x27;t really the problem, most of the time.<p>Understanding the problem at hand such that it can be broken down into smaller and smaller chunks is really the problem.<p>After that it is refinements for robustness, maintainability, speed, size and so on, depending on the application, platform, language and approach.<p>The mastery defines the difference between a workable solution and an elegant solution.
riknos314over 2 years ago
Mastery is not a binary state.<p>Either you have the skills to solve the problem at hand in a satisfactory way or you don&#x27;t - but where exactly that line is is different for every problem.<p>One can display mastery over one set of problems and simultaneously have no mastery over another - maybe you know everything that can possibly be done using a tree data structure, but have never even heard of a bitmap.<p>Don&#x27;t worry about &quot;mastering programming&quot; but rather worry about having sufficient knowledge of the right tools to solve the problem you need to solve.
quanticleover 2 years ago
There&#x27;s a saying: &quot;There&#x27;s a big difference between ten years of experience, and one year of experience repeated ten times.&quot;<p>Someone who&#x27;s just repeated solving the same problems over and over again, has the latter, especially if they&#x27;ve only done it in a single language.
评论 #34854593 未加载
stevefan1999over 2 years ago
Having been introduced to programming since Grade 5, I would strong recommend you say you would never master it. There are new things everyday for you to learn, so while you could be &quot;high-handed&quot;, trying to call yourself &quot;master&quot; makes me feel like you are a con artist
评论 #34854870 未加载
yCombLinksover 2 years ago
Data structures are only a very tiny part of programming, and all of the core data structures are already available in libraries with highly optimized implementations. This says nothing about the ability to structure large programs, or even interpret the purpose &#x2F; needs of a program.
评论 #34854997 未加载
thecodrrover 2 years ago
I think one question eludes everyone and I have often felt that the whole tech space just kind of skipped past it. What constitutes a master programmer?<p>Once I thought that there&#x27;s no mastery in programming. That you just learn and kept of learning until you were ashes and bones. But that isn&#x27;t true just as it isn&#x27;t true for chefs, blacksmiths, painters, and other artists. If they have a certain standard where a practitioner becomes a &quot;master&quot; then so should programming.<p>I don&#x27;t have a lot of experience&#x2F;knowledge of how masters in other areas are judged but I see one common theme:<p>If you give a piece of rusted metal to a novice blacksmith, he wouldn&#x27;t know what to do with it. Or even if he works it, it won&#x27;t be something to be proud of. Give the same piece to a master and you won&#x27;t believe what he makes of it.<p>Similarly, give an egg and some onions to a master chef and see what magic he brings.<p>Sure, knowledge about the trade matters and years of experience as well but if you strip all of that away, you&#x27;ll see this steady confidence to be able to do anything (not bravado or foolhardiness) in their trade regardless of the resources and tools.<p>If we translate that to programming, we slowly realize that the toughest programmers are ones who can solve problems at every level, in any environment, under any condition. I am not saying that they are happy doing it (just as a blacksmith won&#x27;t be happy working with rusty metal) but that they have the ability to just make things work and work in a good way.<p>All that may be very vague since its all just theory and I am basically thinking out loud but in these times when every one has the same access to the same information, I don&#x27;t think it&#x27;d be a fair criteria to judge based on how many books you have read.<p>There&#x27;s so much to be said on this to better classify the &quot;mastery&quot; of programming. In my opinion, masters of the trade are always rare. There are many who are close to this level of expertise but only a few you reach and surpass it.<p>Note: As I said, I am thinking out loud. I could be wrong and if so, feel free to point that out.
bitwizeover 2 years ago
I haven&#x27;t mastered the art of programming, and I&#x27;ve been programming for 40 years!<p>&quot;Mastery&quot; eludes most of us because programming has a very, very high skill ceiling. No matter how good you get in one aspect, there are other aspects that you still have a long way to go in before you get proficient.<p>Don&#x27;t worry about mastery. Leave that to Knuth and John Carmack. Get good enough to build that thing you want, and then see how you can build it better (or a more complex thing). If you were meant to be a master, mastery will come if you follow the path, and you may not even know it when it does.
ipaddrover 2 years ago
You want to be a great writer..write. A great programmer write. A great song writer? Write.<p>Start with a quest and use tutorials along the way if necessary. At some point those tutorials get in the way, drop them then.<p>Your first movie is going to be horrible. Your first game will be. Keep at it, make it better and better. Learn how others approach parts of games like you and understand how to apply them to your situation. At some point you will invest new ways.. share those, learn from feedback.<p>A game either starts with an epic idea and a struggle to create that vision or a cool hook that a game is built around.
评论 #34854872 未加载
norwayjoseover 2 years ago
I&#x27;ve been programming professionally for 40 years but don&#x27;t consider myself a master. I think the term is overused and applies best to people such as Ken Thompson, John Carmack, and Michael Abrash. I&#x27;d also use it for a handful of really bright people I&#x27;ve worked with over the years.<p>As others here have said, the key to being good at anything is to do it often. While it&#x27;s useful to be able to solve problems on a whiteboard during an interview, during a long career you&#x27;ll probably be asked to work on many problems which are new to you. Researching new protocols, architectures, software libraries, and peripheral chips may be required. Figuring out how to debug problems in new environments can be essential as well.<p>I&#x27;m an embedded firmware engineer and feel fortunate that I continue to find my job fascinating. I do lots of technical reading to keep up with the field. In addition to the documentation for the chips and tools we use, I read quite a few technical blogs via an RSS reader. I also follow a number of technical subreddits.<p>I&#x27;ve signed up for developer accounts at the manufacturers of chips we use. One of them has partnered with a company which provides free webinars as well as more extensive in-person training. While it can be challenging to get your company to pay for training, few will object to you taking a free webinar during your lunch hour.
29athrowawayover 2 years ago
If I asked you, &quot;how do you master the art of communication?&quot;. Naturally, the answer would be another question: &quot;Communicating what?&quot;<p>What you consider &quot;effective&quot; will vary depending on context. Think about how these different occupations use language: comedians, politicians, songwriters, novelists, sports commentators, science communicators, cattle auctioneers, therapists, salesmen, corporate executives, lawyers, physicians...<p>Being an effective dark humor comedian won&#x27;t necessarily make you an effective doctor, and may likely even cause you to lose your job or even your license if you communicate in the same way.<p>Likewise, think about how different fields approach programming: operating systems, device drivers, compilers, cryptography, compression, networking, cryptocurrency, web development, scientific simulations, embedded systems, math software, theorem provers, games, signal processing, machine learning, artificial intelligence, information retrieval, robotics, etc.<p>If you are effective developing firmware for pacemakers or insulin pumps, and then they move you to a startup and ask you to develop using JavaScript, HTML and CSS as fast as possible (or viceversa), that may not go well for you.<p>Domain knowledge, expectations of your role, what&#x27;s considered &quot;best practices&quot; and development processes differ between fields.
78666cdcover 2 years ago
I echo others here in the sense that “mastering programming” is not well defined. It’s interesting to try to define what that might be though. For example, I know people who would qualify as “master Java programmers” if there ever was one, but that doesn’t make them “master programmers”.<p>I think that in my life I have met one person that I would call a master programmer. He was intimately familiar with C, C++, Java, Erlang, Perl, APL, Ruby, Python, Prolog, Haskell, Scala, and more. You could probably find a person that is more of an expert in any one of those, sure, but that’s beside the point. The reason this fellow qualifies as a master of programming, for me, is that he seems to have complete knowledge of where every language came from, how that influenced its semantics, what the pros and cons of each language’s design are, and could code more or less idiomatically in any one of all those languages and explain why it was idiomatic.<p>Based on that, I’d say that if there is such a thing as a “master programmer”, it’s probably someone so well versed in computational theory and language design that picking up a new language is just a fun afternoon.<p>I am sure others will have different viewpoints. This is my two cents.
评论 #34854935 未加载
analog31over 2 years ago
Well, I qualify by your definition. I just did a lot of it, starting sometime around 1981. I wasn&#x27;t trying to learn programming <i>per se</i>, but actually trying to solve problems with it.<p>What I suggest is find some other interest that forces you to program. That way, the problems come from the subject matter, and you can&#x27;t avoid the things that are hard. My interests were math, science, and electronics.
Leftiumover 2 years ago
I just made <a href="https:&#x2F;&#x2F;m.leftium.com" rel="nofollow">https:&#x2F;&#x2F;m.leftium.com</a> in a few hours yesterday; imagined it the night before.<p>I think I just started with a natural knack for it. So it was fun to do, which resulted in a virtuous cycle of more practice which became more fun.<p>Compare to several classmates who wanted to major in CS just because it opened up doors to high paying jobs (right before tech bubble burst). They were not interested in programming itself. So they found it very difficult and many gave up.<p>By &quot;natural knack,&quot; I mean I can decompose problems into smaller problems, imagine how things will work (especially what could go bad), and build bigger thngs from smaller units (like Legos).<p>At first, I didn&#x27;t understand how the internals of the computer worked, but this understanding really helped later. Especially for languages like C.
JohnFenover 2 years ago
It&#x27;s wonderful how in all of these comments from different experts in our craft, there really is a large overlap in what we are all saying. So I&#x27;ll add this advice to the pile: read what everyone is saying here, notice the common threads, and take those closest to heart.
garyfirestormover 2 years ago
Ah... the legend of a 100x engineer who can vomit any code at any time and build products overnight and solve any problem instantly without looking it up because he has &#x27;mastered&#x27; the art of programming. Which one of you is this? What is your secret?
mkyousayitover 2 years ago
I have tried and failed to read multiple programming books. Just cannot do it. That said, I proficiently code in Java, python, c++, c#, rust, javascript and then some for over 12 years.<p>Stop reading and start coding. Your brain literally grows when you make mistakes. Cant make mistakes if all you doing is reading.
swayvilover 2 years ago
I used to hack up freeware games written in basic, to the point of destruction. And video and sound art. That&#x27;s been my focus ever since, codewise.<p>I was drawn forward into mastery by my pleasure. I like code, glitchy crashes and trippy stuff.<p>It&#x27;s easy to become a master of X when you like X.<p>So step 1 is to like X.
SeanAndersonover 2 years ago
I let myself get actually excited about a project. The motivation needed to actually solve problems I wanted to see addressed resulted in so much more growth than everything I got out of classical education.
fIREpOKover 2 years ago
Probably practice? I haven&#x27;t mastered it though.
whywhywouldyouover 2 years ago
All it takes to be a master is to not use line-by-line tutorials?<p>What&#x27;s someone like John Carmack then if not a master? I guess everyone&#x27;s a master!
ipnonover 2 years ago
You kind of just bang your head against the keyboard until it starts to compile, and run, and stay running … I don’t think I had any programs that could do anything for a couple of years, and I couldn’t say I was skilled for more than a decade of full time work.<p>The secret is there is no secret. You keep hacking until suddenly you’re the one doing the answering instead of the asking. If you give up somewhere along the way then you were probably never cut out to be a programmer in the first place.
评论 #34854626 未加载
pjdkochover 2 years ago
Nobody masters programing. They just become less bad in their field of practice.
rg111over 2 years ago
May I get the name of the DSA book that your friend read three times?
guluarteover 2 years ago
programming for hours every day
v3ss0nover 2 years ago
By prompting ChatGPT ......
shaunxcodeover 2 years ago
Chop wood. Carry water.
rg111over 2 years ago
First I read your title, and told myself, &quot;No, I ain&#x27;t that&quot;, but I clicked anyway to see what others are saying about being a master programmer.<p>Then I read your definition for this question, and I thought, &quot; sure, I am that. I can program stuff with only google.&quot;<p>How I came here?<p>I programmed a lot. First, books, tutorials, then small projects.<p>Coding is not really the harder part. You can go to codewars and begin solving easy problems. And where you don&#x27;t understand, get help from YouTube. Neetcode is great for Leetcode. This way you learn to solve logical problems. Turn ideas into code.<p>Ideally learn multiple languages. And then you understand the concepts rather than the syntaxes.<p>Then you can make minor improvements to existing code. I use and used (before learning to code) a lot of OSS, and, after learning to code, when I saw something that could be improved, I went ahead and created a PR, or fixed a bug. This is lot easier than creating something from scratch.<p>Before coming here, I fixed some documentation, added translations to readme after learning to use Git and GitHub.<p>After documentation, and before features&#x2F;bugs, I fixed minor code errors in tutorials that I watched. Most tutorials nowadays have an open GH repo.<p>Then comes the harder part, that is planning something. You have to know how to design systems. And here, too, mimic others first. If you want to create games, look for similar OSed games, and learn the structures from them.<p>Then code your own. Games, websites, apps, whatever.<p>Tutorials like from freeCodeCamp are important, too, as they not only show you the code, they show you the structure&#x2F;architecture of things as well. A good starting point from tutorials would be to understand the architecture&#x2F;function definition and then pause the video and write the code yourself. This is how you start.<p>Then you start your own project. Design the whole architecture yourself and code it up.<p>Some Mathematician said that you can&#x27;t become a Mathematician until and unless you have given yourself a problem that you want to solve. Same goes for programming, in my opinion.<p>Build something that you need for yourself, that you think should exist.<p>Write program in the area where you feel genuine interest. For me it was scientific programs like Non-Linear Dynamics, Conway&#x27;s Game of Life, Machine Learning, Deep Learning, etc. For a friend, it was Electronics circuit simulators. Write stuff that you feel interested in.<p>This way you begin to see coding as an means to an end, and not the end itself. In my opinion, this is good.<p>One missing piece in this comment is knowledge of solutions. Immersion is helpful like it is in learning languages. Immerse yourself in an environment buzzing with programmers. It is free with a CS degree or a job writing software. But I started out as a Physics undergrad, and I had to get my immersion from Reddit, Quora, and later HN.<p>You have to know the names of solutions that exist. Netlify, Ghost, Hugo, DragonRuby, Unity- you must know the names and one line descriptions first, in order to use them as pieces in your software.<p>I wrote what I know. I hope it helps you. Although Austin Kleon&#x27;s &quot;Steal Like an Artist&quot; is written for the creator economy, beginner programmers can learn from it. &quot;Don&#x27;t start with a blank page&quot;- is an important lesson.<p>May I get the name of the DSA book that your friend read three times?
hemant19over 2 years ago
code, code and code
BMc2020over 2 years ago
proofreading my post titles.
评论 #34854421 未加载