Live data from Hacker News

How do I know if I'm good at programming?

danielslater.net

121–130 of 153 posts

Re: How do I know if I'm good at programming?

#121
post #50
post #35

"Programming" is easy. You pick a language, learn a set of rules, and over time learn how to tell the machine what you want it to do in that language fairly well. Software development is hard. Unlike many other building tasks that humans run into, software is rarely "done". Launch of software for most of us means the code we've written has just been promoted to a point where now it's important, and will likely be wha…

Do we need to remember the distinction between type I and type II programmers? it sounds like we do. what you described are the type II variant. (and there are a lot more of them). type I = kernels, database query engine/optimizers, compiler internals. type II = glue libraries together with a high level language to solve business goals. type II often rely on type I's work.

I don't agree with that distinction. The programming part of it is still easy - even easier, I should imagine, for what you're calling the type I programmers.

The only difference is, the type I's "business" is algorithms and optimizations instead of yet another CRM or crunching some sales data. The underlying science behind what they are doing with it is difficult - just like dealing with business problems are, and most of them will succeed or fail in their efforts for the same reasons - ability to communicate and work with others.

Re: How do I know if I'm good at programming?

#122
post #35

"Programming" is easy. You pick a language, learn a set of rules, and over time learn how to tell the machine what you want it to do in that language fairly well. Software development is hard. Unlike many other building tasks that humans run into, software is rarely "done". Launch of software for most of us means the code we've written has just been promoted to a point where now it's important, and will likely be wha…

> "Programming" is easy. You pick a language, learn a set of rules, and over time learn how to tell the machine what you want it to do in that language fairly well. Chess is easy. You get the chess board, learn a set of rules, and over time learn how to pick the right piece to play the game fairly well. Being good at chess/programming would be totally different from knowing "whats happening programming/chess".

If you want to use analogies, then winning at chess would be akin to developing software, which is the same distinction I made. Learning the rules of 6 pieces vs strategically using those rules to win are different things all together.

Re: How do I know if I'm good at programming?

#123
No intrinsic quality makes you a good programmer. If you enjoy it, you'll develop solutions to problems that computers can solve. As you develop more, you'll become better.

Along the way, you'll develop a curiosity about solutions other people developed, so you'll read code more. Simultaneously, you'll develop curiosity about different tools, e.g. programming languages. This will lead you to explore them more.

It's all enjoyment feeding curiosity and lots of practice.

I'm watching my daughter's friend become a great basketball player. She's not inherently great at the game. She loves it and practices several hours daily in a disciplined manner. When it rains she puts on rain gear to practice. When it snows she shovels the driveway to keep practicing. She carries a notebook everywhere to diagram plays when she thinks of them.

Great programmers practice even when no computer is in front of them.

Re: How do I know if I'm good at programming?

#124
post #58
post #40

I think there are different ways to be a good programmer, beyond basic intelligence and diligence. In security and high-availability related environments – where I've spent most of my time – it is important that you validate all ins and outs, system and function returns, check if writes succeed, in short, not unlike a chess player, to be able to fit all possible moves and scenarios that could go wrong inside your hea…

> Universities focus too much on mathematical formulas in my opinion; real systems are not clean and simple like a math function with few variabes. How many variables your functions consume depends on how much you split them up, although you'll of course end up with thousands of functions for a real application, if they each consume ~3 arguments. So, in other words, the limitation is to what degree your language enab…

I think we're talking on a different level here. I'm rather thinking about the performance from an ops perspective. If you write highly specific code that runs close to the processor, of course predictability improves. But if you write a web application, possibly running in a virtualised environment, using remote databases and other network services, good look predicting performance to the end user. Even talking about tight loops, you simply can't predict if it will go and stay in the processor cache in layered, multi-tenant situations like that.

