1337 c0mpu7ing 5k1llz
A while ago I decided to teach myself C properly rather than the mess I'd picked up on the streets. I got the O'Reilly book and went through that, coding up all the assignments and such. I'm pretty sure my technique's still sloppy and inefficient, but I at least know what's going on now. For example I actually understand how pointers work and why you want to use them, rather than just figuring out how. I now understand a lot of the design decisions that went into Citcom/CitcomS. Even if I don't agree with them, I can at least see a reason behind it and that helps. It's largely thanks to this, that I was able to write my tidal dissipation code as easily as I did, although that would still benefit from a revision to make the grid-spacing and layers easier to work with. The way for me to improve from now on is probably just more practice which I'll be getting anyway.
I've also gotten a lot better about documentation and backups. I'm not using Subversion or anything, since I'm the only one messing with my code, but I've been preserving old versions a lot better now and that's come in useful. And unlike most code I inherit from others, roughly half of what I write is comments, so when I come back to it months later, I can figure out what I did. I prefer long-winded and easy-to-follow than clever one-liners.
Now I need a new project to improve my computing skills. I finished the whole learning C thing some time ago, but I've been so busy with actual research and writing lately that I haven't started anything else. I'd like to have a computing skill to learn in downtimes when I'm waiting for a calculation to run, and don't have a lot else to deal with, or when I want to procrastinate while still doing something useful. Now is a great time for me to start, as there's a bit of a lull at the moment. I just got back from a meeting. I submitted one paper a couple weeks ago. I have a second mostly written; I'm just waiting on some calculations to get the last of the results. I'm thinking of learning one of the following next, but I welcome other suggestions.
1. Python
2. Perl
3. Java
4. HTML / CSS in a way that sucks less than my current stuff
5. Something else?
I've also gotten a lot better about documentation and backups. I'm not using Subversion or anything, since I'm the only one messing with my code, but I've been preserving old versions a lot better now and that's come in useful. And unlike most code I inherit from others, roughly half of what I write is comments, so when I come back to it months later, I can figure out what I did. I prefer long-winded and easy-to-follow than clever one-liners.
Now I need a new project to improve my computing skills. I finished the whole learning C thing some time ago, but I've been so busy with actual research and writing lately that I haven't started anything else. I'd like to have a computing skill to learn in downtimes when I'm waiting for a calculation to run, and don't have a lot else to deal with, or when I want to procrastinate while still doing something useful. Now is a great time for me to start, as there's a bit of a lull at the moment. I just got back from a meeting. I submitted one paper a couple weeks ago. I have a second mostly written; I'm just waiting on some calculations to get the last of the results. I'm thinking of learning one of the following next, but I welcome other suggestions.
1. Python
2. Perl
3. Java
4. HTML / CSS in a way that sucks less than my current stuff
5. Something else?
no subject
It's also possible to just do everything with arrays, but that gets tedious and requires you to lock in one size for all possible cases. That's how I used to do things back in the day. I never took a C class. I took C++ from the VT CS department. That's a bad language (for me anyway) and it was badly taught (though I didn't know that at the time). Pointers were not part of the curriculum; we used arrays for everything. Also filestreams. Using 'printf' in that class was punishable by crucifixion.
I'll say that my undergraduate education gave me a sufficient mathematical and scientific background, but was woefully inadequate on the computing end. When I got to grad school, the convection models I was using were written in C, so I picked up the language from there to a sufficient degree to mess with the code; outputting different data, adding new physics, eventually adding completely new modules. And switching to C for any postprocessing routines I wrote. But it was very much learning by example, and looking up actual references as needed. When I started my postdoc and needed to develop new models entirely from scratch, I decided it was time to learn to do this properly.
no subject
Just whatever you do don't bother with Java. It has no redeeming qualities for you: it's complicated where it should be simple, simplified where it needs complexity, verbose, and slow.
I don't know if you already do this or not, but one thing you might do is learn MPI or OpenMP. They are C libraries that let you write parallel programs to run on cluster computers, which lends itself nicely to big complicated physical simulations.
no subject
no subject
I've selected Python as my current learning project. It can be integrated with C (or C++ if necessary), and the CIG version of CitcomS (originally C) uses this feature. I've discovered I can get the full text of the O'Reilly book series online through the UCSC library, so that will be helpful.