Live data from Hacker News

Practising Programming

tratt.net

31–39 of 39 posts

Re: Practising Programming

#31
post #30
post #26

> When we see a world-class musician flawlessly play challenging music, it can be tempting to imagine that they were always able to do so. A moment's thought makes it obvious that they must have had to spend huge amounts of time practising basic techniques in order to reach that level. What's less obvious is that they have to continue spending considerable amounts of time simply to maintain that technique, let alone…

You may want to watch a number of Benjamin Zander's YouTube videos and revise your statement. I share your frustration on feature pressure with no official room for practice and refactoring however the metaphor about the role of a conductor is completely off. A conductor knows and understands music, deeply, a d they connect the dots and coordinate the orchestra and zoom into lots of little details while improving the…

The conductor in my comment is a project / engineering manager and is meant to show how bad OP's analogy is.

Re: Practising Programming

#32
I interned at a retail company ad a software engineer when I was in college, and thought hat a sophomore in college knew everything they needed to about programming to work there. I still believe that's but there are so many other skills to be had there.

Now that I'm full time at a start up, I've learned so much in the past year, not just about programming, but more about design, testing, tradeoffs, business, and DevOps.

The amount of skills a software engineer needs is much less of just programming than I thought. So many soft skills involved, so much design, so much practice and iteration.

It's absolutely amazing to see how much there is to learn. I can't see myself at that retail company again, just because everything was slow. They had very stable services and ops, no doubt, but since there was already a group of people to handle that task, I never learned it. At a start up, I need to do everything, and I love it so far.

That said, I can see it becoming overbearing at a certain point and wanting that slow down eventually, but I'll play it by ear.

It's a great industry to be a part of, and as a young developer, it's a very exciting future.

Re: Practising Programming

#33
post #14

Earlier quoted context omitted.

He might mean limited 'natutal' talent. Some people just inhale new concepts and syntax and grok it all instantly. Others of us have to really work at learning, understanding and using it before it clicks, and even then it's easy to forget if you don't use it often. But that second group can be ultimately more successful because they've learnt how to learn, the natural learner has no idea what they should do when it…

The people groking things instantly and inhaling ideas are actually the ones who learned to learn, and everyone else just thinks they have because they put a lot of effort into broken practises of learning.

I think this downplays the importance of innate intelligence and it is not something you compensate for by simply learning "the right way". It would be nice if it was like that though.

Re: Practising Programming

#34
post #30
post #26

> When we see a world-class musician flawlessly play challenging music, it can be tempting to imagine that they were always able to do so. A moment's thought makes it obvious that they must have had to spend huge amounts of time practising basic techniques in order to reach that level. What's less obvious is that they have to continue spending considerable amounts of time simply to maintain that technique, let alone…

You may want to watch a number of Benjamin Zander's YouTube videos and revise your statement. I share your frustration on feature pressure with no official room for practice and refactoring however the metaphor about the role of a conductor is completely off. A conductor knows and understands music, deeply, a d they connect the dots and coordinate the orchestra and zoom into lots of little details while improving the…

You're describing a good conductor/manager. Everyone knows a conductor's role is vital.

What mkl95 was talking about is the manager/conductor we actually get.

Re: Practising Programming

#35
post #6

That's fair, but if you code for a living and growing is important for your, you should carefully evaluate where you work. Sometimes people dismiss certain companies. I remember my first boss dissing Google saying things like "how good can Google really be?". Now that I've experience it, I can say that career growth and learning between companies are not measure in percentage points or multiples, but orders of magnit…

Are you able to compare the experience of being at a Big Tech company against a very small team with wide responsibilities? I'm in my 11th year as a developer and left a pure tech company 6 years ago where I was surrounded by other engineers for a small one where I've been 1 of a 2 until this past year (I now lead a team of 3 stateside and nominally 3 more overseas). Note for traditional startup folks: the lack of te…

I don't personally have experience with early stage startups so I can only talk second hand. I think both can provide growth in different ways.

Big Tech is more consistent and structured, while startups are sink or swim. I've seen people come in as Principal Engineers after building the entire product of a successful startup. But that happened because they joined a rocket ship as an early engineer, which is the programmer's equivalent of winning the lottery.

