Ask HN: How do I become an 'elite' programmer?
I'm a budding undergraduate awaiting enrollment this year. I've already started to get into programming, and am nearing the end of a ML internship. I really admire people with robust programming skills and hope that I can become one of them (hopefully by the end of university). I wanted to ask, what steps can I take to help me work towards that goal? (I was thinking along the lines of daily deliberate practice, but what would be most efficient?). - learn to break things, git affords you a place to do this (XR will for the masses in domains we haven't considered this idea yet. I'm largely all in on the HL2 right now) - try out as many projects as you can, specifically the k8s ecosystem as this is where most efforts are orbiting - learn bash, it's an automation super power. Keyboard shortcuts too, make lots of scripts, aliases. People perceive wizardry when you move around code / computer at 2-5-20x the speed they do. Also, use the mouse as little as possible - learn people skills (lots here), there are many discussions here you can find by search. Also consider business (startup ideas around iteration and get-to-market-fast ). Most elite devs keep the biz context in mind and that's part of what makes them special. - keep all you things in something like GitHub, it becomes a bit of a library or archive for projects, and also I a resume / portfolio * This all depends on the elite type of dev you are referring to First, consider what your goal is. Is your goal to use programming to get into something else, or is your goal to make a long career of it? If it is the latter, consider that you will be running a marathon, not a sprint. Early on, look for positions and people to work with with good mentoring possibilities. Also, cultivate relationships with healthy and optimistic people. Later on, look for positions where you can be the mentor, and don't be afraid to strike out in new directions. If you never fail at anything, you likely have not pushed yourself enough (a cliche, but true). Like any marathoner, you need to take care of yourself. Physically, if you do not actively cultivate healthy habits, you will not last in this career. Drinking, smoking, drugs, unhealthy food, lack of exercise - they all take a toll. The couch potatoes who were ubiquitous in this field when in their twenties are gone within 10 - 15 years, or they are in a stagnant niche job. Ideally at the end of the day a long and fulfilling career would be my goal. Hence why I am trying to source for more internships and hope to land a few more opportunities over the next few years (although it is trying times amidst the current virus situation). By new directions would you also include exploring new fields of programming/disciplines? If so, what are some which you think are good to venture into and may potentially be something one would hold interest in the long run? AR, get an Hololens 2, the world will change when consumer priced models are widely adopted. If you can't get one, they have emulators and the Oculus Quest is close enough for basic dev. Mixed Reality Toolkit (MRTK), YouTube this to see why without the experience. Everyone I'm showing is losing their mind at how amazing HL2 is out of the box. I'm now dev'n for it full time Practice, a lot. On real projects when possible. There's no shortcut and no substitute for experience. You need peers and mentors. Practice only gets you so far if you don't have people telling you what you are doing right and wrong. Don't take criticisms of your code personally. Read lots of code. Learn to run code in your head. Don't just learn languages and tools. You have to master some subset of available tools, but you also need domain expertise, people skills, and judgment to succeed. Master Unix/Linux and the shell and command line tools. Master a text editor. Understand version control (git) and collaboration. Daily process goals are a wonderful life skill. You can improve your writing skills by writing every day. I recommend it. But the best way to become an elite programmer is to understand complexity: when it’s okay and when it will kill you. The best way to understand complexity is to have ownership of projects that grow in size. You’ll watch the database queries start to buckle or the abstractions hamper readability or the singleton grow grossly in scope. Build things, publish them, and work on them over longer periods of time. Share them with friends. Learn from the brittle parts of the code. I like your point on complexity; from that statement alone I am far from it yet. The layers of abstraction which I have had to deal with so far can be said to be merely surface-level. This is a goal I'm still trying to consciously work on as well (being able to handle complex projects). I guess for someone who is a newbie like myself I may be jumping the gun too early by finding myself veering towards systems which I may not understand e.g. operating systems, compilers. There is no jumping the gun! Go for it.