There is little correlation between theory and practice of a complex system when it comes to performance and reliability. For example, big-O notation tells you very little about the myriads of wonderful ways systems and networks can crash and burn. Disks never failed in my university classes. The more you know about the difference between a perfect theoretical system and the harsh randomness of a real one, the foresight of experience, the better a programmer you are, and this is not generally knowledge that comes from formal education.

In short, to be a better programmer, you need to know the difference between the best case ideal scenario and what is actually going to happen, usually when you least expect it...

Re: How do I know if I'm good at programming?

#125
It's too broad a question to give a definitive answer to. It depends on the context.

If you want to generalize, follow the 80/20 rule - 20% of the effort results in 80% of the benefit. Think like a business owner. Identify what the one or two key metrics are and come up with ways to efficiently ship ideas to test to improve them. Write code that is easy to test. Add high value tests. Avoid perfectionism.

Re: How do I know if I'm good at programming?

#127

There are 2 types of “good” programmers, who both think the other type is useless. The first is the “rockstar” developer type who is great at prototyping, hitting deadlines no matter what and delivering functionality, albeit full of bugs. They will write 80% of the code and will drive the support team up the wall by breaking the build, causing customer issues in production, security holes and basically seriously degr…

In practice you might have tension on a team between those who favor speed vs stability, but I resent the characterization that it is an inherent trait of the programmer. If you want to be a great startup engineer you have to exercise judgement; knowing when to do something quick and dirty, what to polish, what code is likely to live a long time, when and how to address various aspects of scalability, etc. Someone wh…

In my experience everyone has a natural mode of working and the conundrum for management is do you try to get people to change (to become all-rounders) or do you develop people in the direction they are already headed and therefore encourage specialisation? In my experience it’s sometimes better to let people be the best “them” they can be, than to try and require them to change and lose their uniqueness.

I think most developers naturally become more cautious with experience (the bitter experience of debugging long into the night usually), while some never grok maintainability or documentation but can still be highly productive net contributors if you have a great testing team between their code and your customers

Re: How do I know if I'm good at programming?

#128

If you're good at whiteboard programming solving well known interview questions, you're good. Computer science is a branch of mathematics and it is all about solving problems on whiteboard in front of peers.

I detect sarcasm in your reply.

Re: How do I know if I'm good at programming?

#129

Depends how you define good. Some define good as getting the job done in a quick and efficient manner and making the client (or company) happy with the result, however code quality may suffer in this instance and it could be hard to maintain. Others define good as writing the highest quality code with high test coverage, deployment procedures, writing detailed JIRA tickets, great documentation, training other develop…

Deliverables is misleading. Would you rather a deliverable full of bugs that can't scale but is delivered 'on time'?

[deleted]

Re: How do I know if I'm good at programming?

#130
post #95

I mostly disagree with the article. > Is the code readable? Readable code may not be good code. More readable code almost always means less efficient code. Readability is a trade off. > Is it easy to extend? Changing requirements are a thing for sure. But in almost every cases I came across, planning for shifting requirements always misses the point. It is much better to stick to your current requirements and keep yo…

"More readable code almost always means less efficient code." Can you give examples? I'm not sold that the "low hanging fruit" of readability improvement (empty lines to break up "paragraphs", breaking up unintelligible one-liners into several lines, etc.) degrades performance. My intuition is that the compiler/interpreter ends up producing almost identical runtime code and therefore similar performance. Unless you m…

Take the following code, which I had occasion to write this morning:

    foreach (var item in items) {
        if (items.Where(item2 => item.Upc == item2.Upc).Count() != 1) {
            item.Duplicate = true;
        }
    }
This is the most readable and straightforward code I could come up with for the task; it's also not particularly efficient, since it does at least twice as many comparisons as necessary (more if there are actually duplicate items). To make it more efficient would require extra loops and manually indexing them to skip over comparisons that had already made; in this context I decided against this because the performance impact was minimal since there are other far less efficient portions of the code which would best be addressed first if the program turns out to be too slow.
Post reply on HN