So if you can join a rocket ship by all means do it. Otherwise Big Tech is generally a safe bet.

Re: Practising Programming

#36

I don't believe programming is anything like other skills(That's why I love tech jobs!). There's no muscle memory strictly needed. No precise memorization. There's none of what I call "atomic time regions" where once you start, everything has to be right or the whole thing is considered a failure(Think of calligraphy and how one bad move can ruin a piece). Instead there's just a small amount of base knowledge every c…

> If a world champion level programmer makes a basic app in Vue, it will maybe be 20% better than mine, because... modern programming is all about providing obviously ways to do common things. There's not much variation possibly in something so completely technical.

Yes, I also think the experienced ones will have a 20% better code in every aspect that compounds with the development time.

> If we both design 100kloc apps, his(hers?) will be a lot better. There design choices in that kind of thing that don't come up at all in a 1 day project

Absolutely! What I believe is this design decision is the result of practice and experience.

> Instead there's just a small amount of base knowledge every coder needs, plus vague familiarity with frameworks, and a general sense of what will possibly screw you over later

Proposing that programmer needs only a small amount of base knowledge is a bit spicy proposal.

The reasons:

1. It undermines the actual result of having large knowledge base and familiarity with everything around computation. Sure, there may be limited concepts, but there are so many details behind these concepts. Think about it, there may be some historic reason to do certain ways of things. There may be fundamental concepts based on some rigorous proofs and maths. Or there may even be something so crucial that is yet to be discovered.

2. It's just that if we do something that doesn't involve these overall knowledge, doesn't mean the requirement is small. There is a lot of ways to do things and everything is dependent on problem at hand.

3. The rigidity and small base knowledge might have been the result to maintain a code base. But anyone who is careful enough, will definitely have large base knowledge at their disposal.

What are your thoughts on this? ;)

Re: Practising Programming

#37
post #31
post #30

Earlier quoted context omitted.

You may want to watch a number of Benjamin Zander's YouTube videos and revise your statement. I share your frustration on feature pressure with no official room for practice and refactoring however the metaphor about the role of a conductor is completely off. A conductor knows and understands music, deeply, a d they connect the dots and coordinate the orchestra and zoom into lots of little details while improving the…

The conductor in my comment is a project / engineering manager and is meant to show how bad OP's analogy is.

The article is talking about deliberate practice at an individual level. No conductor, no orchestra, no collaboration.

I agree there are incompetent men-in-the-middle managers who make things worse. It didn't occur to me to think about that in the context if the article, plus, I've had the joy if working with excellent project managers, too. So the bad conductor ex machina didn't click with me.

Re: Practising Programming

#38
post #6

That's fair, but if you code for a living and growing is important for your, you should carefully evaluate where you work. Sometimes people dismiss certain companies. I remember my first boss dissing Google saying things like "how good can Google really be?". Now that I've experience it, I can say that career growth and learning between companies are not measure in percentage points or multiples, but orders of magnit…

What do you think is the reason for that "orders of magnitude" in growth? Can one experience similar without working for a big tech? Is it a mental thing or rather the working environment with many highly qualified people around?

Mindset is necessary but not sufficient. Some environments encourage learning, while others discourage it. That's the trick behind the "orders of magnitude" sleight of hand. Is not that you learn 100 times faster in some companies (whatever that even means), but that in some places you don't learn anything at all, and in others you pick up bad habits that could count as negative learning.

For example one of my previous companies was very top down, siloed and hierarchical. One time I went to talk with a PM from a different team about the prioritization of certain customer features, and my boss got really pissed off. He told me I should never talk directly with anyone and should always communicate via him. This was also the kind of place where new ideas were shut down and opposing the main point of view could get you in trouble.

What about the opposite, people who have the environment but not the mindset? Some might coast years in big tech actively refusing to learn, but it is rare. Most often they will be put in situations that make them uncomfortable and will choose to leave (reorgs are common). Other times their performance will simply suffer if they aren't able to keep up with the team.

Re: Practising Programming

#39

