Tag Info

Hot answers tagged

130

This is awesome. I wish more software developers took the time and effort to do this. It: States in plain English what the class does (i.e. it's responsibility), Provides useful supplementary information about the code without repeating verbatim what the code already says, Outlines some of the design decisions and why they were made, and Highlights some ...


63

Disclaimer: I am an architect in an agile environment but, as Helmuth von Moltke the Elder says, "No battle plan survives contact with the enemy". In other words, practicalities mean that the exact letter of the guidelines cannot always be followed. Most of the points raised above are followed as best the team can. However, principle 1 (The teams that code ...


35

Let's assume that all specifications are in place and the organization is working perfectly. You've assumed the two biggest "bottlenecks" in the software development processes don't exist (from my personal experiences).


34

The key to working with a large codebase is not having to read the entire codebase to make a change. To enable a programmer to quickly find the code he is looking for, code should be organized, and the organization apparent. That is, each logical unit in the code, from the executable, the library, the namespace, down to the individual class should have a ...


14

I would not agree this is a very good approach, mainly due to When you refactor your project, move methods around, the documentation breaks. If documentation is not properly updated, it will result in more confusion than help understanding the code. If you have unit tests for each method/ integration tests for each module, it would be a self ...


11

One aspect of experienced programmers who move from an IDE to a console / xterm environment, is finding a replacement for the indexing of source code objects (function names, variables). I believe the general term used for Microsoft's Visual Studio is Intellisense or something like that. In the Unix/Linux world, such as vim, one tool used if ctags or the ...


9

Disclaimer: I am not an agile coach/architect - this is what I've seen in agile projects that I've worked on and I think it works well. I don't think it's quite defined by Agile how you do architecture - agile focusses on development methodologies and practices. UML on the other hand is just a language to communicate your architecture which is beyond agile ...


8

Even in your hypothetical, perfect world, there are some issues I can see: Probably the most important, from my own point of view, is dealing with customers. In my own experience, the business has to deal with customers who frequently try to change the project while it's being developed. In some instances, they have tried to wing a change request as a bug ...


8

Books like http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 should be witness enough to how large, legacy poor quality code bases are common in the industry. My guess at why you have not heard or seen, and, more importantly, you will never likely hear about them until you work on one of them yourself, is, nobody seems capable ...


7

I don't intent to be part of VIM vs. IDE debate. I guess that is personal pref. But i use a lot of VIM and here is why i find it very powerful to use vim Two parts of the answer: A. Most things VIM allows most thing you can do with IDEs,(i am not trying to put every feature but just a few non-obvious that make vi look limiting) you can go traverse the ...


6

I'm personally a fan of a high-level design document - preferably written BEFORE any code - that gives an overview of the design and a list of classes and resources. A top-down design greatly simplifies things - yours might be "game engine -> hardware -> controllers -> joystick"; thus, a new programmer told "fix the 'a' button on the 'xyz controller" would ...


5

You're asking if it is important to include all links in RSS - look at other huge services - nytimes.com displays only 25 links in it's feed. It's up to RSS readers software to fetch your feed often enough to get all I guess.


5

The nice thing about the PageRank algorithm is that it can be solved iteratively in a distributed way, within the MapReduce framework. However, the working data for Pagerank on ~5M nodes and ~50M edges should fit perfectly well in 4GB ram, never mind 48GB.... Specifically, you don't need to store all data for each web page in memory -- instead, you should ...


5

Stepping through the code can be great at determining functionality. But I have found the more complex an application is, the more likely you are to be bounced around in the debugger and get completely lost. I would focus on understanding the business rules of a particular piece of functionality of the application. Ideally, focus on the simplest part. ...


4

In my opinion, Vim gives you a very strong editor with basic features, but it's up to you to spice it up with scripts/addons you'll most likely use in your projects. These will probably be different depending on whether you mostly edit scripts, documentation, or files that need to be compiled. As an example, I use zencoding for the occasional html/css ...


4

On February 3, 2013, Michael Meeks, one of the LibreOffice developers, is giving a talk in a couple of days entitled, "LibreOffice: cleaning and re-factoring a giant code-base, or why re-writing it would be even worse." It sounds like exactly what you're asking for: a discussion of what they've done to take " a poorly-understood, gigantic code-base ...


4

Looks like you are completely borked with that lack of branching. At the very least you should be developing on a Dev branch and merging completed code onto Main when your code is working and 'releasable'. This would stop the stupidity of reverting committed work if you failed to meet your deadline and re-committing it afterward. The days of using VSS are ...


4

The most important rule I have found for making it easier for new developers to understand a codebase is perfect agreement is expensive. If new developers must perfectly understand the system they are working on, it prevents all opportunities for on the job learning. I think the programmer's notes are an excellent start, but I would go further. Try to ...


3

I've actually been through a fairly significant refactoring three times in my career. Code has a tendency to decay, so if your code base is around long enough, a large refactor is pretty much unavoidable. All my examples were on private code bases, which might explain why public examples are hard to find. The first time was an application which, believe ...


3

You're basically asking "what's the best way to write commercial software", and if you ask 5 guys you'll get 8 answers. Therefore, the best answer I can give to such a broad question (not sure it's "overly broad" and thus a candidate for closure, and thus I will try to answer) is: IT DEPENDS. It depends on how many developers are working together. In a ...


3

Most overwhelming systems, in my experience, have at least a few key parts that seem scariest. I pick one and try to understand just that one. Knowing that key part makes it easier to understand its related parts. My favorite approach to doing this is to use a sequence diagram. To me, a sequence diagram provides me with the picture I need to understand how ...


3

I do all my programming in vim. I actually find it easier than any IDE I've used. You can have multiple files open at the same time, even on the same screen (look up tabs and windows). I'm usually working in X, so I have several (6) xterm screens open: one for c files in vim (several in tabs), another for headers in vim (also tabs), and non-vim windows: ...


3

I'm not sure what you mean by "the organization is working perfectly", but even in a fantastic organization, the biggest bottleneck in any sizable project is communication. Mythical Man Month points out how, as a project team grows, communication combinations explode, almost guaranteeing errors and missed information.


3

In my experience the major "bottleneck" is the learning process. When your hypothetical company sets out to develop the next Microsoft Word there is a huge gap between what you need to know and what you actually know. The size of the gap depends on many factors, it may be in technology or the domain. You've touched on some of these issues in your ...


3

I have seen large classes with documentation, and after reading the documentation I haven't got a clue what this class is supposed to be good for and why anyone would use it! And at the same time, I had a need for some functionality and I was absolutely sure there must be a class to handle it, and couldn't find it anywhere - because there was no ...


2

From what I've seen thus far at work, a large source of bottleneck comes simply from bugs and the human error that created them. Just think about the time it takes to debug the code, find a fix for the problem, and then retest the new solution. Now imagine if that fix caused another subtle bug. It can be a major stream of pain and thus slows down the ...


2

I think Brandon Moretz has the best answer. But I want to add that getting the first version out of a large project isn't all that hard. I personally have never failed to do that. What I have failed to do was create the first version in a way such that that the second, third etc version and or bug fixes and or minor feature enhancements can also be ...


2

Like you, I always step through the lines in the code base to get a basic feel. I know how you feel, one time I got hired in the 10th iteration of a large scale web project. Its architecture was one of the prototype's for http://webformsmvp.com/ . So it was totally new and we we're using commerce server 2007 too, no one in the country had experience with ...


2

Learn about source control, and how to follow 'house style' if there is one, i.e. don't fight the man if the man wants you to use tabs over spaces, put in or leave out semicolons, and so on.


2

How can I follow the code to low level functionality in order to get a better grasp of what is going on at a high level? Short answer: you can't. Longer answer: Any non-trivial application is going to be too big very soon for you to try and understand it in a bottom up manner. This gets worse as soon as a framework and/or patterns like observers are ...



Only top voted, non community-wiki answers of a minimum length are eligible