Does experience make you a better programmer?
austinhenley.com
austinhenley.com
I want to do X, and it's already obvious it's going to be modeled as say a finite state machine in some kind of predetermined hardware. The "computer science" part of the task just doesn't tend to be a very time consuming determination like it is with exam questions designed to probe that specifically.
The first thing that actually saves time for me is how long it takes to grab maximally relevant boilerplate code and make modifications. The second thing is how organized i am about having datasheets, code, etc layed out so i can cross reference things quickly without making mistakes or being distracted.
Things that wasted most of my time are relatively simple issues in hindsight. Now i help younger people hitting those same walls and realize i have in fact gotten faster at those things i used to be doing, but it doesn't matter because my responsibilities have shifted to other areas where i have less experience. I suspect this cycle will never end and that's ok.
Experience makes me a better football player if I study and practice with an eye for improvement.
Experience makes me a better weightlifter if I study and practice, if I get the nutrition I need, and so on.
Some of that improvement will come regardless. But most of it, even if not specifically deliberate, requires some element of direction.
Would spending 10,000 hours writing out the Cyrillic alphabet repeatedly enable me to read Russian literature? So then, would spending 10,000 hours writing HTML enable me to write kernel code?
In the end, what is experience but a training of my brain?
But not regular practice.
-------
Programming is a wide skill. APIs are perhaps more important than language. In most cases, projects evolve and we find out APIs changing underneath us. It's hard to be an expert on any version given how quickly things move today.
But we can have good experience in a wide number of APIs and codebases. If we come across something similar, the experience helps.
Do you want to program difficult problems? Then you need to solve difficult problems. Writing fast "code jams" won't help you train vs difficult academic, theoretical problems.
Do you want to program Cryptography? Then you need to write correct cryptography code. Practice by writing incorrect / breakable cryptography code (ie: side-channel attacks, timing attacks, etc. etc.) does you no good. You need to actually write the proper cryptocode.
-------
Doing any of these things imperfectly is sadly, less than useful. You end up practicing "bad habits" and making yourself worse as a programmer.
Fortunately, we programmers don't need perfection in most cases. But always remember that while "normal practice" gains a decent level of competence, you don't actually reach the levels of elite skill (in any task, programming included) unless you can execute "perfectly" at least once.
Setting yourself up for perfect execution needs to be a goal in of itself. For students of language, this means practicing the native tongue's accent. For sports, it means practicing the perfect golf swing form, or the perfect strikes in martial arts.
It also means that people of elite skill can "retain" those skills easier than beginners. If you want to practice "10 perfect golf swings", a beginner may have to swing 100 times to do it. But a pro-golfer would execute in just 10 swings (since almost all of their swings are perfect already).
I think if someone is good at such problems then it means they at least know their data structures and have good problem solving skill. Both are good qualities for a programmer.
People seems to be confusing it with (rightfully, because that is what title says) "does more experience make you, or anyone else, better than what he used to be". Also obviously correct
Often there are many design goals (eg low cost, low complexity, time to build, seamless integration with X, performance, memory and/or code footprint (particularly in embedded), compatibility with standard X, extensibility, futureproofing, etc). Tetrising all the pieces is probably NP hard — experience is akin to knowing the solution already, or something similar.
Maybe as the end of the article states, toy code is too simple to be a differentiator. But like the 10k hour commentary states, it’s got to be increasingly difficult work, not endless repetitions of three chord pop tunes. Programming is an attempt to render an idea in code. Practice makes perfect.
What were you supposed to comprehend? The name of the function was “containsSubstring” and it… checked to see if a string contained a substring. Was there supposed to be a bug in there? If there was, I didn’t see it (although I didn’t spend too terribly long looking for one). The “containsSubstring” variable was unnecessary (it could have just returned true on line 13), but that seems awfully nitpicky.
Or instead of checking j == len(word)-1 inside the inner loop, you could do that outside, after the loop and return true there
Both are a lot more nitpicky. But author's point is the code is not "wrong" but it is not great either
As did people who reported being better at (something) than their peers.
The headline and article are not supported by the data at all.
How well a person learning programing since two weeks does when compared to someone who did it for two years?
Also programming means problem solving. Practical programing is not hard the way leet code problems are, practical programming isn't typically requiring you find a very smart algorithm and a very clever approach. Practical programing is hard because it requires massive knowledge, it requires tying those pieces of knowledge together and it requires a very good low level understanding of how systems work.
Being very good at algorithms and data structures will help sometimes - and I enjoy algorithms and data structures and even some of the abstract leet code problems - but knowing that is far from enough, like knowing a programming language is far from enough.
Algorithms are tools, data structures are tools, programming languages are tools, libraries are tools, frameworks are tools, system design, databases, build tools, Ides, debuggers, profilers, cloud, protocols, hardware architecture are all tools. You have to know how to use them and when and why.