I don't believe programming is anything like other skills(That's why I love tech jobs!). There's no muscle memory strictly needed. No precise memorization. There's none of what I call "atomic time regions" where once you start, everything has to be right or the whole thing is considered a failure(Think of calligraphy and how one bad move can ruin a piece). Instead there's just a small amount of base knowledge every c…

> If a world champion level programmer makes a basic app in Vue, it will maybe be 20% better than mine, because... modern programming is all about providing obviously ways to do common things. There's not much variation possibly in something so completely technical. Yes, I also think the experienced ones will have a 20% better code in every aspect that compounds with the development time. > If we both design 100kloc…

I definitely think there is a vast amount of knowledge involved in programming, to say otherwise would be to say I've learned nothing in the last 10 years, and that I'm as good as a 30yr veteran, and neither are true.

But I think the knowledge is "Distributed" differently, and it such a way that most of it is best learned by real world projects(Or toy ones that are similar to them) rather than the kind of practice musicians do.

Practice and experience is definitely valuable, but I'm not sure if the stuff programmers advocate(A constant flow of new small projects) is the best way.

The first thing programmers learn is the base concepts like variables, objects, and whatever other building blocks are considered atomic at the level you are working.

No real need to practice that much. It's deliberately kept small in most schools of thought, and many concepts can be learned in literally minutes.

I don't see much value in practice that only teaches this level, once you know what a class is. Plus, you use this stuff constantly. Sure, if you hear of a new base concept it's worth taking time to learn, but we don't need to take a class in "What a variable do" once we understand.

Slightly past that is just basic debugging in "regular code"(As opposed to the kind of code with algorithms you might consult a textbook about)

I don't know many who write things first try. So if you are coding wt all, you're probably getting your practice in for this.

Then there's algorithms. There's more of these than you have time to learn, so you'll need some kind of.... algorithm for choosing.

Working on any of these is going to help your general algorithmic ability, if you're doing something with novel algorithms. But the real hard part is often in the math, so if you want to focus on being really good at this, I would imagine that you also want to spend just as much time studying math and comp sci.

Plus, this is only one part of programming. Some toy weekend projects do seem like they'd teach this, others don't. Particularly automation stuff.

Then there's edge cases, one of my favorite subjects. I don't think anything random and throwaway shows you this. Automation projects might help a bit, but the real hard parts often only show up when something runs for two weeks and a server goes down at just the wrong time and some data gets out of sync.

The usual "Just find reasons to throw stuff together and make some ad hoc scripts every chance you get" doesn't really seem to help you practice thinking through obscure failure modes. SD card wear, unset system clocks, user error, etc don't come up a lot in 30 lines of Python always run manually. Your app works now... but if I run it without root, will it make half finished changes and lose data?

And then finally there's architecture. 100 line scripts don't have that much, and they certainly don't need things like plugins.

Nobody agrees on this. We fight over when to do microservices or monoliths. It involves making APIs that other programmers don't want to punch you for. As much art as science, unless someone figures out the One Final Best Practice.

I don't see how anything except projects big enough to need an architecture will teach this.

There's also low power, web scale, high security, and all kinds of other specific stuff.

In every other discipline, practice is supposed to push your limits, expose you to new things, resemble the "real thing", or just refresh your memory of fundamentals.

But the whole "10110100100 code program everyday" movement only focuses on the last one.

Coding for relaxation is fine, but I don't feel that I would learn all the things I want to learn particularly efficiently by fussing with some suckless app source code on a weekend.

Plus, there are only 24 hours a day, and people who code so much there's no room for anything else... are often insufferably boring and lack an appreciation for anything with no screen.

And of course the Digital Ankleweight effect. If you use a lot of DIY tools you have to maintain, it can... really take a lot of time on a constant basis. It's pretty freeing to use more standard tools and just... not have to worry about it. It's like what minimalists are trying to go for, but more effective, because you're directly going after stuff that actively hassles you not just the abstract "complexity" minimalists hate.

I'm all for continued education, it's the "Code noodling" without any real specific thought to what exactly it's meant to teach you, that I have doubts about.

I think practicing specific things you have considered and decided you want to learn, plus longer term projects and open source contribution, might be a lot more helpful than a lot of what people do.

A lot of great stuff happens in weekend projects, and also some mediocre stuff.

Post reply on HN