Some posts I liked to read this week
Plenty of links this week.
On Interpretation of Results and Quotation out of Context Title says it all. :-)
Database War Stories #3: Flickr - How is Flickr databases architected to handle it's huge data requirements. I was expecting more juice. No gory details or juicy information, but interesting nonetheless.
Why Distributed Version Control Matters to You, Today - A explanation why decentralized source control matters and why you should use it. Heavily biased to open source development, since they probably represent the archetypal of decentralized/dispersed developer teams. Interesting read.
When computer programmers dabble in economics: Paying parking tickets - Brilliant a programmer doing cost benefit analysis and risk assessment. Wish this was taught in computer science curricula. :-)
Who Killed the Software Engineer? (Hint: It Happened in College) - A rant that is making the rounds on the web. How colleges are killing computer science. I won't comment on this, because I'm tired of hearing people calling me a negativist. :-)
Software Engineering and the Cause of the CS Enrollment Crisis - Mark Guzdial talks about it the dropping numbers of people enrolling in Computer science courses. Is this related to the previous link? Is this the cause of the reasons exposed in the previous link? or the dumbing down of curricula mentioned on the on the previous link are just a consequence of the dropping numbers and a futile and useless attempt to solve this enrollment crisis?
Two Thoughts on Computer Science Courses - This seems to be CS and Education week. Small post, but interesting. And has plenty of interesting links. And I'm always a sucker for a soundbyte :
My first thought: if your comp-sci course is easy then you’re either a genius or you’re wasting your money. The odds on that are not in your favour.
My second thought: if your comp-sci course takes you to the edge of weird when it comes to computing (to put it another way: if you’re constantly thinking “when will I ever need to use this??”) then you’re probably really quite fortunate. Drink it in
40 Reasons Why Software Projects Die - Title says it all.
Rich Programmer Food - The title is a bit misleading, but it's GREAT post about compiler writing is a fundamental course in a Computer science degree. I have rephrased in a more gentler way. Steve Yegge summons it as:
If you don't know how compilers work, then you don't know how computers work. If you're not 100% sure whether you know how compilers work, then you don't know how they work.
This brings me back memories of probably the most demanding course I took on college. Writing a compiler is hard, but it taught me a lot of things. Not in terms of programming but in terms of software engineering,data structuring and some neat compiler techniques. We wrote a compiler for a Pascal like language that targeted x86 machines. The code was written in C and it was cross platform and it runned in Unix and MSDOS.
- The absolute need of source control tool (three people working on a compiler concurrently totally show the need for source control. Off course back then we still didn't knew source control. We regulary had one person integrating everyone tree into a integration tree, and we had a make target that we runned regularly to zip all the sources. Which we diff'ed manually if was needed to backtrack some changes).
- Build Process - Having a build process that was repeatable. No need to have manual builds, anyone could start a build with a single command.
- The need for automated testing, back then we didn't knew unit testing nor there were any tools for it. So we had to settle for a lesser approach. A bunch of sources (that represented all the features of our language and edge cases. Can't recall exactly but we had more than 100 tests including a game of tic tac toe) that we compiled in a shell script, detected if the our compiler core dumped, we also runned the non interactive tests and compared the output with expected results (file comparison with the expected output. Not very sophisticated but it worked).
- Automation - The need for automation on repetitive processes. Our regression tests were made on a Unix Machine, but we had to produce MS DOS executables. So we had to take the generate assembly filed and assemble it on a MS DOS machine using MASM or TASM. This was a manual process. Run the regression tests, place all the ASM generated files on a floppy disk (which mean mount floppy,copy files and unmount the floppy), and assemble all of them on the MS DOS (we had a batch for that though :-)). After a while we got tired of this. So we automated it. The MSDOS machine was connected to the Unix machine through a serial cable. Via terminal software, we compiled the code via make, run the shell scripting for tests regression, zipped the results, downloaded them via Z-Modem protocol, and with a batch file unzip the file, assembled the results and run the non interactive ones to see if they crashed. Ah the joy of automation, it sure beat the semi manual process . :-)
Things we should have learned in the process, but didn't.
- The importance of bug tracking - The importance of a bug tracking system. We relied on paper and memory to mantain a list of problems. We never knew when problems (and if) and been solved, what caused the problem. This meant mean some productivity hit, and lost time when old bugs reappeared and we didn't know that it was in fact an old bug (although this was attenuated with tests for regressions)
We also took some other lessons, but this is already longer than it should for a quickie kind of post. :-) All this to say that not only I resonate with Steve's post but I also agree with him. Too bad the year after I took this course it was the last time it was part of curricula. Apparently people complained it was too hard, and it was removed. *sigh* Too bad for them. Demanding? yes. Hard? Yes, totally worth it? ABSOLUTELY. The benefits and lessons far outweigh the costs.
Top 5 Attributes of Highly Effective Programmers - What can I say? title says it all.
[Cross Posted on http://www.agilior.pt/blogs/tiago.pascoal/archive/2008/01/26/3577.aspx]