Live data from Hacker News

Ask HN: Thoughts on Rich Hickey's advice on becoming a better developer?

news.ycombinator.com

71–80 of 114 posts

Re: Ask HN: Thoughts on Rich Hickey's advice on becoming a better developer?

#71
post #22

Programming languages matter some, but algorithms and data structures matter a hell of a lot more. While it is true that learning different programming paradigms can help you evolve as a programmer, I strongly believe (I have been programming professionally for about 20 years) that that is far from the best way to evolve as a developer, and learning algorithms and data structures will help you "level up" faster and b…

When people talk about learning algorithms, what do they mean? I recently spent a few hours reading about and implementing A* for the NPCs in a video game I'm working on. Are you talking about being able to write A* and other algorithms from scratch with no reference material?

First of all, you should know that there exists an A* , and what it can be used for.

Second, you should know when to use A* or something else, the trade-offs etc.

Third, you should know how to implement A* , when needed, with reference material (you'd be surprised how many programmers can't read/understand the reference material even when its given to them, or don't know enough programming to put it in code).

Of course you could get by with never using A* or tries or whatever advanced algorithm, not even in some ready-made API form. E.g. if you just do some CRUD or some simple web programming. But for the kind of programmers we're talking here, those three are paramount.

The thing you mention, implementing it from scratch with no reference material might be impressive, but it's more of a circus act.

Re: Ask HN: Thoughts on Rich Hickey's advice on becoming a better developer?

#72
What you do to level up depends on your level now.

Novice: Keep the scope small. Try not to get confused. Concentrate on small successes and learning the basic "rules".

Beginner: After building a base, branch out and expose yourself to areas where the "rules" are different.

Intermediate: You have a base and you also have some idea that there is more to the world than your base. Write a lot of code. No, really a lot. Read a lot of code -- twice as much as you write. Become an "expert" in an area and create an understanding of why the "rules" are the way they are.

Advanced: You are an expert at something, but you realize that you have only scratched the surface. Question all the "rules". Throw them away. Make new ones. Explore the world searching for abstractions that you missed before. Write a ridiculous amount of code. No, I mean epic amounts. Read 4 times as much code as you write. (My negative alter-ego adds: Despair as you realize that you aren't so much looking for a needle in a haystack as a needle in a dung heap. Despair even more when you realize that the dung heap was made by you).

Novice Again: You have mastered a few subjects. You have rewritten the rules. You now have reached a state where you can clearly see that you understand nothing of consequence. Keep the scope small. Try not to get confused. Concentrate on small successes and learning the basic "rules".

Note that it may take a lifetime to reach the final stage and I would say that the vast majority of programmers don't reach it. Scale your expectations accordingly.

Finally, to comment on your question about whether your should review your Coursera course or dive deeper in your Python / Django stack: Write a lot of code. Doesn't matter what. Hey, how about implementing something in Python on the topic of your Coursera course? But not a toy -- write at least 10,000 lines.

Re: Ask HN: Thoughts on Rich Hickey's advice on becoming a better developer?

#73
post #33

I don't see these are in conflict at all. Both talk about spending the long period of time needed to attain Mastery. Mastering concepts is essential but mastering your way of working so as to maximize your productivity and the effectiveness of your practice is equally important. You do not want to be a dilettante who knows everything but produces nothing of substance or value. I wrote a book specifically on how to go…

fwiw - appexpress.io - shows me almost nothing. I can’t even see what types of application components you have available or how they could be utilized…

Thanks, we will have a better front/landing page soon. If you're interested, go ahead and register to be notified when we launch a public beta. Right now we have a Wordpress-like-but-cleaner CMS with import capabilities, user management, and extensible admin. There are a few more pieces in the pipeline to complete before launch and much more in the works for later in the year.

Re: Ask HN: Thoughts on Rich Hickey's advice on becoming a better developer?

#74
post #18

Whenever a question like this comes up among the people that I am mentoring, I like to show them the "T-Shaped Employee" section of the Valve Employee handbook [0]: "We value “T-shaped” people. That is, people who are both generalists (highly skilled at a broad set of valuable things—the top of the T) and also experts (among the best in their field within a narrow discipline—the vertical leg of the T). This recipe is…

This is exactly why a lot of people want to do a start up, or at least start a side project that solves a specific problem. You get to to be the expert in that domain, and in order to get the complete product out, you need to be a generalist. Another meme that's been thrown around is: "You are not the complete developer if you've not written a compiler." I don't necessarily buy that, but there is some merit: there is…

It is a necessary truism at every abstraction layer there is at least one developer (dead or alive) who has the ability to rebuild the abstraction layer from one layer down. Speaking from a society point of view: The meme thrown around ensures developers learn to do exactly that and keeps the developer work force well trained and skilled, to rebuild things where necessary.

Re: Ask HN: Thoughts on Rich Hickey's advice on becoming a better developer?

#75
post #18

Whenever a question like this comes up among the people that I am mentoring, I like to show them the "T-Shaped Employee" section of the Valve Employee handbook [0]: "We value “T-shaped” people. That is, people who are both generalists (highly skilled at a broad set of valuable things—the top of the T) and also experts (among the best in their field within a narrow discipline—the vertical leg of the T). This recipe is…

This is exactly why a lot of people want to do a start up, or at least start a side project that solves a specific problem. You get to to be the expert in that domain, and in order to get the complete product out, you need to be a generalist. Another meme that's been thrown around is: "You are not the complete developer if you've not written a compiler." I don't necessarily buy that, but there is some merit: there is…

I've heard it as "You don't really understand how programming languages (and/or computers) work until you've written a compiler.", which I believe is more accurate. Otherwise you get into that "no true scotsman"[1] logical fallacy, wherein we argue what being a "real" developer means.

[1]: https://yourlogicalfallacyis.com/no-true-scotsman

Re: Ask HN: Thoughts on Rich Hickey's advice on becoming a better developer?

#76
post #29

The musician analogy is poorly chosen. Playing an instrument is a highly physical, hand-eye(-mouth)-coordination challenge. But mastering a platform - be it a language, a framework, a library - will help make you a much better developer, it is true. If you don't know enough to exploit the relevant features of the platforms you're using, you'll produce a poorer solution than otherwise. You'll use more code, or fail to…

Learning to play an instrument taught me how to learn complex skills in general. There are similarities in the processes of learning almost anything - be it martial arts, glassblowing, flamenco dancing or web programming.

In the beginning, everything is new and it can be overwhelming. Humbleness and discipline or dedication is required in the beginning. Small successes lead to pride and enthusiasm, and gradually, over years, your skills grow. In playing guitar and glassblowing, i recall various times where I was satisfied and or pleased with my skills, and then looked back at those times years later and was amazed by how much more sophisticated my skills have become.

With that experience, I never felt frustrated learning Python, JavaScript or SQL because the process reminded me of my previous learning experiences and I knew then all I needed to do was put in time and seek information.

As an aside, I might note that there are mathematical aspects to creating, playing it and even appreciating music. Every system of music has rhythm and a set of tones that is based in someway on numbers – the 12 notes of the western octave, time signatures, 8th and 32nd notes and so forth. Learning the complex relationships of systems like jazz chords on the guitar or piano is very much a mental exercise as well as a physical one.

Re: Ask HN: Thoughts on Rich Hickey's advice on becoming a better developer?

#77
post #57
post #26

In the venerable 'well actually' StackOverflow tradition of not answering the question: as a developer, don't consciously invest too much of your time trying to become a better developer. Instead, set aside time to become a better marketer. If you're a solo developer you will need to get the word out to investors and customers about yourself and what you can do. Working for someone else, you'll additionally have to s…

If the OP's goal is to make more money, this might be good advice. But if their goal is to become a better programmer, it won't.

That is certainly a valid response.

Being able to convince others of the value of one's contributions tends to create an expectation for even greater contributions - this driving force can easily be directed toward improvement as a programmer.

Re: Ask HN: Thoughts on Rich Hickey's advice on becoming a better developer?

#78
My thought (predating your post) is that there are two ways you can stay on the edge of your comfort zone; one of these is by expanding laterally into things you don't already know much about, and one is by expanding vertically into things you do already know about.

The risk of expanding laterally is that you can pretty much surf on a fairly clean wave of documentation, examples, tutorials, SO q&a and github code to solve most of the "problems" you face (and many of these "problems" are shit like "learning an API" or "gotcha config files"). This isn't to say that this is how expanding laterally will work in every case, especially when you're picking up a lot of knew paradigms.

The upside to expanding vertically is that you're eventually going to run into problems or questions that you can't just research your way out of. Not to denigrate all of the other learning we do, but I think these times when we have to go out into the wilderness and test ourselves against problems that, even if only by dearth of documentation, are effectively novel, are when a lot of growth happens.

Of course, it's perfectly possible to work in one domain and never have to really stretch yourself. It's also possible to be perpetually expanding laterally into technology so new that you spend more time testing yourself in the wild than many who go "deep" on more thoroughly-trodded ground.

Re: Ask HN: Thoughts on Rich Hickey's advice on becoming a better developer?

#79
post #18

Whenever a question like this comes up among the people that I am mentoring, I like to show them the "T-Shaped Employee" section of the Valve Employee handbook [0]: "We value “T-shaped” people. That is, people who are both generalists (highly skilled at a broad set of valuable things—the top of the T) and also experts (among the best in their field within a narrow discipline—the vertical leg of the T). This recipe is…

You hit the nail on the head.

Beyond the scope of HR, in my experience it's the mix of both breadth of knowledge (context) and the depth of understanding (skill + experience) that is most useful.

Having a high-level understanding allows you to step back outside of the 'work' to instead focus on the objective, and someone with significant background knowledge and experience can utilize that to first conceptualize the optimal approach before hammering the nails.

Knowing what to apply, where, and when is equally as important as how. And there are fantastic programmers & hackers on each end of the spectrum, but in my experience developing that contrast is more intrinsically valuable.

Re: Ask HN: Thoughts on Rich Hickey's advice on becoming a better developer?

#80
I would go with the sort of answer that dodges anything concrete: It's not about which specific things you do, it's about doing things that seem scary and unfamiliar.

For some people, that means learning to write really tight low-level code for tiny hardware. For others, incorporating more advanced mathematical constructs. And for a third group, learning how to design a certain category of applications really well.

To round yourself out means not to stay within your comfort zone, but to attack the missing parts as well so that even if you aren't a master at those, you have working knowledge. This is also familiar to those who have studied drawing or playing musical instruments - there are many cases where you can get by with what you already know, but would do better if you took the time to study a technique in detail.

When Hickey says "you reset from zero" by only doing new things, he's specifically referring to repetitively relearning basic tasks in software development. That's the stuff that you're guided into looking at constantly because there are slick presentations and hypemen trying to get you to pick up their tool, and their tool has to look easier(i.e. more basic) than the other tool because that's the only way you'll pay attention to it.

If your approach involves something that is kind of challenging that you build from scratch, with new domain problems, that is a Good Thing and you'll surely get something out of it.

Post reply on HN