Live data from Hacker News

Great Programmers (2004)

bramcohen.livejournal.com

11–20 of 31 posts

Re: Great Programmers (2004)

#11
post #5

Why everyone has to write new code to learn? I find best way to learn is to read existing code. When I find interesting project, I download source code and read it from top to bottom. I may even fix a few bugs before hitting compiler.

[deleted]

Re: Great Programmers (2004)

#12
post #7

Does anyone have any good resources for learning how to better architect systems? Other than, say, The Architecture of Open Source Applications: http://aosabook.org/en/index.html Reading source code of prominent projects is a good way to get better, but it's hard to understand the architecture if you aren't aware of the design constraints/requirements that led it to be the way. Surely there must be a way to fast trac…

In my experience, there is no better way than to build it. You learn quickly from your failures and become aware of subtle issues that no text-book or article will ever touch since they are so domain specific. The best way to learn by doing, IMO, is by joining an organization that works on a large and complex code base. It won't be as exciting as writing new code, but adding to an existing complex system will force y…

parent has some great points. You only will really learn by doing.

A couple of things you can do is start reading up on well designed systems and the gotcha stories. Personally, I track highscalability.com since I spend a lot of time working in distributed systems. They tend to have interesting insights and will link to tech talks and blogs that contain a wealth of information. Also go read up on some of the papers explaining the designs behind systems you use (e.g. Amazon dynamo) and why they made the choices they did. It'll give you some insight into how people measure tradeoffs and figuring out what's important.

Re: Great Programmers (2004)

#13
post #5

Why everyone has to write new code to learn? I find best way to learn is to read existing code. When I find interesting project, I download source code and read it from top to bottom. I may even fix a few bugs before hitting compiler.

You need good quality code to begin with. I have had a couple of jobs as a maintenance programmer for large projects, and the code on one was not something you could learn from. On the other hand I have been playing about with some Django third party modules, upgrading them to Python 3 for my project, and that is code I can learn from.

Re: Great Programmers (2004)

#14
post #13
post #5

Why everyone has to write new code to learn? I find best way to learn is to read existing code. When I find interesting project, I download source code and read it from top to bottom. I may even fix a few bugs before hitting compiler.

You need good quality code to begin with. I have had a couple of jobs as a maintenance programmer for large projects, and the code on one was not something you could learn from. On the other hand I have been playing about with some Django third party modules, upgrading them to Python 3 for my project, and that is code I can learn from.

I started as maintenance programmer. I learned from that and now I just walk away from bad code, unless I get resources to fix it.

Re: Great Programmers (2004)

#15
post #14
post #13

Earlier quoted context omitted.

You need good quality code to begin with. I have had a couple of jobs as a maintenance programmer for large projects, and the code on one was not something you could learn from. On the other hand I have been playing about with some Django third party modules, upgrading them to Python 3 for my project, and that is code I can learn from.

I started as maintenance programmer. I learned from that and now I just walk away from bad code, unless I get resources to fix it.

One of the jobs was for an investment bank. The job was crap. No one in my team of 5 lasted much more than a year. And sadly they did have the resources to hire more developers and address the problem that way. Brute force recruitment.

Re: Great Programmers (2004)

#16
Bram hints at this, but doesn't quite make it as explicit as I would: the thing that distinguishes great programmers is the ability to understand how the pieces interact. Anyone can understand how one piece of code works, even if it's fairly complex. A good programmer can understand how one very complex piece of code works. However, any modern codebase of any significance is impossible for anyone to understand as a single monolithic whole. The key ability is to create a clean mental model of each piece, even if the actual implementation or interface of that piece is nowhere near so clean, and put those models together to understand all the "between the cracks" stuff. That's the key bit of genius behind BitTorrent, for example. It's not that the individual pieces are so special, but that the emergent behavior of those pieces interacting with one another is very beneficial.

Re: Great Programmers (2004)

#18

Does anyone have any good resources for learning how to better architect systems? Other than, say, The Architecture of Open Source Applications: http://aosabook.org/en/index.html Reading source code of prominent projects is a good way to get better, but it's hard to understand the architecture if you aren't aware of the design constraints/requirements that led it to be the way. Surely there must be a way to fast trac…

how to better architect systems

I beleive that there is one answer to this question which does 80% of the job, it is easy to express and yet in the same time impossible to grasp for so many programmers/managers which leads to so many awful codebase.

As the post says very well: start by thinking about what you would do if you had infinite resources. That's the ideal case. Find a real bottleneck (money, cpu, memory, ?) and rethink your architecture accordingly, find the next real bottleneck and so on.

Re: Great Programmers (2004)

#19
I'd also include knowing a lot about computers. Like how they work at a low level, how they represent numbers, low level networking protocol, how the operating system interfaces like interrupts, how processes and threads work. A computer science education really helps, but you'll also have to be able to solve problems and think about how theory and real physics world collide.
Post reply on HN