I learned most of my logic stuff via computer programming since I was a kid, so by the time I started looking at Philosophy seriously (just a year ago or so), I had to skip right by the analytic philosophy code 'cause it looked too much like yet ANOTHER computer language to learn and I already knew my XORs / NORs / NANDs and all the weird and wonderful boolean combinations that were possible and what they did. Programming requires rational thought but it's of a different sort because the programs have to run and so long as your program runs (or spreadsheet spits out the numbers you want), all of your logic is checked thoroughly and works. What becomes important at that point then, isn't whether the logic functions properly (that's easy enough to do) but rather questioning your initial assumptions, do you have enough inputs? Are you transforming the values properly? Are the results applicable or bunk? etc.